筆者公衆號:技術雜學鋪
筆者網站:mwhitelab.com
Python Challenge介紹
Python Challenge 是首個謎語編程網站。挑戰者需要連續挑戰33個需要編程才能解開的謎題以鍛鍊自己的編程能力。
該網站建立於2005年,至今已經有三百多萬位訪客瀏覽並嘗試解決該網站的謎題。
python challenge 官網
雖然網站建立的年代比較久遠,頁面美觀性不高,但是其謎題設計絕對是足以驚豔每一位挑戰者的。尤其是挑戰者在不查看任何攻略的情況下,自己整理一切現有資料,並最終解出謎題時,那種喜悅感是難以言表的。
該網站好評不斷。用戶brberg說:“我認爲這是學習一門編程語言最好的方法”(”These sorts of things are in my opinion the best way to learn a language.” )
用戶salimma說:“讓人上癮的方式來學習python的細節,對所有程序員來說都是必須的!”(”Addictive way to learn the ins and outs of Python.. a must for all programmers!”)
另外,網站還內置一個留言區(雖然如今已經被各類“小廣告”所佔領),一個google論壇和一個wiki百科。
Python challenge的wiki
該網站通過記錄挑戰者cookie的方式來確定挑戰者目前的通關進度。只有闖過了相應關卡並訪問指定網址才能查看對應關卡的官方解答。
通過對應關卡後才能看到該關卡的官方解答
其各種各樣的解題方法可以作爲讀者通關後的參考材料,通過對比自己與官方的解題方法,以拓寬自己的思路與知識面。
題目示例
筆者的解題文件已經放在了github上,目前的進度爲12/33,不定期更新中。
這裏筆者列舉幾個比較有創意的題目,及其解題思路。歡迎讀者前去python challenge進行嘗試。
level 2
第二關的謎題只有一張圖片和一段文字:識別字母,也許他們在書中,但也可能在網頁源代碼中。
我們打開網頁源代碼,發現一段超長的註釋,以及一段提示:找到雜亂信息中的文字。
這是一串保存起來後將近100k的字符串。單純用肉眼去掃碼是幾乎不可能的。但如果我們使用代碼的話,十幾行就解決了。獲得答案:equality。把網頁地址最後部分改爲equality.html即進入下一關。
level 4
題目同樣是只有一張圖片。網頁標題是“follow the chain”,跟隨着鏈條。
我們點擊圖片,可以進入下一個網頁。該網頁告訴我們下一個nothing的取值爲44827。根據瀏覽器的url地址,我們把最後的”nothing=12345″改爲”nothing=44827″即可
然而,新的網頁依舊是類似的場景。不斷這樣的手動更換地址的操作十幾次後,顯示頁面依舊類似如下場景。
此時,我們就需要通過爬蟲以及網頁內容分析來進行這樣的任務了。
關於爬蟲的知識,筆者曾在爬蟲原理解析中細緻地講述過。
實例程序如下圖:
有時,我們還會收到一些需要人爲處理的信息和誤導性信息:
在解決了上述問題並使用程序連續訪問了兩百多次後,我們即可找到最終的答案:peak.html
level 7
我們在該關會獲得如下圖片
我們讀取該圖片,找到其不自然的灰度區域。
讀取其灰度值,並進行一定的處理後,我們發現所有數的取值都在128以下
此時,我們應該想到ASCII編碼。我們繼續對獲取到的灰度值進行處理,並將其轉化爲ascii編碼對應的字符。
我們會獲得 ‘smart guy, you made it. the next level is [105, 110, 116, 101, 103, 114, 105, 116, 121]’
同理,對 [105, 110, 116, 101, 103, 114, 105, 116, 121] 進行同樣的ascii解碼操作,得到答案integrity
level 11
第11關的名稱爲“odd even”(奇數與偶數)
該圖片很詭異,再參考題目標題,我們將該圖片拆分分兩張圖片。
原始圖片中x,y座標和爲奇數的像素點構成第一張圖,和爲偶數的像素點構成第二張圖。
於是我們獲得了通過密碼:evil
更多
上述的題目僅僅是python challenge的冰山一角
該網站的關卡中,有的題目需要你使用繪圖包才能解答
有的關卡涉及到文件讀取、IO操作,謎底答案隱藏在最不引人注意的角落中。
還有的題目,需要你發揮天馬行空的想象,廣開腦洞才能找到解題方法。
可以說Python Challenge集編程練習與趣味謎題於一身,是絕佳的python練習遊戲。
另外,筆者整理的Python Challene解題文件中除了解題代碼,還附帶解題思路以及關卡考察內容。讀者可前往github查看。