はじめに
ICFPに初めて参加した感想です。私は業務上プログラミングを行うことは少ないが、社内で募集がかかっていたこともあり、この手のチームで参加するコンテストに参加したことがなかったので参加してみた。
ICFP
72時間なんでもありのコンテストとなります。今年は、いくつかの問題カテゴリ対して10-20前後の問があり、それぞれ解答のみを提出してスコアを競う形式でした。
前日
今の会社へ入社したてだったため、取り敢えず環境構築した。Python、Node.js、Rust辺りが使えるようにした。因みにRustはよく分かってない。
結果からいうと、この環境構築はあまり意味なかった。
初日
いざ、コンテストが始まった、英語の問題をチームで読み解く。しかし、私は正直理解できていなかったが、よく分からない言語(後にICFP言語と呼ばれてた)とコミュニケーションをとり、問題を解いていくようだった。
こんな感じの言語
B$ B$ L# L$ v# B. SB%,,/ S}Q/2,$_ IK
それぞれ、先頭文字列に役割があり、LISPライクなコンパイラ必要だった。途中まで作成したが、チームの方がコンパイラを作成されたので、それをそのまま使うことにした。
初日から暗雲低迷なコンテストが始まったという印象でした。
2日目
何種類かの問題に分かれており、それぞれに問題数があることを知った。初日で大分心折れてアルゴリズム面では太刀打ちできなことを悟ったが、それでも解けそうな3dという問題にトライした。
問題例)
いかのような問題文が与えられる。
Input
1 <= A <= 100
Output
The factorial of A. A! = 1 * 2 * .. * (A - 1) * A
Example
A = 5 Answer = 120
解答は以下のようなマスを作成して提出する。記号に各種のオペレーター(四則演算的な)があり、処理順のワープもある。解答までのイメージとしては、大学の授業で回路組んでいるときに近かった。
しかし、特に解答のためにプログラムを書く必要なく、紙と鉛筆されあれば十分という、うってつけの問題だった。
. . . . 0 . . . .
. B > . = . . . .
. v 1 . . > . . .
. . - . . . + S .
. . . . . ^ . . .
. . v . . 0 > . .
. . . . . . A + .
. 1 @ 6 . . < . .
. . 3 . 0 @ 3 . .
. . . . . 3 . . .
この時点では、問題の意味は分かってもどういう思考プロセスで解いたらよいかさっぱりだった。ノリで参加したことを後悔してきた。
3日目
昨日に続き、3dにトライした。チームメンバーが提出した解答をテスト→少しいじるを繰り返した。なんとなくこんな感じか?ぐらいのテンションで出した解がチームスコアを更新した。
ここから怒涛のスコア更新が始まった。謎の脳内パラダイムシフトにより、ベストスコア(1位!)も獲得できた。コンテスト終了時点に2位となっていたが、
ちなみに、全くプログラムを書かなかった。
4日目
この日は普通に仕事だった。しかし、問題がずっと脳内シミュレートされ全く集中できなかったといっても差し支えかない。この日の仕事が、自動化された操作をひたすら見守るだけという、よわよわエンジニアらしいタスクで助かった。
仕事終わり次第、解答を提出したら無事に何問かスコアを更新することができた。
感想
実装力がなさ過ぎて全くプログラム書かなかったけど、普通に楽しめた。 終始チームメンバーが作成した提出用のプログラムを使っていた。実装力の無さが浮き彫りになったので、より精進しないとな感じた。ただ、3dという問題があったおかげでICFPの面白さを一部かじることができた