A - Treant's Forest 解説 by Moegi


通路の組み方

盤面については、以下のことが言えそうでした。

  • 長い袋小路は無駄が多そう。
    ある経路が一本の袋小路だと、一度探索済みになると二度と通られないため、その床の踏破回数の期待値は高くて 2 程度になる。

  • サイクルは避けたい。
    サイクルがあると、短い経路が見つかった時点で長い経路は使われなくなる。なのでグラフは木にしたい。

  • 一本の長いパスを作りたい。
    長い歩数を稼ぐには、結局どこか一本の経路を多用することになりそう。パスはできるだけ長くしたい。

  • 両端に袋小路を多めに用意する。
    作った一本のパスの往復回数を増やしたい。小さな袋小路を両端に多めに用意すると有効。

上の白黒画像は、ドット絵ツールで描いた画像。それを AI に投げて入力形式に変換し、複数パターンをテストして平均スコアの高いものを採用した例。
20×20 盤面で平均スコアはおよそ1400。


花を隠す

花を隠すための配置例

花はできるだけ終盤まで見つからないようにしたい。
いくつかの隠し方(画像の通り)を思いつく限り列挙し、コードにそのまま埋め込んだ。

  • 埋め込んだ後、花から入口までが連結かどうかを簡易チェックする。
  • 簡易チェックに落ちた場合は、条件を緩めた別パターン(消費マスが増える/隠蔽確率が下がる)を採用する。

コード上での実際の盤面構築

  1. 花を隠す盤面パターンを埋め込む。
  2. 左右の両端から幅 3 程度の位置に縦パスを作る。
  3. 縦パスに横枝を生やす。
  4. 適当な左右の横枝ペアを、一本のパスで連結する。
  5. パスを焼く(主経路を確定させるイメージ)。
  6. 入口と花から任意の床へ到達可能になるまで掘り進めて連結し、valid な盤面にする。
  7. 盤面の微調整

最終的な提出

投稿日時:
最終更新: