Level 2 로 넘어왔다.

사진안에 아래와 같이 일정한 규칙이 존재한다.

K -> M

O -> Q

E  -> G

또한 글자 내용에는 알수 없는 글자들이 출력되고 있는 상황이다. 이것은 사진에 있는 것처럼 특정한 규칙으로 치환하여 문제를 해결하라는  것이다.

우선 위 규칙을 보면 해당 문자열의 2번째 자리에 오는 문자를 가져오는 것을 알 수 있다.

즉 2칸씩 뒤로 미는 것이다.

이를 하기 위해서는 ASCII 코드의 이해가 필요하다.

우리가 전산상으로 데이터를 전송할 때는 문자 그 자체를 전달하지 않는다. 0과 1 로 치환해서 보내기 때문에 더 쉽게 변환하기 위해 ASCII와 같은 문자를 숫자형태로 변환하여 이후 0과 1로 변환하여 보내는 것을 더 선호한다.

아래는 ASCII 코드 변환 방법이다.

이렇게 한다면 숫자를 2개 더한것만으로도 2칸씩 뒤로 문자를 미는 효과를 가져와 직관적으로 문제를 풀기 더 쉬워진다.

우선

String 을 ASCII 변환하는 것은 ord()

ASCII 를 Strin 변환에는 chr()

함수가 쓰인다.

고려해야할 것은 만약 문자가 z라면 다음 문자는 a라는 것을 지칭해야하고 또한 공백과 특수문자도 치환되서는 안된다.

이를 고려하여 아래와 같은 코드를 만들었다.

import string
data = "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."


data_as = ""
for i in data: # data의 문자를 한개씩 가져와 i에 넣는다. 다 넣으면 함수 종료
    if (i ==" " or i == "'" or i == "."): # 공백, 특수문자는 그대로 추가
        data_as += i
    elif((ord(i)+2) > ord('z')): # 만약 z보다 큰 경우는 다시 a로 돌아가서 계산해야한다.
        data_as += chr(ord(i)+2-ord('z') + ord('a')-1) # -1을 한 이유는 a로 돌아간 시점에 +1 을 해줘야하기 때문 
    else:
        data_as += chr(ord(i)+2) # 그외의 경우는 2개씩 증가 후 chr로 변환
print(data_as)

그 결과 아래와 같은 글이 나왔다.

String.maketrans를 사용하여 map 값을 치환하라고 했다.

 

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의 경우 특정 규칙으로 치환해주는 역할을 한다.

아래와 같은 사용법이 있다. 하지만 python 3.x 버젼을 사용할 때에는 위와 같이 string.maketrans로 사용하면 

module 'string' has no attribute 'maketrans' 라는 오류문구를 출력하게 된다. 

str.maketrans로 사용하자.

아래 결과로 ocr 가 나왔고 다음 Level 3로 넘어가게 된다.

import string

intab = "abcdefghijklmnopqrstuvwxyz"
outtab = "cdefghijklmnopqrstuvwxyzab"
obj = "map"
trans = str.maketrans(intab, outtab)
print(obj.translate(trans))

파이썬 챌린지를 시작한다.

내 생각이지만 처음 문제를 접하면 진짜 어떻게 푸는지 감이 안온다. 기존 데이터가 쌓였다면 이것저것 두드리면서 값을 찾을 텐데 처음은 너무 어렵다. 조금 시간을 소모했다.

처음 들어가면 아래와 같은 사이트가 나올 것이다. URL address를 보라고 적혀 있으니 우선 가장 먼저 보이는 것은

0.html이다.

0 다음 1

1.html을 눌러보았다. 

2 ** 38 를 구하라 했다 **의 연산자는 거듭제곱을 뜻한다.

연산을 하게 되면 아래와 같이 274877906944 가 나오게 된다.

아래 처럼 링크를 만들면 Level 2로 넘어가게 된다.

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

 

파이썬 공부를 시작할려고 한다. 

기본적으로 파이썬은 해커들이 많이 사용 하는 툴로써 여러 자동화 프로그램을 사용하는데 사용된다.

필자도 이번 파이썬 코드로 자동화 코드를 작성할 때 많이 부족함을 알게되어 아래 사이트에서 다시 공부를 시작할려고 한다.

다만 해당 사이트는 이미지 안에 flag 가 있어서 이미지 쪽도 많이 알아야할 필요성이있다.

링크

http://www.pythonchallenge.com/index.php

+ Recent posts