Brise

[Python Challenge] 파이썬 챌린지 - 1 본문

프로그램/Python

[Python Challenge] 파이썬 챌린지 - 1

naudhizb 2016. 10. 31. 15:53
반응형

<map>

위와 같은 사진과 함께 아래와 같은 메시지를 볼 수 있다.

 

everybody thinks twice before solving this.

 

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.

 

역사나 암호에 관심이 있는 사람이라면, 이것이 카이사르 암호(시저 암호)의 일종이라는 것을 알아챌 수 있을 것이다.

 

암호화를 진행하게 되면

ABCDEFGHIJKLMNOPQRSTUVWXYZ가

CDEFGHIJKLMNOPQRSTUVWXYZAB의 순서가 되어 뒤로 두 순서씩 미루어 지는 규칙을 확인 할 수 있다.

 

이제 우리가 해야 할 일은 위에 언급된 글을 다시 복호화 시키는 것이다.

복호화 하기 위해 아래와 같은 코드를 짰다.

 

input_str = """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"""

# ABCDEFGHIJKLMNOPQRSTUVWXYZ to
# CDEFGHIJKLMNOPQRSTUVWXYZAB

# Note : default offset = 2
def decrypt(str, offset):
        tmp =
"";
        result =
"";
        num_of_alphabet =
ord('z') - ord('a') + 1;
       
# ord(char) returns ascii number of char
        # chr(num) returns ascii character of fit number
       
for i in str :
           
if(i==" " or i=="'" or i=="." or i=="(" or i==")"):
                tmp += i;
           
else:
                tmp +=
chr(ord(i) + offset);
       
for i in tmp :
           
if( (ord('a') < ord(i)) and (ord(i) < ord('z')) ) :
                result += i;
           
elif(i==" " or i=="'" or i=="." or i=="(" or i==")") :
                result += i;
           
elif(ord(i) < ord('a')) :
                result +=
chr(ord(i) + num_of_alphabet);
           
else :
                result +=
chr(ord(i) - num_of_alphabet);
       
return result;
output_str = decrypt(input_str,
2)
print output_str

 

실행해 보면

i 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

 

위와 같은 메시지가 출력된다.

 

String.maketrans()란 함수를 쓰면 더 쉬울 것이다…. 라는(빠직)

 

사실 위의 글에서

'이 문제를 풀기 전에 모두 두 번씩 생각해라'

라는 의미에서 알 수 있듯이, 문제를 푸는 건 바로!!

 

아래가 아니라 위였던 것 이였다!!! ㅜㅜ

 

이제라도 빨리 푸는 방법을 알았으니 위에 있는 문제를 풀어보자.

 

위의 주소 창의 주소는 http://www.pythonchallenge.com/pc/def/map.html 이기 때문에 바꿀 문자열은

"map"이다.

 

이를 바꾸는 프로그램을 작성하면



위와 같이 아주 단순하게 작성 할 수 있다.

 

실행하면 'ocr'이 나오게 된다.

 



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



반응형
Comments