Python/Python Challenge

[Python Challenge 28] 륑륑륑

Python Challenge 28의 Url은 다음과 같다

Python challenge 28 : http://www.pythonchallenge.com/pc/ring/bell.html


구성

들어가면 폭포사진을 볼 수 있다. 아래 번역은 다음과 같다.

"RING-RING-RING 크게 말해보세요"

G발음에 조금 강세를 두고 반복하면 "GREEN"이다. green.html로 이동하면 다음과 같은 페이지를 볼 수 있다.

어허; 다른 태그도 안보인다. 주석도 유의미하지 않고, 무슨 html이 헤더바디 다무시하고 저거 한줄 써있다.


해결 아이디어

일단 사진이 RGB픽셀이니, G만 다 빼보자

### 28_1.py from PIL import Image if __name__ == "__main__" : with Image.open("bell.png") as img : green = list(img.split()[1].getdata())

green을 조금만 볼까?

>>> green[:100] [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, 60, 18, 53, 11, 3, 45, 3, 45, 0, 42, 5, 47, 9, 51, 22, 64, 37, 79, 35, 77, 66, 24, 25, 67, 36, 78, 84, 42, 70, 28, 69, 111, 72, 30, 62, 20, 27, 69, 34, 76, 27, 69, 181, 223, 194, 152, 108, 66, 73, 31]

겉보기에는 그냥 배열처럼 보일 수도 있지만, 홀짝을 짝지어서 보면, 42차이나 나거낭 -42의 차이를 볼 수 있다. 절댓값이 42가 아닌 배열을 빼보면 유의미한 결과를 알 수 있을 것이다.

### 28_2.py from PIL import Image if __name__ == "__main__" : with Image.open("bell.png") as img : green = list(img.split()[1].getdata()) first = green[0::2] second = green[1::2] ans_list = list() for f,s in zip(first,second) : if(abs(f-s) != 42) : val = abs(f-s) ans_list.append(chr(val)) print(''.join(ans_list))

출력결과는 다음과 같다.

whodunnit().split()[0] ?

whodunnit은 영미권의 수수께끼종류이다.(모듈이 있기는 한데, 우리 문제와 관련없다.) 범죄에서 가해자를 추적하는 추리 수수께끼인데, 여기서 가해자는 누가되는 걸까? 누가 우리를 이렇게 힘들게 하는 걸까??

안녕하세요 guido씨

Answer Url : http://www.pythonchallenge.com/pc/ring/guido.html