이번 문제도
신기하지만
요상한 문제였다.

문제화면이다. 5번!



(5번 문제화면)




소리내서 읽어봐라??

일단 소스코드로!



(소스코드)



banner.p 라고 보인다.
주석으로 peak hell 비슷한 말이라고 힌트를 줬는데
피클? p 파일을 읽어봤다.



(banner.p 코드)



???.?
이건 뭐지
규칙도 없고
의미도 없는 듯했다.
banner.p로 url 수정해서 들어가면 되나?


(??)



다운하라는 화면이 떳다.
음.! 파일이구나

나는 급히(천천히)
python.org의 참조문서를 찾았다.
p를 눌러서 뭐가있나 보는 순간 피클? 이 있었다.
피자먹는 피클인줄 알았는데
심오한 뜻이 있었다.




(pickle 자료화면)



내용을 찾아보니
파일을 직렬화, 역직렬화 시켜주는 모듈.. 이라고 나와있었다.

내용을 더 찾아봤다. (당연히 도통 무슨소린지)

찾아보니
텍스트 파일이 네트워크로 전송될 때 텍스트 파일그대로 날라가지 않고
직렬화 시켜주어야하는데 그 때 쓰는 모듈이라고 나와있었다.
즉 텍스트 파일을 바이너리로 바꾸어주고 그 바꾸어준 파일이
스트림형태로 소켓에서 입출력 되는 것이다.

그건 그런거시고
문제의 데이터값을 입력해보았다.



(피클 입력)



(피클 입력)



음.. 그래도 규칙(?) 이 나름있는
언어로 바뀌었다. 형태를 보니 튜플이고 리스트였다.

일단 파일을 하나 만들어서 출력해보았다.



(출력 화면)





(출력화면)




음..
왼쪽 부분은 비거나 #이 들어가고
오른쪽 숫자는 합이 일정한거 보니 규칙이 있어보였다.

#의 개수에 따라 결과가 나오는 듯 했다.
반복문을 돌면서 출력!



(for 출력)





(출력화면)



이제 확실해졌다.
오른쪽 숫자는 개수이다.왼쪽은 들어갈 것으로 공백하고 #이 있다.

공백 몇개, # 몇개, 공백 몇개 이렇게 되있다.

일단 빈 문자열을 만들어주고
한행씩 돌면서 문자를 입력했다.




(완성코드)




(실행화면)



실행 결과로 channel이 나왔다.
멋있는 화면이다(?)

해왔던데로 url에 channel 입력


(정답으로 넘어간 화면)



정답이다!

덕분에
피클이라는 모듈을 공부하게 된 계기가 되었다.



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

Python Challenge - 4번  (0) 2017.01.09
Python Challenge - 3번  (0) 2017.01.02
Python Challenge - 2  (0) 2017.01.01
Python Challenge - 1  (0) 2017.01.01


4번 문제또한
새로운 문법을 공부할 수 있는 좋은(?) 계기가.. 되었다.

문제 화면이다.




(4번 문제 화면)




(사진을 클릭한 화면)



44827을 url 끝에 입력하고 들어가니 비슷한 패턴의 숫자가 또 나와서
입력하였다.

세번째(?) 인가..



(손이 아플꺼야 화면)



정확히 이게 맞나 싶은 생각이 들때
이 문구가 나왔다.

이런식으로 계속 들어가야 정답이 나오는데
손으로는 힘들겠다.. 라는 생각이 들었다.

새로운 방법이 필요했고
파이썬에서 제공하는 url 관련 기능을 이용하기로 했다.




(파이썬 문서 참조)



여기 에 있는 것들 중에 urllib.request를 사용할 것이다.

먼저 url 내용을 가져오는 작업을 (실험? 을 통해) 하였다.




(문구가 나오는 화면)



내용을 가져오는 것은 read() 인것 같다.
이 내용을 보니 byte 형식이길래
decode를 해야겠다고 생각이 들었고

decode를 하였다.



(decode 화면)



decode 한 순간
내용이 사라졌다..
이 문제로 굉장히 난감하고 힘든 나날들을 보냈다.

데이터 내용을 접근만 하면 사라져서..

그리고 해결책을 찾아냈다.
urlopen으로 바로 여는게 아니라 그렇게 하면 안됬다.
request.Request로 얻어온 내용으로 open을 하고 그 내용을 read로 읽어 들인 후
decode를 하면 내용을 뽑아 올 수 있었다.

문서를 찾은것이라기보다 이것저것 노가다의 시도 끝에...



(24번째가 숫자이다.)



(뒤에 입력해야할 값을 뽑아냈다.)



이제 뒤에 입력할 내용까지 뽑아내는데 성공했다.

