랜덤으로 미국식으로 달 일, 년; 형식의 날짜가 3개씩 나온다. 그럼 그 날짜의 해당 요일을
;로 구분지어서 보내면 된다. 처음에는 해당 년도에서의 요일 구하는 알고리즘까지 직접 구현하려고
귀찮아 죽겠는데 관련 정보를 찾아다니던 도중... datetime이라는 모듈의 존재가 떠올랐다!
날짜 관련된 모듈인데 아마도 여기서 잘 찾아보면 해당 년도를 입력하면 요일이 나오는 함수가 있을거라
생각하고 찾아봤더니 있었다. 다른 분의 티스토리인데 정리가 잘 되어있다. 링크
여기서 datetime.isoweekday() 라는게 있는데. 월요일은 1을 반환하고 ...... 일요일은 7을 반환한다.
이것을 잘 이용해서 포맷을 만들어 보내면 된다.
주의점 : 문제에는 답변 포맷을 "Monday; Tuesday; Wednesday" 같은 형식으로 적어놨는데 "를 붙이면
안된다. 즉 답이 월요일,화요일 수요일이면 Monday; Tuesday; Wednesday 를 보내야 한다.
import urllib2,re,datetime m = "January February March April May June July August September October November December".split() d = "Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split() month = {}; day = {} #month사전에는 각각 달의 영어사전, day사전에는 각각 요일에 대한 사전. for i in range(len(m)): month[m[i]]=i+1 for i in range(len(d)): day[i+1]=d[i] req = urllib2.Request('http://securityoverride.org/challenges/programming/9/index.php') req.add_header('cookie','PHPSESSID=쿠키') page = urllib2.urlopen(req).read() strs = re.findall("<code style='white-space:nowrap'>\s*(.*?)\s*<br />",page)[0].split('; ') m = []; d = []; y = [] print strs for i in range(len(strs)): m.append( re.findall('([a-zA-Z]+)',strs[i]) ) #달 정보를 넣음. d.append( re.findall('\s+([\d]+),',strs[i]) ) #일 정보를 넣음. y.append( re.findall(', ([\d]+)',strs[i]) ) #년도 정보를 넣음. print m; print d; print y dt = [] for i in range(len(strs)): dt.append( day[datetime.datetime(int(y[i][0]),month[m[i][0]],int(d[i][0])).isoweekday()] ) #datetime.datetime객체를 만들어서 위에서 구한 년,월,일을 넣고 그걸 isoweekday()로 요일을 숫자로 반환하게 한 뒤 그것을 사전에 넣어서 영어로된 요일 값을 가져와서 그걸 dt리스트에 추가 answer = urllib2.quote('; '.join(dt)) #사이사이에 ;로 구분지어준다음 url인코딩해줍니다. print answer req = urllib2.Request('http://securityoverride.org/challenges/programming/9/index.php','CSRF_TOKEN=%3C%3Fphp+echo+%24_SESSION%5B%27CSRF_TOKEN%27%5D%3B%3F%3E&string='+answer+'&submitbutton=+Time+Has+Expired+') req.add_header('cookie','PHPSESSID=쿠키') print urllib2.urlopen(req).read()
'Python > 2.7 simple coding(+ c++)' 카테고리의 다른 글
Security Override Programming 11~12 (0) | 2014.12.23 |
---|---|
Security Override Programming 10 (0) | 2014.12.18 |
Security Override Programming 8 (0) | 2014.12.18 |
Security Override Programming 6~7 (0) | 2014.12.17 |
Security Override Programming 4~5 (0) | 2014.12.17 |