0%

Python Challenge (Level 30)

第30关

Page Source里提示找csv文件,很容易就得到yankeedoodle.csv文件。

csv文件即comma separated values,直接用文本编辑器即可看到里面的内容。

yankeedoodle.csv里面有7367个浮点数,我们把些值当成是图片像素值,把它们放到大小为53*139的图片中,会得到下面的公式。

n = str(x[i])[5] + str(x[i+1])[5] + str(x[i+2])[6]

接着,按照上面的公式,每三个浮点数一组,分别取第6/6/7位数字,组合得到一个新的数值,再就爱那个数值转为ASCII打印出来。
例如,三个浮点数分别为0.82207, 0.91181, 0.88563.则分别取一位,得到’0’, ‘8’, ‘3’,组合起来就是083,相应的ASCII码为’S’.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from PIL import Image
from numpy import genfromtxt

data = genfromtxt('data/yankeedoodle.csv', delimiter=',')
data = data[:, :-1]
data = data.reshape((-1,))
data = data[:-1]
data = data.reshape((139, 53)).transpose().reshape((-1,))

im = Image.new('L', (139, 53))
im.putdata(data*255)
im.show()

data = data.reshape((53, 139)).transpose().reshape((-1,))
data_str = ["%.5f" % i for i in data]
msg = []
for i in range(0, 7365, 3):
msg.append(chr(int(data_str[i][5] + data_str[i+1][5] + data_str[i+2][6])))

print ''.join(msg)

得到的信息为

1
2
3
So, you found the hidden message.
There is lots of room here for a long message, but we only need very little space to say "look at grandpa", so the rest is just garbage.
VTZ.l'tf*Om@I"p]#R`cWEBZ40ofSC>OZFkRP0\)

下一关:http://www.pythonchallenge.com/pc/ring/grandpa.html