Training: Programming 1
아주 일반적인 요청 빠르게 보내기 문제.
# -*- encoding: cp949 -*- import urllib2 req = urllib2.Request('http://www.wechall.net/challenge/training/programming1/index.php?action=request') req.add_header('cookie','쿠키') message=urllib2.urlopen(req).read() req = urllib2.Request('http://www.wechall.net/challenge/training/programming1/index.php?answer='+message) req.add_header('cookie','쿠키') print urllib2.urlopen(req).read()
Flow Over Astronomy
갑자기 빡세짐. 진수 변환을 잘 해서 보내면 된다.
Charset: bhkEsx#LPNW{j2g}Dt@G3p5]1BKXcM9QnYIJyOUATwo[elmCR8FHfirvqda_Su47VzZ06
Input Base: 46
Solution Base: 37
의 의미는 equation에서의 진수는 46진법이며, 숫자0=b,숫자1=h~~ 이런식으로 진행된다.(0부터 시작되는거 주의) 또 input base로 진법 변환을 잘 해서 계산 후 solution base로 진법 변환을 해야 한다.
# -*- encoding: cp949 -*- import urllib2,re req = urllib2.Request('http://www.wechall.net/challenge/anto/FlowOverAstronomy/index.php') req.add_header('cookie','쿠키') page = urllib2.urlopen(req).read() in_base = int(re.findall('Input Base:\s+(\d+)<br/>',page)[0]) sol_base = int(re.findall('Solution Base:\s+(\d+)',page)[0]) if in_base > sol_base: #둘중 길이가 큰 진수까지 charset을 저장해둔다. charset = re.findall('Charset:\s+(.*?)<br/>',page)[0][:in_base] else: charset = re.findall('Charset:\s+(.*?)<br/>',page)[0][:sol_base] chardic = {}; numdic = {} for i in range(len(charset)): chardic[charset[i]]=i #문자 관련된 사전. numdic[i]=charset[i] #숫자 관련된 사전(문자 관련된 사전과 반대 관계.) equation = ''.join(re.findall('Equation</div>\s+<div class="box_c">(.*?)</div>',page)[0].split('<br/>')) print chardic,'\n' print numdic var = [] gob = equation.split(' + ')[:-1][0].split(' * ') for i in range(len(gob)): var.append(gob[i]) var.append(equation.split(' + ')[-1]) print var #식의 각각 값들을 var에 집어넣음. 마지막 +로 더한 진수 포함. for i in range(len(var)): #전체 문자열 길이만큼 반복하면서 십진수로 변환함. num = 0 for j in range(len(var[i]),0,-1): print var[i][j-1], ten = 1 for k in range(len(var[i])-j): ten *= in_base ten *= chardic[var[i][j-1]] num += ten; var.append(num) print '' var = var[len(var)/2:len(var)] #var배열에서 숫자 부분만 가져옴. 문자 부분은 숫자로 변환했기때문에 이제 필요없음. sum = 1 for i in range(len(var)-1): #다 곱하고 print var[i] sum *= var[i] sum += var[len(var)-1] #마지막것만 더함. 식이 다 이런식. answer = [] while 1: #다 곱해지고 더해진 값을 solution base로 변환. answer.append(numdic[int(sum%sol_base)]) if sum < sol_base: break sum /= sol_base print answer answer = ''.join(answer)[::-1] print answer req = urllib2.Request('http://www.wechall.net/challenge/anto/FlowOverAstronomy/index.php?answer='+answer+'&action=Submit') req.add_header('cookie','쿠키') page = urllib2.urlopen(req).read() print page
'Python > 2.7 simple coding(+ c++)' 카테고리의 다른 글
WeChall Training: ASCII, Encodings: URL, Training: Crypto - Caesar I (0) | 2015.01.11 |
---|---|
WeChall Training: Net Ports, Can you read me (0) | 2015.01.05 |
lob gremlin->cobolt (4) | 2014.12.31 |
Security Override Programming 11~12 (0) | 2014.12.23 |
Security Override Programming 10 (0) | 2014.12.18 |