Write-up

[Python Challenge] level 7

ch4rli3kop 2019. 4. 13. 22:03
반응형

python challenge 7

python에서는 Image library를 기본적으로 지원하지 않기 때문에, 외부 라이브러리를 설치할 필요가 있다. 예전에 PIL을 사용해본 기억이 있어, 아무생각없이 설치하려고 했는데 python3를 사용하는 경우 기존에 사용하던 방식과 차이가 있어 유의해야 한다. PIL

>>> column = [img.getpixel((x, img.height/2 )) for x in range(img.width)]
>>> column
[(115, 115, 115, 255), (115, 115, 115, 255), (115, 115, 115, 255), (115, 115, 115, 255), (115, 115, 115, 255), (109, 109, 109, 255), (109, 109, 109, 255), (109, 109, 109, 255), (109, 109, 109, 255), (109, 109, 109, 255), (109, 109, 109, 255), (109, 109, 109, 255), (97, 97, 97, 255), (97, 97, 97, 255), (97, 97, 97, 255), (97, 97, 97, 255), (97, 97, 97, 255)

위처럼 나타난다. 처음은 5개의 pixel이지만 이 후의 pixel은 r, g, b가 같은 pixel이 7개씩 반복된다.

from PIL import Image
import io, urllib.request

data = urllib.request.urlopen('http://www.pythonchallenge.com/pc/def/oxygen.png').read()
img = Image.open(io.BytesIO(data))

row = [img.getpixel((x, img.height/2)) for x in range(0, img.width, 7)]
elem = [r for r, g, b, a in row if r==g==b]
print(''.join(map(chr, elem)))

r == g == b 한 경우, 해당 값을 ascii 형태로 바꾸면 아래와 같은 문자열을 얻을 수 있다.

smart guy, you made it. the next level is [105, 110, 116, 101, 103, 114, 105, 116, 121]

하라는대로 아래와 같이 돌리면 답을 얻을 수 있다.

list = [105, 110, 116, 101, 103, 114, 105, 116, 121]
print(''.join(map(chr, list)))

integrity

next : http://www.pythonchallenge.com/pc/def/integrity.html solution : http://www.pythonchallenge.com/pcc/def/integrity.html


반응형

'Write-up' 카테고리의 다른 글

[Python Challenge] level 9  (0) 2019.04.13
[Python Challenge] level 8  (0) 2019.04.13
[Python Challenge] level 6  (0) 2019.04.13
[Python Challenge] level 5  (0) 2019.04.13
[Python Challenge] level 4  (0) 2019.04.13