読者です 読者をやめる 読者になる 読者になる

ICFPC2013参戦記

ひとりで参加して、ひとりで打ち上げまでしてしまい、ひとりで二日酔いになっているのであんまり日記を書く元気もないんですが…、でもやるんだよ。

1日目

ざっとルールを読んで昼過ぎには\BV処理系が動くようになったっぽい。
肝心のソルバ部分はまずは全ケース総当たりで書いて見ることにする。
(こういうのがサックリ書けないのがやっぱダメなとこだと思う…)
そうするとサイズ5以下くらいはいけるようになった。
tfoldは確定部分が多いので10以下くらいまで倒せるっぽいことが判明。

各オペレータの重複可能数を割り出すというのをなんとなく書いてみたら、なんとなく当たっているようで嬉しかった。
こういうの本当は証明した方がいいんだろうなぁって。

この辺で深夜になってしまった。
震えながらオペレータ1つ、サイズ3くらいのものを本番で解いて見ることに。
そしたらソルバがバグっていて解けず、慌てて手で解いてはじめての'win'を得ることとなった…。
( ˘ω˘)スヤァ

2日目

肝心のソルバ部分がまったく思いつかない、というポンコツぐあいだったので、小銭稼ぎ用のWebサーバをsinatraで作ることにする。
この辺でAPI周りも作ったんだったかな。
解けそうなsize数は色を変えて、とか、sortとか、いろいろいじくって終盤まで使うことになった。
ICFPC2013/server.rb at master · authorNari/ICFPC2013 · GitHub

夕方になってニヤニヤしながら小銭稼いで行く業に勤しむ。楽しい…。
けどこれ自動でやったほうがいいよね、ということでスクリプトを作る。
あとは全ケースとその入力・出力の組みをあらかじめ計算しておいて…というソルバも考えたのだけど、あんまり戦えなかったり、シンプルに書きなおしたら逆に遅くなったり、とこの辺りの動きは大分無駄が多かったですな。

そう思ったら実は最初かいたコードにバグがあって、それを取り除くとsize:10くらいまでは倒せるようになる。強めのゴブリンくらいはいけるな、と思いつつ、自動スクリプト走らせながら「アウトレイジ・ビヨンド」を視聴。
( ˘ω˘)スヤァ

3日目

いろいろバグとか取ったりしつつ、ソルバについて思いを巡らせる。
もういいや〜、と思ってLIBERTAに行って、『バンビーノ』読みながら問題のこと…は考えずに『バンビーノ』の展開にただただ舌を巻きつつ、スパゲティも巻いたりして、コーヒーをのむ
落ち着いてコーヒー飲んでいると、ようやく解き方がわかって「アーッ」って感じだったので、それを紙に書いて、急いで帰宅。
たぶんこれは初日に気づくべきだとおもうけど…

if0はコンディションの中身はどうでもよくって結局0,1,xになることが多いなあと思った。
if0は運がよければ定期的にプログラムの真ん中とか先頭に入ってくるので、そこまでの組み合わせで解けばいいのか、と。
大きめのサイズの入力・出力、そして問題を読んでいけば大体気づけたと思う。早めにやればよかった。
候補のオペレータをテキトーに入力値入れてに計算していって、こいつは0,1,aのどれか返すはずみたいな感じで、総当りのケースを小さくしていって、という風に解く。
ほいで、書いてる途中でif0の戻りは固定じゃなくて入力値によって変わるじゃん…とか気付き、それに対応する元気もなく終了。
size:20くらいはギリギリ解ける奴ができました。

fold,tfold周りが入ってくるとまた難しいのだろうな、とか。
bonusとか無理だわ、とかありましたけど、そこの辺はやれませんでしたねえ。

自動スクリプトを回しながら『高地戦』を視聴しながらの打ち上げ。氷結ストロング、マジストロング…。
( ˘ω˘)スヤァ

感想

今回の問題はsizeが大きくなるに連れて新しい手法が必要になったりしてたのしかったですねえ。
ルールがシンプルとか、問題がPDF配布じゃないとかもよかった。
リーダーボードは欲しかったかもしれない。

初の1人参加でしたけどこれはこれで楽しいもんですな。でもやっぱチームでやったほうが楽しいかなあ。
お盆だったのでいつものNaClメンバーが休みだったんですよねえ。
次回はお盆を避けていただきたい( ー`дー´)キリッ

コード: authorNari/ICFPC2013 · GitHub
スコア:

"contestScore":381,
"lightningScore":1,
"trainingScore":32,
"mismatches":248,
"numRequests":1803,
"cpuTotalTime":1669.137