一括表示

− 野ざらし言 −

[3863] ilogic.def

としき 2011/01/28(Fri) 00:11
http://www1.hinocatv.ne.jp/toshiki/
ベクターに「ilogic.def」というマクロがあります。
パズルの階層です。
http://www.vector.co.jp/soft/dos/game/se009140.html
「イラスト・ロジック」というパズルを解くマクロだそうです。
ところが、これがうまく動きません。
当初はエラー終了してしまったのですが、これは例によって私の環境というか、rxとzhの値を変えることで回避することができました。
ところが、その状態で、絶対に正解があるであろうマクロ同梱のサンプルデータを実行させても、「答えは無」と出てしまいます。
念のため、製品版オリジナルの vzibmj.com + vzibmj.def で実行させてみましたが、状況は変わりません。

どうすれば、このマクロを実行させることができるでしょうか。
マクロのタイムスタンプは94年6月ごろですけど、もしかして、このマクロはVz1.5用なのでしょうか。(Vz1.6は93年12月リリース)
仮にVz1.5用だとして、ちょっとした手直しで、Vz1.6で動作させるようにできるものでしょうか。

ご意見をいただけると幸いです。

[3864] Re: ilogic.def

めざら 2011/02/06(Sun) 09:55
[3863]へのコメント http://homepage3.nifty.com/mezala/
 パズルとはまた珍しいジャンルにありますね。
 見たところ,どうやらNEC-98環境で作成されたらしく,半角罫線が使ってあったりします。(半角罫線と気付くまでに結構かかりました。(^^;)

 v1.5x 用ですが,特に版に依存するコードはなく,ヘッダを付けてやれば普通に動くはずと見えます。…が,確かに解が無いという結果になってしまいますね。なぜそうなのかは,パズルのルールがわからなければ理解できないところです。物凄い量のループの連続なのでトレースも限界があるというのは,それほど大した理由になりませんが,ルールがわからないと何とも…。

[3865] Re^2: ilogic.def

としき 2011/02/06(Sun) 15:55
[3864]へのコメント http://www1.hinocatv.ne.jp/toshiki/
>  見たところ,どうやらNEC-98環境で作成されたらしく,半角罫線が使ってあったりします。(半角罫線と気付くまでに結構かかりました。(^^;)

言われて、PC-98で実行したら、確かに罫線が表示されました。

>  v1.5x 用ですが,

やっぱりそうですか。
なんかちょっと違和感を感じたんですよ。

>  特に版に依存するコードはなく,ヘッダを付けてやれば普通に動くはずと見えます。

とりあえず、PC-98で試してみたこと。
マクロにヘッダを付け、ついでに^\のキーアサインも割り当てて、さらにマクロ冒頭の&03の前にrx-, zh-,を付けて保存。これをPC-98の常用環境でDEMO.DATをオープンした状態で起動すると、他の環境で実行したときと同様、「答えは無」が出てしまいます。
う〜、わからん。

>  ルールがわからないと何とも…。

ルールは、ドキュメントの冒頭に記載してありますよね。
で、おそらく、demo.datが無事に解けると、ドキュメント冒頭のドット絵が出てくるのではないかと思います。データの内容から、なんとなくそんな感じを受けます。
あとで暇ができたら、3x3とか5x5くらいの小さな絵のデータを作って、トレースしてみます。

[3866] Re^3: ilogic.def

としき 2011/02/13(Sun) 22:43
[3865]へのコメント http://www1.hinocatv.ne.jp/toshiki/
> あとで暇ができたら、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バイト半角罫線との文字コード比較が悪いのかなぁ。
あるいは、それがあるとカーソル位置記憶で正しい位置を記憶できないとか。
 

[3867] Re^4: ilogic.def

めざら 2011/02/14(Mon) 15:12
[3866]へのコメント http://homepage3.nifty.com/mezala/
ループが二重構造になっていて,…と言うか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|□□□■■|
 +----------+

[3914] Re^5: ilogic.def

としき 2011/03/19(Sat) 23:24
[3867]へのコメント http://www1.hinocatv.ne.jp/toshiki/
まだこのマクロをいじっています。

さて、めざらさんの提示された改良箇所を反映させて

> ドキュメント掲載の2解あるサンプル

このデータで実行させたら、2つ解があるような表示が出ました。
ステップ000000004というのとステップ000000021というもの。
でも、最終的には1つしかファイルに残りませんでした。
が、それは、こんな図形。

1 2 3 4
+--------+
1|□■□■|
2|□■■■|
3|■■■□|
4|■□■□|
+--------+

とりあえず、#3866で私が示したデータでは、正しい答えを出してきました。
まだまだ、謎の多そうなマクロです。

↑ このページの先頭