ハルコン2016 参加記
これは
ひとり Advent Calendar 2016 - Adventar
の8日目の記事です。
カービィやスマブラなどで有名なハル研究所が開催していたプロコンに参加していました。
期間は11/7 ~ 11/25 で2週間以上あり、まぁいわゆるマラソンマッチです。
私がコードを書き始めたのは多分11日くらいなので、ちょうど2週間くらい参加していたことになります。
最後に順位表を見たときは6位だったので、再評価でいい値が出たり上がコケたりしてくれれば、賞金がワンチャンありうるかも…?
こちら、提出したコードにめっちゃコメントを書いたものです。読んで。
ハルコン2016でのrian_tkbのコード · GitHub
そのうち、自分の方針をまとめた解説記事みたいなのも書きたいと思ってます
(マラソンやったことないのでビームサーチとか焼きなましとか言葉しか知らないので、今回も盤面評価すらしていないので多分他の人とは方針が全然違いそう)
以下、期間中の関連ツイートを適当にまとめたもの
C++書けないマンとしてはな
C++しか使えないプロコンってなんだよ
— りあん😇 (@rian_tkb) 2016年11月8日
誤差の処理とか、ちゃんとREADMEに書いておいてほしかった(コードを読解した)
これ、小惑星に接するようにレーザーを撃ったり移動したりしたらどうなるんや
— りあん😇 (@rian_tkb) 2016年11月8日
C++書きたくないマンとしてはな
ハルコン、適当な方針が立ってしまったので時間があったらC++書くかぁという気分
— りあん😇 (@rian_tkb) 2016年11月8日
最初、1ターン目からビームが打てて、かつ次に打てるのがその40ターン後だと思っていた、けわしい
(実際には、最初にビームを撃てるのは40ターン目で、次に打てるのはその41ターン後)
あれ、もうちょいちゃんと仕様をテキストで書いてくれという気持ちが強い(意識の相違によるバグが多発している)
— りあん😇 (@rian_tkb) 2016年11月12日
ようやく主なバグが取れてまともなスコアが出る
叩き台のバグがね、取れた pic.twitter.com/qHUAq8OsYQ
— りあん😇 (@rian_tkb) 2016年11月12日
ちなみに最大のバグはvectorの初期化忘れでした
— りあん😇 (@rian_tkb) 2016年11月12日
普通のオンラインジャッジみたいに1ケースずつ動かし直してると思ったら1回で200ケースまとめて動かしてたでござる
普段C++使わないし、プログラムを1回動かす中で200ケース試してると思わなかったし!
— りあん😇 (@rian_tkb) 2016年11月12日
探索の深さを増やすようにして2位まで更新
(この時期ですでにhirokazuさんは58000台を出してたのか…)
— りあん😇 (@rian_tkb) 2016年11月12日
かっこいい…
なんか上手くいってるケースだとめっちゃかっこいい動きしてる pic.twitter.com/a4pianVMW0
— りあん😇 (@rian_tkb) 2016年11月12日
2円の共通接線はめんどいので結局別の方法で解決しました
2円の共通接線、普通に4つあるからつらそう
— りあん😇 (@rian_tkb) 2016年11月12日
無限にバグが仕込まれているのでもうダメ
今日のバグの原因、余弦定理を間違ってた
— りあん😇 (@rian_tkb) 2016年11月13日
2位争いが熾烈になり、程なくして置いていかれる
とりあえずその場しのぎで伸ばしたけどすぐ抜かされそう pic.twitter.com/UOTRSR0spU
— りあん😇 (@rian_tkb) 2016年11月13日
これも地味につらかった
ハル鯖、手元より微妙に遅いんだよな
— りあん😇 (@rian_tkb) 2016年11月14日
このツイートをしたら翌日には修正が降ってきてて、もしかして監視されてる!? ってなった
え、こんなケース存在すんの、アホでしょ pic.twitter.com/VrUFW1uPmd
— りあん😇 (@rian_tkb) 2016年11月15日
さすがに宇宙船の初期配置は隕石と重なってて欲しくないが
— りあん😇 (@rian_tkb) 2016年11月15日
C++書けないマンとしてはな
— りあん😇 (@rian_tkb) 2016年11月21日
C++が書けなさすぎてふて寝した
— りあん😇 (@rian_tkb) 2016年11月21日
めっちゃTLE
手元「52.936 sec」
— りあん😇 (@rian_tkb) 2016年11月21日
ハル鯖「Time out」
ぼく「つらい」
— りあん😇 (@rian_tkb) 2016年11月21日
残り1日を切り、更新できず賞金ボーダーから置いていかれて焦る
隕石破壊、ギリギリ賞金が見えるかもしれないところまで来たけどあと更新できるとしてせいぜい80程度なので天啓が降ってこないときびしい
— りあん😇 (@rian_tkb) 2016年11月24日
ついに賞金ボーダーが6万を切ってる……
— りあん😇 (@rian_tkb) 2016年11月24日
残り1時間を切ったタイミングで、乱数で回数を回す方向にシフトしたら突如として6万を切り、なんやねんって言う
— りあん😇 (@rian_tkb) 2016年11月25日
終了直後の方針ツイートとか色々
そこまで色々作った関数を全部投げ捨てて乱数の神に祈ったら60000切ったのなんとも言えない
— りあん😇 (@rian_tkb) 2016年11月25日
全提出にリジャッジがかかるなら数出したもん勝ちじゃない? っつって最後にあまりよくなかった乱数も出しまくった pic.twitter.com/lsFYxqbkqd
— りあん😇 (@rian_tkb) 2016年11月25日
現状6位なので、上がコケてくれれば賞金ワンチャンかなぁという感じ
— りあん😇 (@rian_tkb) 2016年11月25日
ハルコン、遠い隕石ほどレーザーで落とさなきゃいけないので、適当に近い隕石を巡るルートを作って、その中でレーザーを撃つ各座標に対し、どの隕石の集合を落とせるか、という集合を調べて、それらを使って全ての隕石が落とせるか調べる、というのを必要ターン数で二分探索、という感じにしました
— りあん😇 (@rian_tkb) 2016年11月25日
残りの巡ってない隕石をレーザーで落とせるのかどうか、という判定をどうするかと、どういう風に隕石を巡るルートを決めるか、というのが肝だった気がするけど思いつかなかったので前者は嘘貪欲、後者は最初の方は先読み探索してたけど乱数回した方が改善された()
— りあん😇 (@rian_tkb) 2016年11月25日
ハルコンの問題、盤面の初期状態と自分の動きによって現在の盤面が求まるから、盤面の初期状態が与えられて2000ターン分の動きを返すでも良かったんじゃないかなぁとは思った
— りあん😇 (@rian_tkb) 2016年11月25日