<!-- urllib may help. DON'T TRY ALL NOTHINGS, since it will never end. 400 times is more than enough. -->


사진을 클릭하면 URL에 ?nothing=[숫자] 가 추가되면서 아래와 같은 문구가 나옵니다.

변하는 숫자를 계속 입력하면 되는데 400번 해야 된다고 알려줍니다.



힌트로 urllib를 사용하라고 알려주지만 requests가 더 익숙해서 사용해봤습니다.

400회를 다 수행하면 다음 URL을 알려주게 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
import requests
import re
 
number = ['0']
for i in range(400):
    url = "http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing="
    payload = url+number[0]
                     
    res = requests.get(payload)
    number = re.findall("[0-9]+",res.text)
 
    print(res.text)
cs


'Code Challenge > pythonchallenge.com' 카테고리의 다른 글

[pythonchallenge] level 3 equality  (0) 2018.12.13
[pythonchallenge] level 2 ocr  (0) 2018.12.13
[pythonchallenge] level 1 map  (0) 2018.12.12
[pythonchallenge] level 0  (0) 2018.12.12


하나의 소문자 주위에 3개의 대문자가 있다고 합니다.

소스 코드에 주석으로 나와있는 다량의 문자열들 사이에서 해당 값을 찾아내면 되는 문제입니다.



이 문제는 정규표현식을 이용해서 해결할 수 있습니다.


예를 들어, AAAaAAA 이렇게 되어 있으면 가운데에 있는 a값이 찾고자 하는 문자입니다.

정규표현식으로 만들면 [A-Z]{3}[a-z]{1}[A-Z]{3} 이렇게 되는데 해당 방식대로 하면 많은 값들이 나오게 됩니다.

[A-Z]{3}을 앞뒤로 해도 그 앞뒤로 다시 대문자가 올 수 있기 때문입니다.


그래서 [a-z]{1}[A-Z]{3}[a-z]{1}[A-Z]{3}[a-z]{1} 앞뒤로 소문자를 하나씩 넣어주면 해결이 됩니다.


python에서 정규표현식을 사용하려면 re 모듈을 이용하면 됩니다.

1
2
3
4
5
6
7
import urllib.request
import re
 
html = urllib.request.urlopen("http://www.pythonchallenge.com/pc/def/equality.html").read().decode()
data = re.findall("<!--(.*?)-->", html, re.DOTALL)[-1]
 
print([ payload[4for payload in re.findall("[a-z]{1}[A-Z]{3}[a-z]{1}[A-Z]{3}[a-z]{1}",data) ])
cs


'Code Challenge > pythonchallenge.com' 카테고리의 다른 글

[pythonchallenge] level 4 linkedlist  (0) 2018.12.13
[pythonchallenge] level 2 ocr  (0) 2018.12.13
[pythonchallenge] level 1 map  (0) 2018.12.12
[pythonchallenge] level 0  (0) 2018.12.12

소스 코드에 읽을 수 없는 문자열이 나와있는데 해당 문자열에서 단어를 찾으면 되는 문제입니다.




payload에 대한 값을 복사해서 돌리면 특정 값이 나오게 됩니다.

해당 문자를 찾으라고 해서 ascii code값으로 계산을 해봤습니다.

1
2
3
4
5
6
7
payload=""
result =''
for i in range(len(payload)):
    if(ord(payload[i]) >= 97 and ord(payload[i]) <= 122 ):
        result += payload[i]
 
print(result)
cs



이후 다른 풀이를 확인해 보니 Dictionary를 이용해 각각의 문자들이 몇 번 발생했는지 확인하고 찾는 방법이 있었습니다.

실행해보면 특수 문자들은 1000회 이상 쓰였지만 이 특정 문자들은 1회씩만 사용되어 확인할 수 있었습니다.

1
2
3
4
5
6
payload=""
={}
for ch in payload:
    d[ch] = d.get(ch,0)+1
 
print("".join(ch for ch in payload if d[ch] ==1))
cs


'Code Challenge > pythonchallenge.com' 카테고리의 다른 글

[pythonchallenge] level 4 linkedlist  (0) 2018.12.13
[pythonchallenge] level 3 equality  (0) 2018.12.13
[pythonchallenge] level 1 map  (0) 2018.12.12
[pythonchallenge] level 0  (0) 2018.12.12

+ Recent posts