天下一 Game Battle Contest 2021 Springに参加しました。
問題は、天下一でよくある利益を他のプレイヤーと分配するタイプのものでした。
結果は参加者数不明のうち35位。
問題
タスクをこなすと得点が得られる。
タスクとはグリッド上の指定ルートを巡回すること。
具体的に言うとタスクは文字列として与えられ、文字に対応する座標を巡回する。
ただし、得点はゲーム完了時にタスク完了数に応じて他の参加者と山分けする。
タスクは10分ごとに追加される。60分以降は追加されるタスクの点が100倍。
考察
文字列は頭の方にあるサンプル以外はランダムっぽい?
文字数の多い物は移動コストが高い、文字間の距離が遠いものは移動コストが高いということで、美味しいタスクはかなり限定される。LUCK→KLABのように連鎖することで移動コストを抑えられるが、*1ランダムであれば有用なものは少なそう。
10分毎にタスクが追加されることを考えると、細かい調整はあるにせよ追加されたタスクで一番良い物を回しているとその間に新しいタスクが来るので以下ループという感じ?
やったこと
最序盤は美味しそうなやつを手で探して固定で回させてみたり。
序盤のタスクは不味いし後に繋がらないのでやめた方がいいですね…。
60分経過後は高いタスクだけ回すようにした。
移動コスト計算して時間コスパを調べるの面倒だなーと思いながら、もっさり実装。
同時に移動履歴を見て連結時の文字被りをチェックしたんだけど、何故か動かない。
この原因を探りながら、短いタスク同士で連結できないか目視確認したけどダメそう。
履歴が見れないの、サンプルのバグじゃん…と気づいた辺りで終了。
コンテスト終了時のタスク完了数の見積もりは、
現ペースの1/10のペースで増えるみたいな雑見積もり。
この辺は全然分かりませんでした。
終わってみて
・実はサンプルコードに必要以上のスリープが仕込まれていた
・同様に、同じ文字を繰り返す際に何故か画面中央に行って戻るようになっていた
・実はタスク文字列はランダムではなく、途中からタスク同士が完全に内包関係にあるようなものが出てきていた
・ルール説明上出てこない、重み(得点)1のタスクがあった
・C#のサンプルがバグっていて、そのままでは取得出来ないデータがあった
割と罠がたくさんあって、罠を避けるコンテストという面も大きかったなと思います。
体系化されたコンテストにばかり出るとこういうのへの対応力が落ちてくるのでそこは引き締めないとなーというポイント。
ビジュアライザのサイバー感がすごくかっこよかった。
スクリーンショット取っておけばよかった。