ICFP Programming Contest 2015

今年も少しだけ参加しました。使用言語は Scala です。
レポジトリ:  https://github.com/hayatoito/icfpc2015
code: https://github.com/hayatoito/icfpc2015/blob/master/src/main/scala/io/hayato/icfpc2015/HexTetris.scala output.json: https://github.com/hayatoito/icfpc2015/blob/master/src/main/resources/output.json
log: https://github.com/hayatoito/icfpc2015/blob/master/result.log.txt


今年の題材は六角形テトリス。関数型プログラミングとはあまり関係がないありふれた感じの探索ゲームでしたので(わりといつものこと)初見でちょっと興味をなくした人が多い気がする..。:(

72時間をフルに使用して参加してくる複数人で構成されたガチ勢チームと異なり、ゆるふわ参加の場合はこのような趣旨の問題でよい結果を出すのはかなーり難しい気がするので最近は:

目標

1. ちゃんと関数型で書く。コードはすべての箇所で100%参照透明になるように。自分への教育目的。

ちなみにICFP Programming Content は、一応関数型プログラミングの大会となっていますが、関数型プログラミングで書くチームはほとんどいないです....。これが現実か...。:(

2. なるべくコードを書かない (・∀・)。 

  裏スコア := [獲得スコア] / [コードの行数] = [コード一行あたりの獲得スコア]

 で一位を目指す :)

という2つの目標をもって参加するようにしています。


結果

1: 100%達成。今年はすべてのコードを参照透明にしました。おかげでデバッグが楽。

2: 書いたコード (HexTetris.scala) の行数は300行未満。

   - コマンドラインパラメータの処理
   - JSON Parse
   - 六角形テトリスシミュレータ
   - AI (BFS + 適当な評価関数)
 等一応全部入っているはず。

インタラクティブにテトリスを遊ぶ GUI も scala.swing を使用して書いたのですが、そこは省いています。だって swing って副作用前提のライブラリだし... (言い訳)

書いたコードの総量が1万行を軽く超えている参加チームが多い中、全部足しても300行未満というのはおそらく観測範囲の中では最小の行数であろう (・∀・) 。

 ICFPC に Scala で参加したいという初心者向けのコンテンツとしてはきっと貴重な存在。:)
Shared publiclyView activity