Python Challenge[27]

[Level 27]


Title: between the tables

圖片鏈向的地址即是下一關(guān)的url,但是需要用戶名和密碼。從源碼提示did you say gif?下載到zigzag.gif。查看了圖片的各屬性,沒有頭緒。

或許我們先要知道什么是 [palette] [p1],嗯,[調(diào)色板] [p2],或者[更詳細(xì)的調(diào)色板] [p3]。
[p1]: https://en.wikipedia.org/wiki/Palette_(computing)
[p2]: https://zh.wikipedia.org/wiki/BMP#.E8.B0.83.E8.89.B2.E6.9D.BF
[p3]: http://www.360doc.com/content/10/0928/15/2790922_57060786.shtml

調(diào)色板相當(dāng)于建立了顏色索引,我們要把它們還原顏色。

from PIL import Image
img = Image.open('zigzag.gif')
data = img.tobytes()
p = img.getpalette()[::3]
table = bytes.maketrans(bytes([i for i in range(256)]),bytes(p))
trans = data.translate(table)

對齊轉(zhuǎn)換前后的數(shù)據(jù),找出不同:

zipped = list(zip(data[1:],trans[:-1]))
indices = [i for  i,p in enumerate(zipped) if p[0]!=p[1]]
new = Image.new(img.mode,img.size)
color = [255,]*len(data)
for i in indices:
  color[i] = 0
new.putdata(color)
new.show()

顯示:


notword,中間有一把鑰匙-key。然而并不是下一關(guān)的鑰匙?!安煌苯M成的信息呢?

import bz2
import keyword
diff = [p[0] for p in zipped if p[0]!=p[1]]
text = bz2.decompress(bytes(diff)).decode()
print(set(i for i in text.split() if not keyword.iskeyword(i)))

打印出:

{'switch', 'repeat', 'exec', 'print', '../ring/bell.html'}

repeatswitch 才是用戶名和密碼,[Level 28]

小結(jié)

或者這樣找diff:
diff = list(filter(lambda p: p[0] != p[1], zipped))

  1. [Image.getpalette()] [s1] 返回調(diào)色板列表數(shù)據(jù)。
  2. [enumerate(iterable, start=0)] [s2] 將可迭代對象做成索引序列。
  3. [zip()] [s3] 接受可迭代對象,將對應(yīng)的元素打包再組成新的可迭代對象。
  4. [keyword.iskeyword(s)] [s4] 判斷s是否是 python 關(guān)鍵字。在python3中,execprint不再是關(guān)鍵字。
    [s1]: https://pillow.readthedocs.io/en/4.0.x/reference/Image.html#PIL.Image.Image.getpalette
    [s2]: https://docs.python.org/3/library/functions.html#enumerate
    [s3]: https://docs.python.org/3/library/functions.html#zip
    [s4]: https://docs.python.org/3/library/keyword.html#keyword.iskeyword

Python Challenge Wiki

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,802評論 25 709
  • PYTHON-進(jìn)階-ITERTOOLS模塊小結(jié)轉(zhuǎn)自wklken:http://wklken.me/posts/20...
    C_Y_閱讀 1,166評論 0 2
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 7,295評論 0 17
  • 課間,猛然抬頭,驚喜地遇見操場一角滿樹鮮亮的黃色,俏麗而又迷人地貼在樹干上。難得一見的陽光,肆無忌憚地溫暖著...
    魔頭鬼閱讀 664評論 0 3

友情鏈接更多精彩內(nèi)容