HACK TO THE FUTURE 2018 本選 参戦記

時間表記はコンテスト開始時からの経過時間でh:mm形式です.
でも,うろ覚えなので時間は結構適当です.結構間違ってる気がする.
コンテスト中の最終的なexample_03の実行結果は https://twitter.com/laycrs/status/970264189951385605

紀元前

朝6時前の電車に乗る.
30分前に会場につきそうになったので会場付近を散歩してた.
無線LAN設定フェイズで1WAの後AC.
その後,開始まで時間が少しあったので,cLay(beta)に擬似乱数を追加したりしてた.

0:00-1:00

問題文眺めて,これ8時間はバグったら終わるし,難しいことはできないなーと思う.
取り敢えず,問題文をちゃんと読みつつ,7種の行動を行う関数を書く.
早くもお腹へってきた.

1:00-1:30

ご飯のアナウンスがされたので,12時になったら食べようと思いつつ,方針を考える.
花壇を作らなきゃいけないなーと最初は思い込む.
最終形を思い浮かべると,2行48列からなる花壇を敷き詰める形で良いのでは,という感じに至る.
その後,取り敢えず植えて,岩になるの覚悟で最初から突っ切るのもありか?となったけど,すぐ忘れる.
マラソン不得手なので,確実にそこそこな点数が取れて,10位以内を狙えそうなのは前者だという判断.
(結果的にこの判断は大正解だったのだけど,今思えばかなり参加者を過小評価していた)
取り敢えず,花壇作りの方針に向かってコードを書き始める.

1:30-1:50

ご飯タイム.
食べながら,花壇の形は2行48列と48行2列のどちらが良いか考える.
長方形の領域で収穫するので,両者少し違う.
植え直す手間をなくすためには,花壇内のツカモを取りきることなく,できるだけ多くのツカモを回収したほうが良い.
ホントか?
たくさん回収するとツカモが生えるまでに時間がかかるマスが出てくる….
いや,2列の花壇を作るから,1列ずつ回収するのが良い→全マスすぐ生える!
じゃあ,どっちでも変わんないじゃん.
とか考えてたら食べ終わった.

1:50-2:20

取り敢えず,最初は適当で良いので…という気持ちで,プログラムを書き始める.
アルバイトしてワープゲート周辺の岩を壊したり,道を作ったりして,ちっちゃい花壇(2行1列)を最初に作る.
色々バグらせつつも,最初にちっちゃい花壇を作成するプログラムを書き終わる.
そのビジュアライザを眺めてニヤニヤするだけの時間で10分ぐらい溶かした.

2:20-3:00

次は最終形に向けて,最初に作った花壇を伸ばしていくプログラムを書く.
…,最初は適当に…,ってことで,お金余ってたら近くの岩を1個ずつ壊しまくって,岩が排除されててお金があったら花壇を伸ばす,って感じのプログラムを書く.
書き忘れてたけど,ツカモ収穫も取り敢えず一番育ったのを1つずつ収穫するプログラム.
できた.
ビジュアライザみてニヤニヤするだけの時間でまた10分ぐらい溶かした.

3:00-4:10

ツカモ収穫を1つずつやるのをやめて,適当に一番育ったのを摘む中で,いい感じに区間で取るようにした.
そして,2つ目以降の花壇を作るプログラムを書く.
3:00にバックアップ取ったコードと,4:10にバックアップ取ったコードを見比べると,この1時間10分はそれしかしてない.
何やってたんだ….
あとこの時間帯に,WA_TLEさんが後ろのテーブルで2300万点ぐらい叩き出してすげーってなった.
この時間で自分の点数は500万~800万点程度(推定)だったと思う.
ここまできて,やっと初めて,1000ターンで最終的には結構畑になるんだなーということがわかった.
(最初は最終形を作る途中で1000ターン経過して終わる可能性が高いのでは,と思ってた)

4:10-4:50

岩を1個ずつ壊すのをやめて,必要なときに一気に壊すようにしたり,色々手を抜いていたところをまともに調整.
3000万点を超え(推定),意外と良いんじゃないかなと思い始める.

書き忘れてたけど,色々な場所で意図的に乱数を使うようにしていて,制限時間いっぱい同じことをやりなおして,もっともスコアが高かったものを採用,としている.
で,最終スコアしか見てなかったんだけど,毎回の試行のスコアを見ると,めっちゃ低いスコアが結構出てる.
ビジュアライザで確認すると,ツカモ収穫しそびれてて,石になってた.
畑内に石ができることを想定してなくて,最初に畑作るときにその畑内に石があったらどうするーという処理が適応されて,アルバイトしながら永遠と石になったツカモを無に帰していた.
まあ,何回か試行するので,これは放置で大丈夫かな…と思う.

