バッチファイル(けい線迷路2_マスが通じているか検討)
■すべてのマスが通じているかの確認方法の検討
迷路として使えそうな組み合わせを取り出すために、すべての組み合わせからNGとなる組み合わせを除く形で考えていく。下のようなものは右下のマスに行けないのでNG。
1マスの四方が線になっている状態以外にも下のような形のNGもある。
こう見ていくと、外周以外に1周回ることができるルートがある場合はNGとなりそう。つまり、例えば左下から出発して同じ頂点に戻ろうとする場合、外周以外では途中で途切れて戻れないものを探せばいい。
そこで、頂点の座標とけい線の枝部分を定義して、外周以外に1周回ることができるルートがあるかを確認してみる。けい線の1辺は基本的に全角の半分なので0.5として定義し、下のようにleft (l), right (r), upper (u), down (d)として数値をもたせる。
2次配列にけい線を入れるようなバッチを組んで下準備した。これで作成される組み合わせに対して検証する。
@echo off
setlocal enabledelayedexpansion
for /l %%n in (0,1,3) do (
for /l %%m in (0,1,3) do (
if %%n==0 (
if %%m==0 (
set mageMap[%%n][%%m]=┌
) else if %%m lss 3 (
set /a randnum=!random!*2/32767
if !randnum!==0 (
set mageMap[%%n][%%m]=―
) else if !randnum!==1 (
set mageMap[%%n][%%m]=┬
)
) else (
set mageMap[%%n][%%m]=┐
)
) else if %%n lss 3 (
if %%m==0 (
set /a randnum=!random!*2/32767
if !randnum!==0 (
set mageMap[%%n][%%m]=|
) else if !randnum!==1 (
set mageMap[%%n][%%m]=├
)
) else if %%m lss 3 (
set /a randnum=!random!*11/32767
if !randnum!==0 (
set mageMap[%%n][%%m]=┌
) else if !randnum!==1 (
set mageMap[%%n][%%m]=┬
) else if !randnum!==2 (
set mageMap[%%n][%%m]=┐
) else if !randnum!==3 (
set mageMap[%%n][%%m]=├
) else if !randnum!==4 (
set mageMap[%%n][%%m]=┼
) else if !randnum!==5 (
set mageMap[%%n][%%m]=┤
) else if !randnum!==6 (
set mageMap[%%n][%%m]=└
) else if !randnum!==7 (
set mageMap[%%n][%%m]=┴
) else if !randnum!==8 (
set mageMap[%%n][%%m]=┘
) else if !randnum!==9 (
set mageMap[%%n][%%m]=┤
) else if !randnum!==10 (
set mageMap[%%n][%%m]=―
) else if !randnum!==11 (
set mageMap[%%n][%%m]=|
)
) else (
set /a randnum=!random!*2/32767
if !randnum!==0 (
set mageMap[%%n][%%m]=|
) else if !randnum!==1 (
set mageMap[%%n][%%m]=┤
)
)
) else (
if %%m==0 (
set mageMap[%%n][%%m]=└
) else if %%m lss 3 (
set /a randnum=!random!*2/32767
if !randnum!==0 (
set mageMap[%%n][%%m]=┴
) else if !randnum!==1 (
set mageMap[%%n][%%m]=―
)
) else (
set mageMap[%%n][%%m]=┘
)
)
)
)
for /l %%n in (0,1,3) do (
echo !mageMap[%%n][0]!!mageMap[%%n][1]!!mageMap[%%n][2]!!mageMap[%%n][3]!
)