7/25 21:00~ 7/28 21:00 の 72時間ICFPCに参加しました。
ICFPC:関数型言語の国際学会ICFPが毎年開催している プログラミングコンテスト、ICFP Programming Contest (通称ICFPC)
by ICFP Programming Contest 日本語Wiki
コンテスト概要
パックマン作ってね。高い点数とった人が勝ちだよ。
おばけ(敵)はアセンブリ風言語(GHC)で動くよ。
(肝心のパックマン(Lambda man)については読むの放棄したのでよくわからない)
Lightning round
高い点数とれるラムダマンを作ればいいらしい。
チームメイトがコンパイラとかLispとか言ってて謎。
「どうせ次の日から、おばけも書いてねって言うんでしょ?」って思って
初日からおばけAI担当になる。(それしかできそうにない)
GHCの方針を考える
- 最短経路で敵に向かいたい
- はさみうちしたい
現実的に考える・実際に書く
GHCでは、
if a == b and c == d:
を書くのに4命令使うし、256 * 256 のマップの最短経路の探索はつらい。
小さい範囲で最短経路を探索する手はあるけど書ける気しない
敵の軌跡をを記録し続けて、記録の中にあるマスにきたら、
その軌道にのればとりあえず追いかけられる (= 敵が戻る選択肢をさせづらくできる) ので、
それくらいならできるかな・・・。
結局これくらいしか書いてない
- pillや敵の方へ向かう
- 袋小路から抜ける
- 敵をストーカーする
- 敵が解析してくるのを邪魔する無限ループを作る
- frightモードの時は敵から離れる
最後時間なくてどんどん糞コード量産するしかなくて辛かった。
おばけコード
おばけ0
ひたすらお化けの方向に突進する。 縦方向優先で近づく。
おばけ1
pillの上をうろうろする。どちらかといえばお化けの方向に向かう。 横方向優先で近づく。
おばけ2
おばけ0と同じ動きをしつつ、敵の移動を記録する。
記録しているマスに乗ったら、敵の移動を追いかける。
おばけ3
pillの上をうろうろする。どちらかといえばお化けの方向に向かう。 縦方向優先で近づく。
感想
来年もやりたい
来年から社会人だけど、1年目の夏って休みとれるんだろうか。
入社3ヶ月じゃ有給は取れないかな。(よくわからない)
知り合いの社会人の人たちが有給とってICFPCしてていいなあ〜青春だな〜〜って思った。
就職先でICFPC一緒にやれる友人ができたらいいな。
来年はもっと役に立てる人になってたい。
コンパイラとかふふふ♪っていいながら書けるOLになろう。