반응형
출처) http://www.pythonchallenge.com/index.php
http://www.pythonchallenge.com/pc/return/italy.html
- 파이썬 챌린지 레벨14 문제!
- 빵 사진과 밑에 바코드 같이 생긴 작은 이미지가 있다.
- 페이지 소스를 확인해 보았다.
- 제목은 walk around.
- 바코드 처럼 생긴 이미지는 wire.png였고, 크기는 100*100이라고 나와있다.
- 중간에 주석으로 "remember: 100*100 = (100+99+99+98) + (..." 가 적혀있다.
- 문제화면에서 바코드처럼 생긴 이미지가 나와있길래 저 형태인 줄 알았는데 저장해서 열어보니 아래와 같았다.
- 실선처럼 보이는 것 같이 가까이에서 보면 넓어진 면적이 오른쪽으로 갈 수록 점점 좁아지는 걸 볼 수 있다.
- 처음으로 돌아와 빵사진을 보면 회오리처럼 되어있다. 즉 나선형이다.
- wire.png의 크기를 출력해 보았다.
- 10000*1이 나왔다.
- 페이지소스에서 wire.png의 크기는 100*100이였다. 사이즈를 길게 늘려놓은 것 같다.
- 주석에 나온 힌트처럼 나선형모양으로 픽셀좌표를 다시 계산하여 출력하면 답이 나올 것 같다.
- 크기를 5라고 가정했을 때 위의 그림에서 빨간색 화살표 순서로 출력하면 될 것 같다.
from PIL import Image
img = Image.open("D:/python_challenge/wire.png")
new = Image.new('RGB',[100,100])
wire_size = -1 #img.size[0]길이까지 커져야 한다.
count=0 #50바퀴를 돌아야 한다.
rounds=49 #50바퀴가 되면 멈추어야 한다.
while wire_size < img.size[0]:
for i in range(count,100-count):
wire_size += 1
tmp = img.getpixel((wire_size,0))
new.putpixel((i,count),tmp) #putpixel( (x좌표, y좌표), ( R, G, B, A) )
print(f'wire:{wire_size} new1({i},{count})')
print('-'*50)
for i in range(count+1, 100-count):
wire_size += 1
tmp = img.getpixel((wire_size,0))
new.putpixel((100-count-1,i),tmp)
print(f'wire:{wire_size} new2({100-count-1},{i})')
print('-'*50)
for i in range(100-count-2,count-1,-1):
wire_size += 1
tmp = img.getpixel((wire_size,0))
new.putpixel((i,100-count-1),tmp)
print(f'wire:{wire_size} new3({i},{100-count-1})')
print('-'*50)
for i in range(100-count-2,count,-1):
wire_size += 1
tmp = img.getpixel((wire_size,0))
new.putpixel((count,i),tmp)
print(f'wire:{wire_size} new4({count},{i})')
print('-'*50)
count += 1
print(count)
if count > rounds:
break
new.show()
new.save("D:/python_challenge/spiral.png")
- 코드를 실행해보면 고양이 이미지가 나온다.
- url에 cat이라고 입력했더니 이미지에 15라는 레벨 숫자가 안 적혀있다.
- 고양이 이름이 uzi라고 적혀있다.
- 답 : uzi
- http://www.pythonchallenge.com/pc/return/uzi.html 로 가면 다음 레벨 문제가 나온다.
반응형
'#WarGame > Python Challenge' 카테고리의 다른 글
Python Challenge # LV.16 (ImageChops) (0) | 2020.09.16 |
---|---|
Python Challenge # LV.15 (calendar) (0) | 2020.09.14 |
Python Challenge # LV.13 (xmlrpc) (0) | 2020.09.08 |
Python Challenge # LV.12 (5개의 파일) (0) | 2020.09.07 |
Python Challenge # LV.11 (even) (0) | 2020.09.05 |