後,試行回数が思いのほか少ないので,どこで実行時間食ってるのか調べたら,最短路を求めるところで9割以上の時間を使っていた.
そのうち高速化しようと思いつつも,まだそれをやる時間ではないと思って放置.

4:50-5:20

ワープゲート2個目以降作ったら,良くなるんじゃね?と思って作ってみる.
よくなった.
けど,ビジュアライザと結果が合わなくなった.
よくわからない質問を飛ばすと同時に,ビジュアライザが狂ってて,提出時の採点プログラムと異なる可能性とかを疑ってしまい,サブミットしてしまう.
(3000万点ぐらい取れるようになったときから潜伏する気満々だった)
結果的には,ワープゲート作ったときに,1000円減らす処理を僕が忘れていた.
(確か,ワープゲートいらねーのでは…とか思って,最初の1時間で適当に書いてしまった気がする…)
ワープゲート使って1000円払ってないから良くなってただけで,1000円払うと良くなってなかった.
が,その後,調整すると微妙に良くなるかな?という感じになった.

5:20-6:00

後半余裕ができてくるので,畑の幅を増やしてみたりした.
3行48列の畑とか,4行48列の畑とか作る.
たまに良いスコアが出るけど安定しなくなった.

6:00-6:20

試行ごとのスコアで妙に低いスコアがたくさん出るなー,ツカモ回収を早めにやるかー.
でも,変わらないな?
と思ったら,岩を壊すときの範囲が間違えていた.
道路のコストの計算時に,長さが1違った.
などのバグを修正.
これは,ここまで放置しておくことではない….
良いスコアが安定して出るようになった.
4500万点ぐらい.

6:20-6:45

やることがない.
何やったか覚えてないけど,ちょっと伸びてて4700万点ぐらい.
順位表に5470万点のtanzakuさんが現れる.
は?
ここにきてスコアを決める要因について考える.
収穫ターン数×収穫量だから,

  1. 畑を作る早さ
  2. 最終形における畑の面積

で決まるはず.

6:45-8:00

少し前に,畑の幅を増やしたら良くなったのを受けて,最終形における畑の面積を増やすこと方向の改良をやることにする.
畑の作る幅の早めに増やす.
安定しないけど,良いときは良くなって,スコアが微増.

試行回数増やせば良い感じになりそうと,ここで,最短路の高速化をする.
岩で埋まることもないので,距離はたかだか1000程度だろうと仮定して,ダイクストラをやめる.
試行回数が10回ぐらいから50回以上ぐらいに増加.

畑と畑の間の道も,後半になると壊して畑を統合するとかして,畑の面積をさらに増やす.
上下の中途半端に土地が余ることがあったけど,それができるだけなくなるように調整.
最後15ターンは,1列ずつ収穫するのをやめて,もう育てる必要ないので,できるだけ多く収穫.
など姑息な手法をどんどん入れていきつつ,乱数運にかけて,最後の30分ぐらいはほぼ5分おきに提出.
最終5342万点.
思えばやり残したことも多い.
中盤何やってたんだ.

懇親会

1位のビジュアライザ見ると,最初からツカモ大増殖パターンで,敗因は初手のスピードの方だった.
そっちの方が最終的にスコア高くなるのは納得できたけど,コンテスト開始時でそれを見抜くのは難しいと思った.
1000ターンでも最後畑を全体に敷き詰められるだねーって気づいたのが,コンテスト残り時間半分ぐらいの時点だった僕には無理そう.
後,1位の方針は,僕がやったら調整できずに死ぬ未来しか見えないので,ベストな順位が取れたと思う.

その後,chokudaiさんから,アルバイトせずに植えてすぐ回収したほうが効率良いとか,長さ48の道作るの高いので24の道2本にしたら,とか言われた.
色々勘違いしてたけど,そうだった.
なんというか,基本的な考察が全くできてないんだなーということに気付かされました.
これは,多分後5時間ぐらい時間があっても気付いてない.

その他

8時間のマラソンをフルで本気で参加したのは初めてでした.
時間が余ったり足りなかったりした8時間でした.
要するに時間の使い方が悪いってことですね.

オンサイト楽しかったですというのは,敢えて書くまでもないので,書いてないです.


Current time: 2024年03月29日23時45分36秒
Last modified: 2018年03月04日20時48分01秒 (by laycrs)
Tags: ignore_tag
トップページに戻る

Logged in as: unknown user (not login)

ログイン: