倉庫番の面を解くツール(解答手順・最小手数・XSB形式)

倉庫番(そうこばん / Sokoban)の盤面をテキストで貼り付けると、最小押し回数・総移動数・解答手順(u d l r)と、その最小手順が何通りあるかを表示します。押しを1手とする幅優先探索なので、出てくる押し回数は 最小であることが保証されます。

入力はブラウザの中だけで処理し、どこにも送信しません。登録もログインも不要です。

XSB形式(# 壁 / @ 人 / $ ハコ / . ゴール / * ゴール上のハコ / + ゴール上の人)。 全角で貼っても半角に直して読み取ります。60列 × 60行まで。

結果

最小 7 押し・21 手で解けます

最小手数での解き方は1通りだけです。下の手順は、その1つを最短の歩きでつないだものです。

最小押し回数
7 回
総移動数
21 手
最小手順の通り数
1通り(解は一意)

盤面

7列 × 6行 / ハコ 2個 / ゴール 2

手順(u=上 d=下 l=左 r=右 / 全 21 手)

rrdrruluul lddrluurrd d

読みやすさのため10手ごとに区切って表示しています。空白は入力ではありません。

使い方の実例

公式パズル「公式03 ふたつの角」の盤面を、この形で貼り付けます。

#######
#.  $@#
#. ####
#   $ #
#     #
#######

この入力に対して、次のように表示されます。

  • 最小押し回数7 回
  • 総移動数16 手
  • 最小手順の通り数1通り(解は一意)
  • 手順llldddrrrullldlu

この実例の数値も、上の入力欄と同じ処理でその場に計算しています(書き写した値ではありません)。

盤面の書き方(XSB形式)

#
@
プレイヤー
$
ハコ
.
ゴール
*
ゴールの上のハコ
+
ゴールの上のプレイヤー
(空白)

ハコの数とゴールの数は同じでなければなりません。プレイヤーはちょうど1体です。条件を満たさない 入力は、どこが足りないかを日本語で表示します。

この結果の読み方

  • 最小押し回数 ― ハコを押した回数の最小値です。歩いただけの移動は数えません。
  • 総移動数 ― その最小の押し手順を、最短の歩き方でつないだときの総手数です。
  • 最小手順の通り数 ― 押し回数が最小になる解き方の数です。1なら解は一意で、そのパズルには「正解の1本道」があります。
  • 探索の打ち切り ― 調べる状態が上限に達した場合は、答えを出さずに打ち切ったことをそのまま表示します。 そのときの結果は「解けない」という意味ではありません。

つづけて

  • パズル一覧であそぶ ― 公式パズルとみんなの投稿パズルをブラウザで遊べます。
  • パズルをつくる ― 作った盤面をこのツールに貼れば、解けるか・最短が何手かを公開前に確かめられます。