> 見たところ,どうやらNEC-98環境で作成されたらしく,半角罫線が使ってあったりします。(半角罫線と気付くまでに結構かかりました。(^^;)
> v1.5x 用ですが,
> 特に版に依存するコードはなく,ヘッダを付けてやれば普通に動くはずと見えます。
> ルールがわからないと何とも…。
> あとで暇ができたら、3x3とか5x5くらいの小さな絵のデータを作って、トレースしてみます。トレースしてみました。 が、よくわかりません。 作ったデータは以下のようなものです。 x=3 y=3 3 2 1 end 3 2 1 end これが完成すると、以下のような絵になります。 1 2 3 +------+ 1|■■■| 2|■■□| 3|■□□| +------+ 最初、&tを18行目付近に入れました。 「プログラム メイン」とあるところです。 そして、トレースされているコードをじっと観察していました。 でも、やっぱりよくわかりません。 ただ、何回か見ているうちに、2番ローカルが怪しそうな気がしました。 そこで、18行目の&tをはずし、2番ローカルのe=0のところに入れました。 そして、トレース窓を見ていると、あれ、なんかさっきと違う。 おやや、答えを見つけてしまいました。 では、ということで、調子に乗ってdemo.datで走らせて見ました。 が、やっぱり答えは無いと出てきてしまいます。 なんかよくわかりません。 2バイト半角罫線との文字コード比較が悪いのかなぁ。 あるいは、それがあるとカーソル位置記憶で正しい位置を記憶できないとか。
ループが二重構造になっていて,…と言うかgotoなんですが… ステップが追いにくいため,トレースを諦めました。 答えを出したということは,どこかに小骨があるということですね。 もしかしたら,1つの解では無しになるのかと思って, ドキュメントに掲載されている2つ解のあるサンプルを試すと, 2個の解があるように表示されて,その後,無限ループに陥りました。 とりあえず,次のデータで試してみてください。 ドキュメント掲載の2解あるサンプル x=4 y=4 2 3 3 2 end 2 3 3 2 end 1 2 3 4 +--------+ 1|■■□□| 2|■■■□| 3|□■■■| 4|□□■■| +--------+ 1 2 3 4 +--------+ 1|□□■■| 2|□■■■| 3|■■■□| 4|■■□□| +--------+ 解は2つありますね。 実行の前に,マクロ側も少し直しておきます。 001: ==== iLogic 004: 1 "logic" ?. ;グローバル77は環境マクロで使用可能性あり 024: &m("答を見つけました。拡張子 (.da%d) でセーブします。",k) 093: (cd=='-') ? . ;枠より出る ? 100: :B #07 (r)?{ &m("無限ループに陥るので終了") . } 123: &?(" +") (m){&?("--")} &?("+") #04 #11 126: &?("%2d",a+1) #07 #07 #15 #08 &?("|") 141: &?("|") #04 #11 146: &?(" +") (m){&?("--")} &?("+") 174: * このデータでこのコードだと,たぶん解があると一瞬表示されますが, 最終的には間違った図で保存されてしまうと思います。 無限ループになる前に抑止しているだけで, 枠の外に出てしまっている原因を解決していないからだろうと思います。 とりあえず,今日はここまで。(^^; このパターンは複数の解があるような… ドキュメント掲載データ拡張 x=5 y=5 2 3 3 3 2 end 2 3 3 3 2 end 1 2 3 4 5 +----------+ 1|■■□□□| 2|■■■□□| 3|□■■■□| 4|□□■■■| 5|□□□■■| +----------+
> ドキュメント掲載の2解あるサンプル