Python/Python Challenge

[Python Challenge 16] 다 내 밑으로 정렬해

Python Challenge 16의 Url은 다음과 같다

Python challenge 16 : http://www.pythonchallenge.com/pc/return/mozart.html


구성

무슨 노이즈가 화면에 껴있다. 일단 사진을 다운로드하여보자

< mozart.gif> 

사진의 이름은  mozart.gif이다. 단서로 보일 만한 점은 웹페이지의 title인

 

"Let Me get this Stright!"

 

이다.

 


해결 아이디어

저 영어가 번역하면, "우리 확실하게 짚고 가자!" 인데. Straight를 직선으로 번역을 하면, 정렬을 해달라는 의미가 된다. 일단 사진의 픽셀을 뜯어보면 신기하게 하나의 값만을 가지는 것을 알 수 있다.(RGBA가 아니다.)

### 16_1.py

from PIL import Image

if __name__=="__main__" :
    with Image.open("mozart.gif") as img :
        for x in range(img.width) :
            print(img.getpixel((x,0)))

출력은 다음과 같은데, 특이하게 중간에 195라는 값이 있다. 아마 중간에 보이는 저 자주색 선 같다.

...

17
60
249
195
195
195
195
195
252
88
11
60
84

...

일단 mozart.gif의 모드를 img.mode로 구해보면 'P'모드라고 한다. 이 P 모드는 8비트의 값을 가진다고 한다. 그래서 0~255 사이의 Value만 픽셀 별로 가진 것이다. 다음은 이 195를 기준으로 정렬하고 mozart_a.gif로 저장하는 코드이다.

### 16_2.py

from PIL import Image

if __name__=="__main__" :
    with Image.open("mozart.gif") as img :
        new_img = Image.new("P",(640,480))
        for y in range(img.height) :
            row_array_img = list()
            start_index = 0
            for x in range(img.width) :
                row_array_img.append(img.getpixel((x,y)))
            start_index = row_array_img.index(195)
            for x in range(img.width) :
                real_x = (start_index+x)%img.width
                new_img.putpixel((x,y),row_array_img[real_x])
        new_img.save("mozart_a.gif","GIF")

찾았다. romance

Answer Url : http://www.pythonchallenge.com/pc/return/romance.html