이제 이 값을 url주소에 입력하면서 반복적인 작업을 해줘야한다.

while 문으로 코드의 길이가 없으면 중지되게 계속 반복문을 돌렸다.



(처음 시도)



(결과화면)



아.. 3번째는 팔아프다는 어쩌구 문구 때문에 24번째가 아니었다.

고민없이 뒤에 94485를 수동으로 입력 후 다시 진행



(다른 문구)



2를 나누어서 다시 계속 진행하라고 했다.

음.. 16044를 2 나누어서 8022로 다시 진행




(8022 다시 진행)



(이번엔 또 다른...)



뭔가 착오가 있다고 나왔다.

일단 지금까지 규칙대로 nothing 뒤에 있는 저 숫자
63579를 입력했다.



(63579 입력)



(??! 정답?)



마지막에
peak.html이 나왔다.

내가 보던 정답 유형과 비슷해서 정답이라는게 느껴졌다.



(정답 입력)



(정답!)



정답이다.! :)

뒷걸음치다 소잡은 느낌이긴 하지만..

url 파이썬을 공부하게 된.. 계기가 되었다.

4번 해결..!



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

Python Challenge - 5  (0) 2017.01.18
Python Challenge - 3번  (0) 2017.01.02
Python Challenge - 2  (0) 2017.01.01
Python Challenge - 1  (0) 2017.01.01
3번문제는 조금 어려웠다 

문제 화면이다.





(3번 문제 화면)



아래 글귀를 보니 작은 글자 하나가 큰 글자 3개에 양쪽으로 낑겨있다라고 적혀있다.

내 생각엔 소문자 하나에 대문자 3개가 양옆으로 있는 그런 소문자들을 조합하면 답이 나올거 같다.





(소스 코드로)



지체없이
늘 그랫듯이

페이지 소스보기 클릭!





(문자덩어리들)




여기서 우리가 원하는 글자들을 캐야한다..!

우선 이 글들을 복사해서 텍스트 파일로 만들었다.
2번문제에서 배운 교훈을 이용해 파일을 입력으로 받을 생각이다.

우선 내 생각은 이랬다.
유니코드로 소문자는 97부터 122까지였고
대문자는 65부터 90까지다.
즉 ord로 숫자를 판별해서

앞에 세개가 대문자고 가운데 소문자 그리고 뒤 세개가 대문자인지 판별하는 식을 입력했다.

이 조건에 맞으면 리스트에 추가하고 출력! (간단하군!)





(의심없이 코딩)





(실행 결과)



???...
...
..??
이게 답이라고?? 뭔가 잘못됬다는 생각이 들었다.
이렇게 많을리가..
인덱스를 조사해서 어디서 저 소문자들이 출력됬는지 확인했다.





(예외 글자)



확인해보니,
대문자가 연속으로 4개인 경우도 출력하고 5개 등등 앞뒤로
예외상황이 많았다..



(3개 뿐 아니라 더 앞 더 뒤도 한번 더 체크)



검사 글자로부터 앞뒤 3개가 아니라 4개 검사로 늘렸다.




(실패)



이것도 말도 안되고 단어도 아니고 이상하다.

나는 지금까지 해왔던것들을 그대로 유지하면서 진행하려고 노력했으나
난관에 부딪혔다.

한참을 고민해봤지만 새로운 방식으로 해야했다.
전에 암호공부하면서 같이 파이썬을 다룬적이 있는데 그 때 정규식으로 패턴 검색하던 것이 생각났다.

급히
정규식 검색과 파이썬 API 문서 참조를 통해
정규식을 공부하고

다시 이 문제에 접근했다.





(정규식 이용 코드)






(결과)



와..! 
한번에 됬다.! 저기에서 세개로 싸인 소문자들만 읽으면 된다!

하지만 그러기에 조금 찝찝하고 정규식을 더 써볼겸 해서 코드를 추가해보았다.





(한번에 결과를 출력하는 코드)





(실행 결과)



답은 linkedlist !
(이제야 뭔가 답 같다.)






(해왔던 대로 linkedlist 입력)



(??)




처음에 뭔가 싶었지만 뒤에 html을 php로 바꾸어주었다.






(정답~)



3번 문제에서 탈출하였다.!

하던 방식이 안되면 다른 방법으로 접근을 해야된다라는게 
오늘의 교훈 3번의 교훈이다.!

:)

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

Python Challenge - 5  (0) 2017.01.18
Python Challenge - 4번  (0) 2017.01.09
Python Challenge - 2  (0) 2017.01.01
Python Challenge - 1  (0) 2017.01.01

파이썬 챌린지 2번째 문제화면이다.


