StevenPZChan
StevenPZChan
3 min read

Categories

Tags

继续挑战,又到了新区域


第28题地址bell.html

  • bell.png
  • 网页标题是many pairs ring-ring,题目内容为RING-RING-RING say it out loud,源码里面没有隐藏内容

图片是一片树林。
图片名字也叫bell,题目的内容都是跟ring相关的,看来ring是突破口了。
题目让我们把RING-RING-RING大声念出来,估计就跟第5题peak.html比较相似了,就是找谐音。念了几次发现像green,正好图片也是一大片绿色,打开green.html提示yes! green!,看来猜对了。

题外话,读音还像grin.html,提示you are not happy - you are feeling sick.,估计是调侃吧。

把图片搞下来取出G绿色通道看看是什么规律:

from io import BytesIO
import requests
from PIL import Image

with requests.Session() as sess:
    sess.auth = ('repeat', 'switch')
    response = sess.get('http://www.pythonchallenge.com/pc/ring/bell.png').content
    img = Image.open(BytesIO(response))
    green = list(img.getdata(img.getbands().index('G')))
print(green[:50])
[55, 97, 73, 115, 120, 78, 60, 102, 76, 118, 114, 72, 59, 101, 119, 77, 92, 50, 30, 72, 53, 95, 133, 91, 93, 51, 110, 68, 112, 70, 66, 108, 140, 182, 163, 121, 66, 24, 59, 17, 25, 67, 62, 20, 26, 68, 67, 25, 85, 43]

标题说many pairs ring-ring,也就是说有很多对绿色
我们仔细研究一下绿色通道的像素值,发现每两个可以凑成一对,而这一对的特点是:

\(55-97=-42\)
\(73-115=-42\)
\(120-78=42\)
\(60-102=-42\)
\(76-118=-42\)

都是相差了42

所以说还是惯用伎俩,找出相差不是42绿色对!

diff = []
for first, second in zip(green[::2], green[1::2]):
    if abs(first - second) != 42:
        diff.append((first, second))
print(diff)
[(121, 2), (3, 107), (3, 114), (103, 3), (119, 2), (113, 3), (3, 113), (107, 2), (119, 3), (7, 47), (53, 12), (50, 96), (42, 157), (133, 21), (80, 188), (250, 145), (147, 31), (72, 32), (96, 55), (106, 15), (83, 35), (13, 106), (71, 39), (13, 76)]
print(bytes(p[0] for p in diff))
print(bytes(p[1] for p in diff))
print(bytes(abs(p[0] - p[1]) for p in diff))
b'y\x03\x03gwq\x03kw\x0752*\x85P\xfa\x93H`jS\rG\r'
b"\x02kr\x03\x02\x03q\x02\x03/\x0c`\x9d\x15\xbc\x91\x1f 7\x0f#j'L"
b'whodunnit().split()[0] ?'

嗯,应该就是这句问题了:

whodunnit().split()[0] ?

是谁让我们陷入了这挑战的无尽泥潭中?作者?应该不会这么自恋。这网站的创始人?相同的原因。关键是我们都确定不了他们是谁。
还可能是谁?想了想,罪恶的源头当然是Python的创始人Guido van Rossum了。

吉多·范罗苏姆(荷兰语:Guido van Rossum,1956年1月31日-),生于荷兰哈勒姆,计算机程序员,为Python程序设计语言的最初设计者及主要架构师。在Python社区,吉多·范罗苏姆被人们认为是终身仁慈独裁者(BDFL),意思是他仍然关注Python的开发进程,并在必要的时刻做出决定。2018年7月12日,他宣布不再担任Python社区的BDFL。随后Python社群为了往后编程语言发展决策规划了领导委员会(英语:Steering Council),吉多·范罗苏姆再度被选入成为五位委员会成员之一,持续贡献对于Python编程语言的发展决策。

From wikipedia.org
def whodunnit():
    """
    Return who's done it
    """
    return 'Guido van Rossum'

print(whodunnit().split()[0])
Guido

好了,打开链接到guido.html,来到了下一题。

总结:这一题太发散了。

本题代码地址28_bell.ipynb