Write-up

[Python Challenge] level 5

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

python challenge 5

아니이게 머야;; 할만한게 나온다. peak hell을 검색하니 연관검색어에 pickle이 있길래 찾아보니, 이게 맞는 것 같다. 일반적으로 파일 입출력은 텍스트 형태로만 가능하기에, pickle 모듈은 리스트 및 튜플 자료형의 데이터를 변형없이 파일에 입력 및 저장하기 위해 만들어졌다고 한다. http://www.pythonchallenge.com/pc/def/banner.p 데이터를 받아 Unpickling 해주면 아래와 같은 리스트 형의 데이터를 얻을 수 있다.

[[(' ', 95)], [(' ', 14), ('#', 5), (' ', 70), ('#', 5), (' ', 1)], [(' ', 15), ('#', 4), (' ', 71), ('#', 4), (' ', 1)], [(' ', 15), ('#', 4), (' ', 71), ('#', 4), (' ', 1)], [(' ', 15), ('#', 4), (' ', 71), ('#', 4), (' ', 1)], [(' ', 15), ('#', 4), (' ', 71), ('#', 4), (' ', 1)], [(' ', 15), ('#', 4), (' ', ...

[ [ (), ()... ], [ (), ()... ]...] 형태로 되어있는데, ' '과 '#' 두 개의 문자뿐이 없어 ascii art로 의심되며, 작은 리스트 안에 존재하는 숫자의 합이 95로 일정한 것을 보아 작은 리스트는 하나의 라인을 의미하는 것이 아닌가하는 킹리적 갓심을 가질 수 있다. 적당한 코드로 출력해보면 channel이라는 문자열을 볼 수 있다.

#!/usr/bin/python3
import urllib.request
import pickle

data = urllib.request.urlopen('http://www.pythonchallenge.com/pc/def/banner.p').read()
listedData = pickle.loads(data)
result = ''
for line in listedData:
   result += ''.join(k*v for k, v in line)
   result += '\n'
print(result)

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

pickle은 bytes 타입의 데이터로만 사용할 수 있다.


반응형

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

[Python Challenge] level 7  (0) 2019.04.13
[Python Challenge] level 6  (0) 2019.04.13
[Python Challenge] level 4  (0) 2019.04.13
[Python Challenge] level 3  (0) 2019.04.13
[Python Challenge] level 2  (0) 2019.04.13