본문 바로가기
Algorithm/WarGame - The Python Challenge

The Python Challenge 1

by 꼬부기가우는소리 2016. 8. 29.
728x90

작성 일자 : 2016. 08. 29 

재작성 일자 : 2018. 07. 31


참고 사이트 : 

- [위키백과] 카이사르 암호


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





python challenge 1단계이다.

힌트는 "everybody thinks twice before solving this".

두 번 정도 생각해보라 하는데 사실 이 문제 역시 간단하다.

앞의 warming up 문제와 같이 굳이 파이썬으로 풀지 않고 손으로도 풀 수 있다.


그림을 보면 K를 M으로, O를 Q로, E를 G로 변환한다고 한다.

이 세 개의 변환엔 공통적인 규칙이 존재한다.

각각 문자의 알파벳 순서를 2번씩 뒤로 당긴 것이다.

두 번씩 생각해라는 말 자체가 힌트로 주어진 것이 아닐까 싶다.

따라서, 시저 암호 방식과 동일하게 주어진 url의 마지막 단어, 'map'을 2번씩 뒤로 당겨주면 된다.



카이사르 암호

암호학에서 카이사르 암호(Caesar cipher) 또는 시저 암호는 암호학에서 다루는 간단한 치환암호의 일종이다. 암호화하고자 하는 내용을 알파벳별로 일정한 거리만큼 밀어서 다른 알파벳으로 치환하는 방식이다. 예를 들어 3글자씩 밀어내는 카이사르 암호로 'COME TO ROME'을 암호화하면 'FRPH WR URPH'가 된다.

 



파이썬으로 코딩하면 아래와 같다.


cList = "abcdefghijklmnopqrstuvwxyz"
# 문제를 풀기 위한 함수
def findStr(str):
for c in str:
index = cList.find(c)
if index < 0:
print (c, end="")
elif index == 24:
print (cList[0], end="")
elif index == 25:
print (cList[1], end="")
else:
print (cList[index+2], end="")
# str1 : 문제
# str2 : 그림 밑에 쓰여진 글자
str1 = "map"
str2 = "g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj."
findStr(str1)
findStr(str2)


먼저, cList에 문자열을 저장해 놓는다.

그리고 해당 문자열의 위치값(index)를 구해 2칸 씩 밀어 출력해 주면 된다.

이 때, 2칸 밀었을 때 아무 문자도 존재하지 않는 y와 z를 예외처리해 줘야한다.

이를 findStr 함수로 정의해주도록 한다.


그림을 보면 알 수 있겠지만, 자두색으로 쓰여진 글자 역시 정상적이지 않은 즉, 암호화 되어있는 문장임을 확인할 수 있다.

따라서 동일한 함수 findStr을 사용하기 위해서는 띄어쓰기와 점 역시 예외처리로 해주어야 한다.



결과값은 아래와 같다.


ocri hope you didnt translate it by hand. thats what computers are for. doing it in by hand is inefficient and that's why this text is so long. using string.maketrans() is recommended. now apply on the url.


결과값은 ocr이다.

즉, "www.pythonchallenge.com/pc/def/ocr.html" 가 python challenge 1단계의 정답이 된다.


여담이지만 자두색으로 쓰여져 있던 글씨(str2)를 확인해 보면 손으로 풀지 않길 바란다고 쓰여있음을 확인할 수 있다.




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

The Python Challenge 4  (0) 2016.08.31
The Python Challenge 3  (0) 2016.08.29
The Python Challange 2  (0) 2016.08.29
The Python Challenge warming up  (0) 2016.08.29
The Python Challenge  (0) 2016.08.29

댓글