今年も ICFPプログラミングコンテスト に参加していました。72時間耐久好きな言語で好きにやれコンテスト。今年の課題は SECDマシン で動くパックマンAIと、簡単な仮想のアセンブラ言語255命令以内で動くパックマンの敵モンスターAI を作れ、という課題でした。 パックマン側とモンスター側を入れ替えて戦って対戦してスコア勝負というトーナメント。 今年は @phoenixstarhiro と @fuqinho の3人チームで参加しました。 コンテスト中に使っていたレポジトリは
です。言語は基本的に C++。
foo
が (cons 1 (cons 2 3))
だったときに
(let [(x y z foo)] ...)と書くと
x
y
z
にそれぞれ 1, 2, 3 が束縛される対 cons 右結合専用パターンマッチとか、
(defmacro (and x y) (if x y 0))と書くと短絡評価の and になるようなマクロが定義できるようななんちゃってマクロというほどでもない何かくらいが特徴です。 あとグローバル定義された関数の引数の個数だけは型(?)チェックをします。
-
" 一文字トークンを数値の 0
として解釈して引き算ができなくなるバグを埋めこんだりとかです。
おしまい。
感想としては、命令セットのハック的な使い方できれば面白いのになあと思っていたのに出来なかったのが心残りです。 環境チェインたどる命令を悪用してランダムアクセス実現できないかなーとかそれ系ですね。
あと、w_oさんも書いてらしたけど、 趣味言語処理系よく作ってたので自分はこういうの大変得意な分野だったけど、 他のチームの感想を見ていると、別にそういう言語作り趣味野郎として認識してない人であっても、 皆さん普通にサクサクコンパイラ書いてて出来る人はなんでも出来るなあ流石だなあというのが印象に残りました。 みんな半日でコンパイラ書けるんだしせっかくなので勢いで俺俺言語を乱造しまくって欲しいですね。