7月 2018
日 月 火 水 木 金 土
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
休む必要は実際ないけど、会社を休んだ. 大島駅で友人と待ち合わせをし、民泊に向かった. オーナーと思われる人が玄関でドアを開けて待機しており、簡単に説明を受けて中に入った. オーナーはキャリーバッグを1つ持ってどこかに去った.
午前一時より ICFPC が始まった.
すごく大雑把に問題を述べると、3Dモデルが160個程度与えられるので、それを生成するような3Dプリンタを設計しろというもの. 素子 (nanobot) があるので、それを動かし、1 voxel (pixel の 3d 版) を埋めるという操作を繰り返す. nanobot は自己複製することができる. モデルを完成させるまでの時間を最適化する (正確な説明ではない) という問題.
ポイントは、たかだか 160 個のモデルについて、個別に最良の解答を提出しさえすれば良いというところである. チームの中でスコアサーバを立てて、解答を提出して、最良のものを選んで zip にかためて submit するという機構が必要だと分かったので、作ってもらった.
午前一時に Lightening Division が終了した. サーバーの不調や、提出し慣れてないことが祟って最終提出に失敗したかと思われたが、サーバの不調は運営側の責任だということで、 提出期限が少し延びた為、改めて提出することができた. スコアサーバの上で zip に固めて提出するまでの機構が必要だと強く思った. この時点では zip にかためてダウンロードするところまでしか出来なかった.
午前一時、Full Division が終了した. Full Division では複製できる素子 (nanobot) の最大数が倍の40個までに増え、いくつかの命令が増えた (voxelを消す行動と、線分/矩形面/直方体を指定して一片にその中を埋める/消す行動). あ、あと単にモデルを作るミッション (Assembly) 以外に、与えられたモデルを完全に消すというミッション (Disassembly) と、 モデルが2つ与えられるので一方から一方へ作りなおすミッション (Reassembly) に増えた.
Reassembly は結局単に Disassembly してから Assembly するだけにした. これが良いのは、D用のソルバとA用のソルバを作って、それぞれの出力をただ結合すればいいところである. これを bestcat
と命名し、シェルスクリプトで実装した. スコアサーバで最良の出力を持たせて取得できるようにしてたから出来たことだ. ICFPCはこういう環境づくりが重要なプロコンで、楽しい.
直接 Reassembly を解くソルバも作られていたが、最終提出はほとんどが bestcat だった. これは Assembly が Disassembly に比べて余りにも難しくて、スコアの内 Assembly が支配的だったことが原因である.
ICFPCの疲れを取るためと思って余分に一日休みを入れておいた. キネマ大森に行って "RAW 少女のめざめ" という映画を見た. もっと普通の、ベジタリアンが主人公のドキュメンタリー映画くらいに思ってたが、がっつりサイコホラー映画だった. 同じビルに入ってるブックオフが広くて良かった.
出社した. 新卒歓迎会が本郷であった.