반응형
아니이게 머야;; 할만한게 나온다. 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 |