본문 바로가기

#WarGame/Python Challenge

Python Challenge # LV.5 (pickle)

반응형

출처) http://www.pythonchallenge.com/index.php

 

The Python Challenge

What people have said about us: "These sorts of things are in my opinion the best way to learn a language.", brberg at Media Cloisters "It's the best web site of the year so far.", Andy Todd at halfcooked "Addictive way to learn the ins and outs of Python.

www.pythonchallenge.com

 

http://www.pythonchallenge.com/pc/def/peak.html

[그림1. LV.5 문제]

 

  • 파이썬 챌린지 레벨5 문제!
  • 이미지는 뭘 의미하는지 모르겠다. 밑에 "pronounce it"이라고 적혀있다. 발음......?
  • 바로 페이지소스를 확인해보았다.

 

[그림2. page source]

 

  • 12번째 줄에 banner.p를 눌러 보니 또 다른 페이지가 나왔다.

 

[그림3. banner.p]

 

  • 세로로 적힌 알 수 없는 문자열들이 있다.
  • 다시 페이지소스를 보니 맨 밑에 주석으로 "peak hell sounds familiar ?" 라고 적혀있다.
  • peak hell과 유사한 발음나는 걸 찾으면 되는 것 같다.
  • peak hell , peak hell sounds familiar 등 검색하다 보니 우연히 다른 사람이 풀이에 적어 놓은 pickle을 보게 되었다.
  • 파이썬 모듈 중에 pickle모듈이 있는 것 같다. 사실 처음들어본다.......;;

pickle모듈파이썬 객체 구조의 직렬화와 역 직렬화를 위한 바이너리 프로토콜을 구현한다.

바이트로 저장하고 불러오는 방식이다.

 

pickling은 pickle.dump를 하여 자료형을 파일로 저장하는 방식이고, 

unpickling은 pickle.load를 하여 pickling으로 작업한 파일을 불러서 출력하는 방식이다.

https://docs.python.org/ko/3.7/library/pickle.html

 

 

  • banner.p페이지에 있는 문자열은 pickling된 형태이기 때문에 unpickling을 해야한다.
from urllib.request import urlopen
import pickle

file=urlopen("http://www.pythonchallenge.com/pc/def/banner.p")
data=pickle.load(file)

print(data)

 

[그림.4 unpickling]

 

  • 코드를 실행하면 [그림.4]와 같이 출력된다.
  • 무언가 규칙이 있는 것 같다.
  • list[] 안에 ()가 들어 있는 것 같다. 리스트 안에 튜플을 사용한 것 같다.
  • 첫번째를 보면 [ ]가 이중으로 되어있다. 그리고 '  '공백이 95번 나오는 것 같다.
  • 옆을 보면 [ ]가 하나이고, 괄호 속에 여러가지 적혀 있다. 아마 [ ]가 문장을 나누는 것 같다.
  • 첫번째 문장은 공백이 95번 그 다음 줄은 공백이 14번, #이 5번 그리고 공백이 70번, #이 5번, 공백이 1번....?
  • 이걸 합쳐보면 될 것 같다.

 

from urllib.request import urlopen
import pickle

file=urlopen("http://www.pythonchallenge.com/pc/def/banner.p")
data=pickle.load(file)

for i in data:
    result=""
    for char, num in i:
        result += char * num
    print(result)

 

  • for문안에서 char(' ', #), num(95,14...) 이걸 문자형을 숫자 만큼 합쳐서 출력을 하면 무언가 나올 것 같다.

 

 

[그림5. 결과]

답 : channel

http://www.pythonchallenge.com/pc/def/channel.html 로 가면 다음 레벨이 나온다.

 

 

 

 

 

반응형

'#WarGame > Python Challenge' 카테고리의 다른 글

Python Challenge # LV.7 (픽셀 문자열)  (0) 2020.08.27
Python Challenge # LV.6 (ZipFile)  (0) 2020.08.24
Python Challenge # LV.4  (0) 2020.08.18
Python Challenge # LV.3  (0) 2020.08.17
Python Challenge # LV.2  (0) 2020.08.17