倉庫番の面を解くツール(解答手順・最小手数・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本道」があります。
- 探索の打ち切り ― 調べる状態が上限に達した場合は、答えを出さずに打ち切ったことをそのまま表示します。 そのときの結果は「解けない」という意味ではありません。