(2번째 문제)




글자를 맞춰보세요...
책에 있을 수도 있고, 페이지소스에 있을 수도 있고~

음... 저 책 이미지를 데이터처리해서 알아내라는건지 싶었지만 모르기도하고.. 어려우니까
다음..!

페이지소스에 있을 수도 있다라.!




(페이지소스)




페이지 소스에 들어가봤다.





(페이지 소스)


역시나!!
예상은 했지만! 주석처리로 문제가 나와있다.

위에 이렇게 써있다.
아래 데이터중에 가장 드문(rare) 문자들을 확인해보세요.
아.! 그러면 이 문자열들을 하나씩 검사해서
횟수를 카운트하면 되겠군!

두 개의 리스트를 써서 문자가 들어오면 한 리스트에 추가 할 것이다.
추가할 때 카운트 리스트에도 값을 1이라고 해서 추가할 것이다.

그 다음에 중복되는 문자가 오면 그 리스트에서 그 문자가 들어있는 인덱스를 찾아서
카운트 인덱스에 있는 숫자를 수정해줄것이다.
-> data 전체에서 그 문자를 카운트할 수 있는 메서드로
(사실 이 메서드는 인덱스를 찾는 메서드를 찾기위해 API를 보다가 얻어 걸린거다.)
(원래 하나씩 증가시켜주려고 했다.)





(코드)



실행 시켜서 위 소스코드에 있는 마구잡이 데이터를 복사해서 입력해주면 끝이다!





(입력하는 모습)




?? 불길한 빨간글자는.. 

일단 입력해보자.




(입력 결과)



아....
빨간색 글씨는 주석처리 된거구나... (이때까지 몰랐다.)
왠지
저 카운트된 숫자들도 보니 말도 안되는 숫자고..(너무작다.)

입력이 주석처리되다니..ㅜ
(보안책에서 SQL 인젝션이라고 개념을 본적있는데, 그게 떠올랐다.)

여기서 한참 방황했다. 저 #들을 어떻게 처리해 주어야할까...
그 때 든 생각이 파일로 통째로 해서 입력하는게 어떨까 싶었다.

메모장을 키고 데이터들을 복사해서 붙여넣었다.





(메모장 파일 새성)


이 파일을 받아서 문자열로 옮긴 후 내가 생각했던대로
코드를 돌려볼 생각이다.




(코드 수정)




(결과)


오.....!!!!!!

( 공백도 문자다.)

적은 문자들을 보니 1이다. 이건 분명 적다고 할 수 있는 값이다.
equality 
가 정답이다.! :)

문제 1에서 했던것 처럼 url의 값을 변경해주었다.




(통과된 모습)




문제 2도.! 해결하였다.

: ) (뿌듯)

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

Python Challenge - 5  (0) 2017.01.18
Python Challenge - 4번  (0) 2017.01.09
Python Challenge - 3번  (0) 2017.01.02
Python Challenge - 1  (0) 2017.01.01

재밌는 퀴즈(?) 같은 사이트다.
Python Challenge

0번 문제는 너무 쉬워서 패스하겠다.

1번부터 보면 아래 화면이 나온다.




K -> M
O -> Q
E -> G

알파벳을 쭉 써보고 위 세개의 규칙을 넣어보면
두칸씩 땡긴것을 확인 할 수 있다.

즉, 나머지 알파벳도 두칸씩 땡겨서 아래 분홍색 글씨를 해석하면 되는 것이다.

우선 이름이 Python Challenge인것 만큼 파이썬으로 코드를 작성해 보았다.

먼저 위 분홍색 글들은 소문자로 a 부터 z까지 범위를 보니 97부터 122였다.
유니코드 기준으로 (파이써는 유니코드이기 때문에)

2칸씩 땡겨서 변환해야하므로 유니코드 숫자에 2를 더했다.
2씩 더한 값이 122보다 크다면 26을 빼준 값, 즉 다시 a로 돌아가는 값이다.




(암호문 해석 코드)




(실행 결과)



실행 결과를 보면 url에 대하여 이 암호코드를 적용해봐라 라는 뜻이다.




(url)



url의 모습이다 여기서 map 밖에 건드릴것이 없어서

map을 코드에 대입시켜보니 ocr이라는 값이 나왔고





(답 입력)




map을 ocr로 바꾸어 주었다.





(다음 문제로 넘어가는 화면)



정답이다~ :)

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

Python Challenge - 5  (0) 2017.01.18
Python Challenge - 4번  (0) 2017.01.09
Python Challenge - 3번  (0) 2017.01.02
Python Challenge - 2  (0) 2017.01.01

+ Recent posts