解いた問題を→に表示するようにした

SRMなどの過去問を解こうと思ったけど、どの問題が解いていない問題か分からないので、→に記事へのリンクを表示するようにした。適当なスクリプトで記事一覧から抽出して、手動で貼り付け。なので更新が遅いかも。

2011/05/27 再試合の小数点に対応。

# coding: utf-8

# はてなの記事一覧からリンク集を作成

import urllib
import re

url = "http://d.hatena.ne.jp/kusano_prog/archive?of=%d"

data = ""
for i in range(0,200,50):
	data += urllib.urlopen(url%i).read().decode("euc-jp")

SRM = {}
Codeforces = {}
PKU = {}

for link in re.findall('<a href="(.*?)">(.*?)</a>',data):
	u,t = link
	#print u,t
	if t.startswith("SRM"):
		r = re.match("SRM([0-9.]+)",t).group(1)
		if r not in SRM:
			SRM[r] = {}
		if len(t)<=8:        SRM[r]["over"] = u
		if "Div1 Easy" in t:   SRM[r]["D1E"] = u
		if "Div1 Medium" in t: SRM[r]["D1M"] = u
		if "Div1 Hard" in t:   SRM[r]["D1H"] = u
		if "Div2 Easy" in t:   SRM[r]["D2E"] = u
		if "Div2 Medium" in t: SRM[r]["D2M"] = u
		if "Div2 Hard" in t:   SRM[r]["D2H"] = u
		
	elif t.startswith("Codeforces") or t.startswith("CodeForces"):
		m = re.search("#(\d+) (.)\.",t)
		if m:
			r = int(m.group(1))
			if r not in Codeforces:
				Codeforces[r] = {}
			Codeforces[r][m.group(2)] = u
		
		m = re.search("^Code[Ff]orces Beta Round #(\d+)$",t)
		if m:
			r = int(m.group(1))
			if r not in Codeforces:
				Codeforces[r] = {}
			Codeforces[r]["over"] = u
	
	elif t.startswith("PKU"):
		m = re.search("PKU (\d+) ",t)
		if m:
			PKU[m.group(1)] = u

def link(t,u):
	if u!="":
		return '<a href="%s">%s</a>'%(u,t)
	else:
		return t

print "<div><b>SRM</b></div>"
for r in sorted(SRM.keys())[::-1]:
	s = '<div style="padding-left:1em">'
	s += link(str(r),SRM[r]["over"] if "over" in SRM[r] else "")
	s += " Div2 "
	if "D2E" in SRM[r]: s += link("E",SRM[r]["D2E"])
	if "D2M" in SRM[r]: s += link("M",SRM[r]["D2M"])
	if "D2H" in SRM[r]: s += link("H",SRM[r]["D2H"])
	s += " Div1 "
	if "D1E" in SRM[r]: s += link("E",SRM[r]["D1E"])
	if "D1M" in SRM[r]: s += link("M",SRM[r]["D1M"])
	if "D1H" in SRM[r]: s += link("H",SRM[r]["D1H"])
	s += "</div>"
	print s

print "<div><b>Codeforces</b></div>"
for r in sorted(Codeforces.keys())[::-1]:
	s = '<div style="padding-left:1em">'
	s += link("#"+str(r),Codeforces[r]["over"] if "over" in Codeforces[r] else "")
	s += " "
	for p in "ABCDEFGHIJKLMN":
		if p in Codeforces[r]:
			s += link(p,Codeforces[r][p])
	s += "</div>"
	print s

print "<div><b>PKU</b></div>"
print '<div style="padding-left:1em">'
for p in sorted(PKU.keys()):
	print link(str(p),PKU[p])+"&nbsp;"
print "</div>"