The Python Challenge – Level 25

http://www.pythonchallenge.com/pc/hex/lake.html

이번 레벨은 너무 어려웠다. 우선 문제 페이지의 소스를 보도록 하자.

<html>
<head>
  <title>imagine how they sound</title>
  <link rel="stylesheet" type="text/css" href="../style.css">
</head>
<body>
<center>
<br>
<br>
<img src="lake1.jpg"> <!-- can you see the waves? -->
</body>
</html>

주석을 보면 waves 가 보이냐고 한다. 이 부분에서 lake1.jpg 가 아닌 lake1.wav 파일이 있다는 것을 유추해내어야 한다 -_-; 뭐 일단 그리해서 lake1.wav, lake2.wav 로 해서 계속 받아진다. 어디까지 받아 질지 알 수 없어 아래와 같은 코드를 작성하였다.

#!/usr/bin/env python
import os

count = 1
while 1:
    os.system('wget --http-user=butter --http-password=fly http://www.pythonchallenge.com/pc/hex/lake' + str(count) + '.wav')
    count += 1

위 코드로 파일을 받으면 lake1.wav ~ lake25.wav 까지 있음을 확인할 수 있다. 이제 해당 파일로 문제를 풀어내어야 한다. 일단 힌트상의 그림을 보면 직소 퍼즐이다. 그리고 주어진 wav 파일이 25개 인걸로 봐서 뭔가 이 파일들로 맞추어야 함을 알 수 있다.

이번 문제는 wave 모듈을 이용하는 문제로 wav 파일에서 Frame 을 읽어 이미지로 바꾸는 작업을 하여야 한다. 코드는 아래와 같다.

#!/usr/bin/env python
import wave, Image

img = Image.new('RGB', (300,300), 0)

posx = 0
posy = 0
for x in range(1, 26):
    w = wave.open('lake%d.wav' % x, 'r')

    data = w.readframes(w.getnframes())
    tmp = Image.fromstring('RGB', (60, 60), data)

    if (x-1) % 5 == 0 and (x-1) != 0:
        posx = 0
        posy += 1

    img.paste( tmp,  (posx*60, posy*60) )
    posx += 1

img.show()

위 코드를 실행하면 아래와 같은 이미지가 생성된다.

이번 문제는 힌트없이 풀기엔 너무 어려운거 같다... 힌트없이 푼 바다형은 좀 짱인듯 -_-

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다