GDD 2010 Japan DevQuiz
Google Developer Day 2010 JapanのDevQuizで用いたスクリプトなど。4つともPython。
問題リストに表示されていた得点は以下のとおり。
問題 | 得点 |
---|---|
Google Maps API | 1.0, 2.0, 3.0 |
2-legged OAuth | 5.0 |
Shiritori | 1.0, 3.0, 6.0 |
PAC-MAN | 35.0, 171.0, 未挑戦 |
Google Maps API
スクリプト
GDD2010Japan DevQuiz Google Maps API
itertools.permutaions()を用いて書いた。問題を解くのが目的だったのでエラーハンドリングをきちんとしていない。
2-legged OAuth
Shiritori
スクリプト
GDD2010Japan DevQuiz Shiritori
単語の辞書と既に用いた単語(先頭に"!"をつけて記述)のリストを入力として与え、探索する。
今回のDevQuizで一番面白く感じたのはこの問題である。3問目は与えられた辞書に含まれる単語数が187と多いため、単純な探索では時間がかかる。しかし問題を有向グラフで表現するとグラフの連結の様子が見え、問題を単純化できる。
結論を言うと、自分のターンでi, k, nから始まる単語を選び、相手にb, j, l, p, q, v, w, x, zのいずれか一つから始まる単語を選ばせ、そしてそれを続ければよい。例えば、自分がkcwdtmywxを選ぶことができれば、それ以後のターンで自分はxで終わる単語を選ぶことにより、相手にxで始まる単語を選ばせ続けることができる。
例
…… 自分: kcwdtmywx 相手: xmgupwvyu 自分: uuceouqnvx 相手: xiwlnpvnvs 自分: skqnjfx 相手: xiphykcuowd 自分: dhvqrgx 相手: xfysfpl ……
この考えを突き詰めると、最終的にはectjazoからflgnmuktegまでの28単語でしりとりを行うというサブ問題に帰着する。この28単語以外を相手に選ばせることで、自分はi, k, nで始まる単語を選択できる。
PAC-MAN
スクリプト
1問目と2問目は、敵の動きを模倣した比較的単純な探索を用いて解いた。定められたステップ数で解が見つからないことは多々あるが、ランダムネスを用いているため、複数回実行することでカバーできる。3問目に対しては探索のアルゴリズムを複雑にするよりも手動で解いた方が時間の節約になると考え実装までは行った。しかし実際に解を提出するところまでたどり着けなかった。cursesを用いて実装した方がよりゲームらしくなるとは思うが、今回は問題を解くことが目的だったので、手をつけていない。
入力1
50 11 7 ########### #.V..#..H.# #.##...##.# #L#..#..R.# #.#.###.#.# #....@....# ###########
入力2
300 20 17 #################### ###.....L..........# ###.##.##.##L##.##.# ###.##.##.##.##.##.# #.L................# #.##.##.##.##.##.### #.##.##L##.##.##.### #.................L# #.#.#.#J####J#.#.#.# #L.................# ###.##.##.##.##.##.# ###.##.##R##.##.##.# #................R.# #.##.##.##.##R##.### #.##.##.##.##.##.### #@....R..........### ####################
入力3
700 58 17 ########################################################## #........................................................# #.###.#########.###############.########.###.#####.#####.# #.###.#########.###############.########.###.#####.#####.# #.....#########....J.............J.......###.............# #####.###.......#######.#######.########.###.#######.##### #####.###.#####J#######.#######.########.###.## ##.##### #####.###L#####.## ##L## ##.## ##.###.## ##.##### #####.###..H###.## ##.## ##.########.###.#######J##### #####.#########.## ##L## ##.########.###.###V....##### #####.#########.#######.#######..........###.#######.##### #####.#########.#######.#######.########.###.#######.##### #.....................L.........########..........R......# #L####.##########.##.##########....##....#########.#####.# #.####.##########.##.##########.##.##.##.#########.#####.# #.................##............##..@.##...............R.# ##########################################################