(11098)
11098:
ハノイの塔マクロ HANOI.DEF の改造
投稿者:
konno
2024/02/22(木) 01:27
コメント数 3
ハノイの塔マクロ HANOI.DEF を改造しました。
オリジナルは、T.Tanomura さんの名作です。作者様に感謝です。
===== hanoi_k.def ハノイの塔 =====
; ハノイの塔マクロ HANOI.DEF
; (VZ Editor version 1.5/1.6 共通)
; (C) T.Tanomura, 1992/7/5, 1994/7/31
; h.konno 2024-02-22 円盤の枚数 1〜15 に改造、速度アップ
【機能】
ハノイの塔の問題を解きます。
【用法】
編集モードで起動し、円盤の枚数として 1〜15 の数を入力してください。
ハノイの塔の問題を知らない方は、最初は 3 にするといいでしょう。
【補足】
'Q' を押すと、中止になります。★##k
'G'(=go)を押すと、残りの移動を一気に行います。
マクロの連続実行を中止するには [ESC] を押せば止まります。★##k
マクロを中断したり実行後おかしくなったらオプション初期化してください。
改造して速度が倍近く上がっています。(当社比)★
下のリンクをクリックすると hanoi_k.def のソースが表示されます。
当社の新リンク機能です。(^_^)
#txt:hanoi_k.def
- No.11098 -
このTreeへ
[リストへもどる]
pre
(11098)
11100:
Re: ハノイの塔マクロ HANOI.DEF の改造
投稿者:
としき
2024/02/23(金) 00:33
参照先:http://toshiki.la.coocan.jp/
11098 番 konno さんへのコメント コメント数 2
> ハノイの塔マクロ HANOI.DEF を改造しました。
> オリジナルは、T.Tanomura さんの名作です。作者様に感謝です。
実行してみました。gコマンドの速度は速いですね。
ただ、画面の表示が正しくないです。何が悪いのかな。
konnoさんのところではきちんと表示されているのでしょうから、私の環境かな。
Tanomuraさんのマクロは、正しく表示されています。
で、まぁ、マクロコードを読もうとしたのですが。
あきらめました。
なぜって、コードとコメントの混在で。
一応、読もうと努力はしたんですよ。
だけど、例えばコードの最初のほう、属性などのいくつかの変数をプッシュする
コードがコメントアウトされていて、でもその理由が明記されているわけでもなし、
明記せずとも暗黙で理解できるようなコードでもなし。
まぁ、コード本体というか内部ではこれらの属性が変更されていないからプッシュ
されていないのだろうな、とは想像できますが、ならばなぜ、わざわざ記載した
上でコメントアウトされているのか、全くの謎。
おそらく、konnoさん的にはこういうコードが理解しやすいのでしょう。
でも、申し訳ない、私は脱落しました。
もっとも、世の中には、いわゆる「汚いコード」というのがいくらでもあって、
そういうのに比べればkonnoさんのコードは、まだまし、といったところでしょう。
- No.11100 -
このTreeへ
コメント元:11098 へ
[リストへもどる]
soft
(11098)
11102:
Re^2: ハノイの塔マクロ HANOI.DEF の改造
投稿者:
めざら
2024/02/23(金) 11:29
参照先:http://mezala.la.coocan.jp/
11100 番 としき さんへのコメント コメント数 2
> なぜって、コードとコメントの混在で。
(外野の言い訳になってしまうけれど)他の方のプログラムを改造する場合,
わたしも元の行をコメントアウトした上で,改造コードを記載してしまいます。
「ここをこうしたよ」ということを明示しているつもりなんですよね。
そういうのは,プログラミングに慣れた人には嫌われるのでしょうか。
田野村さんはタブを使わず4字下げだったので,それをそのまま行にコメントすると,
字下げが4の倍数にならずにグチャグチャした印象を与えてしまいますね。
> 属性などのいくつかの変数をプッシュするコードがコメントアウトされていて、
> でもその理由が明記されているわけでもなし、
グローバル変数のプッシュ/ポップの辻褄を合わせる努力をするよりも,
ローカル変数にしてしまえば他に影響はないという考え方なのでしょう。
ただ,はっきり言ってしまうと,典型的な「スパゲティ」になっているコードを
改善する気がない表明とも受け取られかねないわけで,見た目の印象以上に
コードを追う気力を失わせることはままあることかもしれないと思います。(自省)
上記は,自分への反省とか注意喚起という意味あいの方が強いかもしれません。
それより,わたしがちょっと引いたのは,
「マクロを中断したり実行後おかしくなったらオプション初期化してください。」
かな。
中断が予想される場合は,その処理を入れておくのがふつうかなと思います。
(まぁ,&k で拾う場合は終了処理が無理なことも多いんですけどね。)
- No.11102 -
このTreeへ
コメント元:11100 へ
[リストへもどる]
soft
(11098)
11105:
Re^3: ハノイの塔マクロ HANOI.DEF の改造
投稿者:
としき
2024/02/23(金) 13:42
参照先:http://toshiki.la.coocan.jp/
11102 番 めざら さんへのコメント
めざらさんのところでも同じようですが、うちも最初が正しく積みあがっていません。
> わたしも元の行をコメントアウトした上で,改造コードを記載してしまいます。
> 「ここをこうしたよ」ということを明示しているつもりなんですよね。
> そういうのは,プログラミングに慣れた人には嫌われるのでしょうか。
コメントアウトされているのが全て改造前、ということがわかれば私はOKです。
それでも見づらいことは見づらいので、プログラミングに慣れた多くの人は嫌う
かもしれない。
概ね、プログラミングの世界では、例えばバグの混入を避けるなどの目的で、可読性
というものが重視されます。これもある種の理想論なんで、現実にはメモリ量とか
速度とかを目的として最適化というものも行われますが、でも最適化は最後の段階。
実際、遅いのはアルゴリズムが悪いことが多いので、アルゴリズムの見直しを行い、
それでも所要の性能が出ない場合に最適化する、というのが通常の段取り。
そういう潮流なので、コードが読みやすいことが尊ばれるのですよ。
ある種、読みやすさは正義、みたいな。
そして、読みやすくするためにはどうするか、という様々な研究もあって。
その中に、余分な情報は少なければ少ないほうが良い、というのもあります。
余分な情報は正しい認識を阻害する、ということから、私は迷彩という表現を使って
います。そして、このコードは何をする、というコメントなら多くの場合問題はない
のですが、旧のコードと新のコードが並列されていて、単にコメントアウトされて
いるだけ、という場合、混乱を招きやすいのではないかなぁ。
だって、行の途中を読んでいて、その行がコメントであるか確認するために行の先頭
に視線を戻して、という手間が発生するので、少なくとも私には心理的負担。
あるいは、例えばウィルスなんかだと「コードの難読化」なんていう技術が使われて
いたりします。つまり、わざと読みづらくすることにより、どういう挙動を示すか
わからないようにしているのですが、だから一部の口の悪いプロのプログラマーは
「そんなウィルスのようなコードを書くな」
などと後輩に指導して、もはやこの表現はパワハラ案件だという冗談もあるくらい。
> > 属性などのいくつかの変数をプッシュするコードがコメントアウトされていて、
> > でもその理由が明記されているわけでもなし、
> グローバル変数のプッシュ/ポップの辻褄を合わせる努力をするよりも,
> ローカル変数にしてしまえば他に影響はないという考え方なのでしょう。
すごい、きちんと読まれたのですね。
もう私、プッシュポップをしていないということは、これらは内部では使われて
いないんだ、というところでそれ以上読むことをあきらめていました。
> それより,わたしがちょっと引いたのは,
> 「マクロを中断したり実行後おかしくなったらオプション初期化してください。」
> かな。
私は逆というか、この表現を見た瞬間、画期的だと思いました。
積極的にオプションを初期化するって発想がなかったもので。
でも、過去の多くのコードを見てきためざらさんがそういう反応をするということ
は、これはいわゆるマクロ師的には邪道なのかもしれませんね。
- No.11105 -
このTreeへ
コメント元:11102 へ
[リストへもどる]
soft
(11098)
11107:
Re^3: ハノイの塔マクロ HANOI.DEF の改造
投稿者:
konno
2024/02/23(金) 14:03
11102 番 めざら さんへのコメント
> (外野の言い訳になってしまうけれど)他の方のプログラムを改造する場合,
> わたしも元の行をコメントアウトした上で,改造コードを記載してしまいます。
> 「ここをこうしたよ」ということを明示しているつもりなんですよね。
そのとおりなんですが、私の場合統一性が無く文字通りぐちゃぐちゃになってました。
流石にこのままアップしたのは不味かったですね。m(__)m
> 田野村さんはタブを使わず4字下げだったので,それをそのまま行にコメントすると,
> 字下げが4の倍数にならずにグチャグチャした印象を与えてしまいますね。
これは公開を考えたら統一するべきでしたね、修正します。m(__)m
> > 属性などのいくつかの変数をプッシュするコードがコメントアウトされていて、
> > でもその理由が明記されているわけでもなし、
修正前のコードをコメントして残すなら理由を明記するべきでしたね。
> グローバル変数のプッシュ/ポップの辻褄を合わせる努力をするよりも,
> ローカル変数にしてしまえば他に影響はないという考え方なのでしょう。
そのとおりですが、実際には不具合が出たようで、難しいですね。
> ただ,はっきり言ってしまうと,典型的な「スパゲティ」になっているコードを
> 改善する気がない表明とも受け取られかねないわけで,見た目の印象以上に
> コードを追う気力を失わせることはままあることかもしれないと思います。(自省)
m(__)m m(__)m m(__)m
> それより,わたしがちょっと引いたのは,
> 「マクロを中断したり実行後おかしくなったらオプション初期化してください。」
> かな。
> 中断が予想される場合は,その処理を入れておくのがふつうかなと思います。
中断とは、マクロを Ctrl Break などで強制的に止めるという意味だったのですが
このマクロは止まらないみたいですね。
なので、中止のコードを追加したのですが、そうするとプッシュポップの辻褄が合わなくなります。
変なところにポップしてメモリを壊すよりは変数保存のプッシュポップをやめるのがいいかと。
プッシュポップの辻褄が合わなくてもマクロを終了したら SP は初期化するかな。
と思ったのです。
不要なコメントを整理してコードも見直しますのでしばしお待ちください。m(__)m
- No.11107 -
このTreeへ
コメント元:11102 へ
[リストへもどる]
soft
(11098)
11103:
Re^2: ハノイの塔マクロ HANOI.DEF の改造
投稿者:
konno
2024/02/23(金) 13:21
11100 番 としき さんへのコメント コメント数 1
> 実行してみました。gコマンドの速度は速いですね。
> ただ、画面の表示が正しくないです。何が悪いのかな。
> konnoさんのところではきちんと表示されているのでしょうから、私の環境かな。
試していただきありがとうございます。
画面表示は具体的にはどんな感じになるのでしょうか。
> Tanomuraさんのマクロは、正しく表示されています。
Tanomuraさんのマクロの回数の数字だけ増やしても80*25画面で平気で動作しますね。
環境に左右されないようしっかり作られているのは流石です。
> で、まぁ、マクロコードを読もうとしたのですが。
> あきらめました。
> なぜって、コードとコメントの混在で。
す、すみません、公開するなら修正前の不要なコメントは消すべきでしたね。
修正して差し替えます。m(__)m
- No.11103 -
このTreeへ
コメント元:11100 へ
[リストへもどる]
soft
(11098)
11106:
Re^3: ハノイの塔マクロ HANOI.DEF の改造
投稿者:
としき
2024/02/23(金) 13:50
参照先:http://toshiki.la.coocan.jp/
11103 番 konno さんへのコメント コメント数 1
まず、うちの環境では、めざらさんのところと違い、落ちたことは一度もありません。
> 画面表示は具体的にはどんな感じになるのでしょうか。
円盤が3枚のときの初期画面。(右側省略)
■
■■
■■■
~~~~~~~~~~~~~~~~~~~
円盤が3枚のときのgコマンドでの終了画面。(右端まで)
■ ■
■■
■■■■■■ ■■■
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
円盤の表示位置が正しくないようですが、空白での上書き消去は正しく行えているので
ゴミが残っている、というようにも見えます。
- No.11106 -
このTreeへ
コメント元:11103 へ
[リストへもどる]
pre
(11098)
11108:
Re^4: ハノイの塔マクロ HANOI.DEF の改造
投稿者:
konno
2024/02/23(金) 14:52
11106 番 としき さんへのコメント
> > 画面表示は具体的にはどんな感じになるのでしょうか。
>
> 円盤の表示位置が正しくないようですが、空白での上書き消去は正しく行えているので
> ゴミが残っている、というようにも見えます。
げげ、これはひどいバグですね。すみませんでした。m(__)m
80*25の画面でスペースがはみ出てしまってますね。
途中で数値変更して確認していませんでした。お恥ずかしい。m(__)m
諸々修正して再アップします。しばしお待ちください。m(__)m
- No.11108 -
このTreeへ
コメント元:11106 へ
[リストへもどる]
soft
(11098)
11101:
Re: ハノイの塔マクロ HANOI.DEF の改造
投稿者:
めざら
2024/02/23(金) 08:45
参照先:http://mezala.la.coocan.jp/
11098 番 konno さんへのコメント コメント数 1
実行してみたところ,数回の移動でコマンドラインに降り,最終的に VZ が落ちました。
(「落ちた」は正確ではなく,VZの子プロセスから離脱……かな。戻れず強制終了。)
まず,最初にきれいに積み上がっていないです。
次のコードがあります……
#E #m #[ &k
……が,実行中にコマンドラインに降りるのは何故なのですか?
ここの意図についてコメントがないので,想像もつきませんが……
- No.11101 -
このTreeへ
コメント元:11098 へ
[リストへもどる]
soft
(11098)
11104:
Re^2: ハノイの塔マクロ HANOI.DEF の改造
投稿者:
konno
2024/02/23(金) 13:41
11101 番 めざら さんへのコメント
> 実行してみたところ,数回の移動でコマンドラインに降り,最終的に VZ が落ちました。
> (「落ちた」は正確ではなく,VZの子プロセスから離脱……かな。戻れず強制終了。)
げげ、これはヤバいですね、オプション絡みでしょうか。
スタートして直ぐと終了時に時間計測のためにコマンドラインに降りていますが
移動中は関係ないし、もしかして EP かなぁ。
時間計測部分はコメントにします。
> まず,最初にきれいに積み上がっていないです。
オリジナルで問題無いなら何かのオプションの影響ではないかと思いますが・・・
> #E #m #[ &k
> ……が,実行中にコマンドラインに降りるのは何故なのですか?
> ここの意図についてコメントがないので,想像もつきませんが……
上に書いたように時間計測のために追加したのをそのままにしていました。
プロンプトを $t$p$g にして時間表示させ、マクロの実行時間を測定しています。
これが悪さをしている可能性があるのでこの部分はコメントにします。
不完全なままアップしてすみませんでした。m(__)m
- No.11104 -
このTreeへ
コメント元:11101 へ
[リストへもどる]
soft
(11098)
11109:
ハノイの塔マクロ 改造差替え版
投稿者:
konno
2024/02/23(金) 18:09
11098 番 konno さんへのコメント コメント数 2
ハノイの塔マクロ HANOI.DEF 改造の差し替え版です。
オリジナルは、T.Tanomura さんの名作です。作者様に感謝です。
バグバグの物を上げてしまいすみませんでした。m(__)m
コメントも整理しました。
これでめざらさんのところで問題なく動きますように。(-人-)
下のリンクをクリックすると hanoi_k.def 差替え版のソースが表示されます。
#txt:hanoi_k.def
- No.11109 -
このTreeへ
コメント元:11098 へ
[リストへもどる]
soft
(11098)
11110:
Re: ハノイの塔マクロ 改造差替え版
投稿者:
めざら
2024/02/23(金) 21:03
参照先:http://mezala.la.coocan.jp/
11109 番 konno さんへのコメント コメント数 1
ふつうに実行できました。
結局,何が問題だったのか分からないままでしたが……
- No.11110 -
このTreeへ
コメント元:11109 へ
[リストへもどる]
soft
(11098)
11111:
Re^2: ハノイの塔マクロ 改造差替え版
投稿者:
konno
2024/02/23(金) 23:27
11110 番 めざら さんへのコメント コメント数 1
> ふつうに実行できました。
> 結局,何が問題だったのか分からないままでしたが……
問題なさそうで、ホッとしました。(^^;
コマンドラインに降りたのがまずかったと思い、EP0 にしたくらいですが
多分違いますよね。(^^;
ともあれ良かったです。(^_^)
- No.11111 -
このTreeへ
コメント元:11110 へ
[リストへもどる]
soft
(11098)
11112:
ゾロ目を踏んだのはやっぱり管理人
投稿者:
としき
2024/02/23(金) 23:48
参照先:http://toshiki.la.coocan.jp/
11111 番 konno さんへのコメント コメント数 1
いや、ほとんどT/Oで申し訳ない。
酔ってるもんで。
- No.11112 -
このTreeへ
コメント元:11111 へ
[リストへもどる]
soft
(11098)
11113:
Re: ゾロ目を踏んだのはやっぱり管理人
投稿者:
konno
2024/02/24(土) 00:08
11112 番 としき さんへのコメント
> いや、ほとんどT/Oで申し訳ない。
> 酔ってるもんで。
あ、全然気が付きませんでした。(^^;
おめでとうございます。(って、自分に言うか)
- No.11113 -
このTreeへ
コメント元:11112 へ
[リストへもどる]
soft
(11098)
11114:
Re: ハノイの塔マクロ 改造差替え版
投稿者:
としき
2024/02/26(月) 01:37
参照先:http://toshiki.la.coocan.jp/
11109 番 konno さんへのコメント コメント数 1
> ハノイの塔マクロ HANOI.DEF 改造の差し替え版です。
やっと試すことができました。
きれいに動いています。
ただ、うちでは、マシンのせいなのか、konnoさんのところほどTanomura版との差は
大きくなっていません。12枚で、Tanomura版だと45秒強、konno版だと35秒弱、
といったところです。
なお、実行したのはVTDOS、画面サイズは横80桁、縦50行です。
でも、konnoさんのところでは、画面サイズで実行速度が変わる、というのは面白い
ですね。速度が画面サイズに依存しないようにする、という改造もいいかも。
- No.11114 -
このTreeへ
コメント元:11109 へ
[リストへもどる]
soft
(11098)
11116:
Re^2: ハノイの塔マクロ 改造差替え版
投稿者:
konno
2024/02/26(月) 21:58
11114 番 としき さんへのコメント
> やっと試すことができました。
> きれいに動いています。
無事に動いたようでなによりです。(^_^)
> ただ、うちでは、マシンのせいなのか、konnoさんのところほどTanomura版との差は
> 大きくなっていません。12枚で、Tanomura版だと45秒強、konno版だと35秒弱、
> といったところです。
> なお、実行したのはVTDOS、画面サイズは横80桁、縦50行です。
うーむ、差が少ないのは気になるところですね。私の各種環境で比較してみました。
VTDOS org 69秒
VTDOS kon 33秒
CKWV+VTDOS org 63秒 80*25
CKWV+VTDOS org 69秒 136*34
CKWV+VTDOS kon 33秒 80*25
CKWV+VTDOS kon 36秒 136*34
DOSVAXJ3 64 org 70秒
DOSVAXJ3 64 kon 34秒
M Player pen4_x64 org 171秒
M Player pen4_x64 kon 71秒
ckwv のが時間が掛かると思いましたがそうでもないですね。
> でも、konnoさんのところでは、画面サイズで実行速度が変わる、というのは面白い
> ですね。速度が画面サイズに依存しないようにする、という改造もいいかも。
移動のたびに &d で全画面表示しているので大画面の方が不利かと思いましたが
オリジナルでも大画面の方が遅いですね。
MS-DOS Player は画面表示が遅いのかな、また検証してみます。
- No.11116 -
このTreeへ
コメント元:11114 へ
[リストへもどる]
pre