リプレイ画面
https://www.codingame.com/replay/561103427
ルール
惑星に高出力エネルギーを交互に注入し火山活動を起こさせ、自分が作った火山だけで惑星を先に半分に切った方が勝ち。
画面は展開図で正20面体として考えて、辺で接しているものを繋がりとします。
半分の判定はパネルのSとN 同じ数字ものがつながった時です。
あとエネルギー注入後が1その後ターンごとに4まで増え、4の時隣接する3箇所が平地なら隣接地に1が自動生成されます。
あと隣の相手の火山との関係で対消滅とかします。
履歴
これが作成時のソースの履歴です。
奇声を発していますが、SUBMITする時は少し覚悟が必要なので発しています。
自信があるときは とう とか発していますが、経験上 調子乗っているときほどダメなことが多いです。
たぶんリミッターが外れていて、確度が低いのではないかと思っています。
上達の秘訣
順位を上げるために必要なのは
行動の回数
相手がスゴイんだという姿勢でめげずにコツコツSUBMITしている人がだいたい上位にいます。
直近も作成時が3位で現在4位、
その間SUBMITした方は3人、上位にいった方は3回リトライしてます。
作成アルゴリズム
今回は画面を作ることはしませんでした。
このゲーム少しややこしいのはタイルのIDにあたるものが順番にふった数字とN05とかタイル番号2つあって
隣接リンクの情報も与えられるのですがそちらは順番値
タイルを順番値をキーに辞書化して
タイル[順番値] = (タイル番号、タイル番号の数値のみ、[リンク1、リンク2、リンク3])
あとは迷路探索のアルゴリズムの応用です。
(※ ソースのインデントは崩れてます)
ソースは sp探索ノードの設定、長さ、out探索済みを入れる、win_pos探索済みのタイル番号の数値、一手詰み、二手詰みのデータを探索時に追加していきます。
火山のデータが0は平地、>0は自分の火山、<0は相手の火山、いずれでも探索できるように関数に渡すパラメータdが1の時はnに置いた時の自分の探索としています。(相手のときはd=-1)
最後火山の成長も入れてみましたが、正確な実装ができず、強いのか弱いのか不明なので保留中です。
(自己対局で5戦で全勝なら強くなっています。)