
peakhell
pronounce it
挑戰(zhàn)地址,點我
分析
右鍵查看網(wǎng)頁源代碼,有這樣的提示信息:
<peakhell src="banner.p"/>
</body>
</html>
<!-- peak hell sounds familiar ? -->
這里有一段提示 peak hell sounds familiar ? peak hell 和什么的發(fā)音相似?
還有個 peakhell 標簽,里面有個 banner.p,打開看下是一堆不規(guī)則的文本。
其實 python 中有個 pickle 模塊,用來進行對象的序列化和反序列化。
嘗試把 banner.p 中的內(nèi)容反序列化試下:
#!/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))
輸出內(nèi)容:
[[(' ', 95)], [(' ', 14), ('#', 5), (' ', 70), ('#', 5), (' ', 1)], ...省略
可以發(fā)現(xiàn)反序列化后,這是一個二維數(shù)組,把輸出的格式調(diào)整一下:
#!/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)
輸出內(nèi)容:
[(' ', 95)]
[(' ', 14), ('#', 5), (' ', 70), ('#', 5), (' ', 1)]
[(' ', 15), ('#', 4), (' ', 71), ('#', 4), (' ', 1)]
...省略
仔細找下規(guī)律,發(fā)現(xiàn)每一行的數(shù)字之和都是 95,而且里面每一個元組由兩部分組成,一個字符(空格或者#),一個數(shù)字,比如:(' ', 14), ('#', 5)??梢月?lián)想一下,這是一個矩陣,元組中的數(shù)字代表前面的字符重復次數(shù),每一行都有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()
輸出內(nèi)容:
##### #####
#### ####
#### ####
#### ####
#### ####
#### ####
#### ####
#### ####
### #### ### ### ##### ### ##### ### ### ####
### ## #### ####### ## ### #### ####### #### ####### ### ### ####
### ### ##### #### ### #### ##### #### ##### #### ### ### ####
### #### #### ### ### #### #### #### #### ### #### ####
### #### #### ### #### #### #### #### ### ### ####
#### #### #### ## ### #### #### #### #### #### ### ####
#### #### #### ########## #### #### #### #### ############## ####
#### #### #### ### #### #### #### #### #### #### ####
#### #### #### #### ### #### #### #### #### #### ####
### #### #### #### ### #### #### #### #### ### ####
### ## #### #### ### #### #### #### #### #### ### ## ####
### ## #### #### ########### #### #### #### #### ### ## ####
### ###### ##### ## #### ###### ########### ##### ### ######
這些空格和#最終組成了一個單詞 channel,這應該就是下一關(guān)的入口了http://www.pythonchallenge.com/pc/def/channel.html。
參考資源: