pronounce it
挑战地址,点我
分析
右键查看网页源代码,有这样的提示信息:
<peakhell src="banner.p"/>
</body>
</html>
<!-- peak hell sounds familiar ? -->
这里有一段提示 peak hell sounds familiar ?
peak hell 和什么的发音相似?
还有个 peakhell
标签,里面有个 banner.p
,打开看下是一堆不规则的文本。
其实 python 中有个 pickle 模块,用来进行对象的序列化和反序列化。
尝试把 banner.p
中的内容反序列化试下:
#!/usr/bin/env/ python3
import urllib.request
import pickle
url = "http://www.pythonchallenge.com/pc/def/banner.p"
with urllib.request.urlopen(url) as f:
print(pickle.load(f))
输出内容:
[[(' ', 95)], [(' ', 14), ('#', 5), (' ', 70), ('#', 5), (' ', 1)], ...省略
可以发现反序列化后,这是一个二维数组,把输出的格式调整一下:
#!/usr/bin/env/ python3
import urllib.request
import pickle
url = "http://www.pythonchallenge.com/pc/def/banner.p"
with urllib.request.urlopen(url) as f:
result = pickle.load(f)
for r in result:
print(r)
输出内容:
[(' ', 95)]
[(' ', 14), ('#', 5), (' ', 70), ('#', 5), (' ', 1)]
[(' ', 15), ('#', 4), (' ', 71), ('#', 4), (' ', 1)]
...省略
仔细找下规律,发现每一行的数字之和都是 95,而且里面每一个元组由两部分组成,一个字符(空格或者#),一个数字,比如:(' ', 14), ('#', 5)。可以联想一下,这是一个矩阵,元组中的数字代表前面的字符重复次数,每一行都有95个字符。
尝试试一下,看看会有什么效果:
#!/usr/bin/env/ python3
import urllib.request
import pickle
url = "http://www.pythonchallenge.com/pc/def/banner.p"
with urllib.request.urlopen(url) as f:
result = pickle.load(f)
for r in result:
for c in r:
for i in range(c[1]):
print(c[0], end="")
print()
输出内容:
##### #####
#### ####
#### ####
#### ####
#### ####
#### ####
#### ####
#### ####
### #### ### ### ##### ### ##### ### ### ####
### ## #### ####### ## ### #### ####### #### ####### ### ### ####
### ### ##### #### ### #### ##### #### ##### #### ### ### ####
### #### #### ### ### #### #### #### #### ### #### ####
### #### #### ### #### #### #### #### ### ### ####
#### #### #### ## ### #### #### #### #### #### ### ####
#### #### #### ########## #### #### #### #### ############## ####
#### #### #### ### #### #### #### #### #### #### ####
#### #### #### #### ### #### #### #### #### #### ####
### #### #### #### ### #### #### #### #### ### ####
### ## #### #### ### #### #### #### #### #### ### ## ####
### ## #### #### ########### #### #### #### #### ### ## ####
### ###### ##### ## #### ###### ########### ##### ### ######
这些空格和#最终组成了一个单词 channel
,这应该就是下一关的入口了http://www.pythonchallenge.com/pc/def/channel.html。
参考资源: