2011. 6. 22. 15:24
[ Problem ] - http://www.pythonchallenge.com/pc/def/oxygen.html
♧ 가운데 회색 바가 수상해 보인다. 해당 격자를 7픽셀 단위로 RGB값을 뽑아서 ASCII문자로 변환 해야 하는데 파이썬에는 내장된 이미지 라이브러리가 없음으로 Python Imaging Library (PIL)를 사전에 설치 하자.
♧ 처리 순서는 아래와 같다.
import Image, urllib, StringIO, re # coding=utf8 # ① 이미지 파일 오픈. u_img = urllib.urlopen("http://www.pythonchallenge.com/pc/def/oxygen.png").read() img = Image.open(StringIO.StringIO(u_img)) # ② 이미지 길이와 회색바 위치 구함. middle = (img.size[1]/2) width = img.size[0] # ③ 7픽셀 단위로 RGB값 구함 pixels = [img.getpixel((x, middle)) for x in range(0, width, 7)] # ④ pixels값의 R,G,B가 동일한 값만을 뽑아낸다. ords = [r for r,g,b,a in pixels if r == g == b] # ⑤ 뽑아낸 RGB값은 ASCII값으로 문자로 변환 출력. result = ''.join(map(chr, ords)) print result # ⑥ 출력된 결과의 또다른 ASCII값을 찾아 int형 변환->chr변환->출력. print ''.join(map(chr, map(int, re.findall("\d+", result)))) [ 출력 결과 ]
(※ 사용한 PIL의 모듈은 레퍼런스 문서를 참조) |
[ Solution ] - http://www.pythonchallenge.com/pcc/def/integrity.html
(※ 문제에 대한 다양한 해결법은 링크 참조.)
'워게임(WarGame) > PythonChallenge' 카테고리의 다른 글
[Python challenge Level9] - good (ImageDraw) (0) | 2011.06.23 |
---|---|
[Python challenge Level8] - integrity (bz2) (0) | 2011.06.23 |
[Python challenge Level6] - channel (zipfile) (0) | 2011.06.22 |
[Python challenge Level5] - peak (pickle) (1) | 2011.06.22 |
[Python challenge Level4] – linkedlist (urllib) (0) | 2011.06.21 |