バッチファイル(けい線迷路_検討)

■4×4でけい線をランダムに入れる。
次のように線で囲まれた中でランダムな配置となるようにけい線を入れてみる。

四隅は┌、┐、└、┘のどれか。上辺は┬、ー、下辺は┴、ー、左辺は├、|、右辺は┤、|のそれぞれどれか。内側は、┌、┐、└、┘、┬、┴、ー、├、|、┤、┼のどれか。それぞれをランダムで選択する。

バッチのコードは下の通り。ここでは10回繰り返し。

@echo off
set leftupCorner=┌
set rightupCorner=┐
set leftbottomCorner=└
set rightbottomCorner=┘
set upLine[0]=┬
set upLine[1]=―
set rightLine[0]=|
set rightLine[1]=┤
set leftLine[0]=|
set leftLine[1]=├
set bottomLine[0]=┴
set bottomLine[1]=―
set inside[0]=┌
set inside[1]=┬
set inside[2]=┐
set inside[3]=├
set inside[4]=┼
set inside[5]=┤
set inside[6]=└
set inside[7]=┴
set inside[8]=┘
set inside[9]=―
set inside[10]=|

set num=0

setlocal enabledelayedexpansion
:trial
set /a num=num+1
for /l %%n in (0,1,3) do (
 set /a randIn[%%n]=!random!*11/32767
)
for /l %%m in (0,1,7) do (
 set /a rand[%%m]=!random!*2/32767
)
echo !leftupCorner!!upLine[%rand[0]%]!!upLine[%rand[1]%]!!rightupCorner!
echo !leftLine[%rand[2]%]!!inside[%randIn[0]%]!!inside[%randIn[1]%]!!rightLine[%rand[3]%]!
echo !leftLine[%rand[4]%]!!inside[%randIn[2]%]!!inside[%randIn[3]%]!!rightLine[%rand[5]%]!
echo !leftbottomCorner!!bottomLine[%rand[6]%]!!bottomLine[%rand[7]%]!!rightbottomCorner!

if %num%==10 (
rem end
) else (
goto:trial
)

実行結果は下のもの。

線で囲まれているという点は変わらず中身は変わっている。この中で迷路として使えそうなものを選んでいく。定義はいろいろとできるだろうけど、例えば、次のようなすべてが区切られているものは当然使えない。ので、まずはマスがすべて通じているものとしてみる。

それぞれの選択肢の数から組み合わせの総数を考えると、2^8 * 11^4 = 3748096通りとなるはず。

すべてのマスが通じているかどうかを確認する方法はどうすればいいかな。