===== 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-23 円盤の枚数 1〜15 に改造、速度アップ 【機能】  ハノイの塔の問題を解きます。 【用法】  編集モードで起動し、円盤の枚数として 1〜15 の数を入力してください。 ハノイの塔の問題を知らない方は、最初は 3 にするといいでしょう。 【補足】  'Q' を押すと、中止になります。★##k  'G'(=go)を押すと、残りの移動を一気に行います。  マクロの連続実行を中止するには [ESC] を押せば止まります。★##k  マクロを中断したり実行後おかしくなったらオプション初期化してください。  改造して速度が倍近く上がっています。(当社比) * M 89 ^\ "ハノイの塔" ? . j13, (vp.26>88)? j15, &g("円盤の枚数 (1〜15) ") ; (r<1 || j12)? j=n*2+2, ? j24, ; &01 &d ep0, a-, b+, c=2, h.0=n+1, h.1=h.2+, i-, p+, h.3=ci,h.4=co, ;★ ci,co,保存 0[, &02 &d ci=h.3, co=h.4, ;★ ci,co,戻し ; #E #m #[ &k ;時間計測 Prompt $t$p$g (p)? { &m(" %5d 回で中止しました %s",i,l) >Q } ;★中止 &m(" %5d 回の移動で完了しました %s",i,l) :Q &k &b(2) &k &p #C ;終了処理 du=h.5, dl=h.6, dc=h.7, mi=h.8, eo=h.9, ep=h.10, ;変数戻し &m("") &d #] . 1:;--- 初期状態の表示 --- Eu[, Eu+, (22) { #n D(55+j) } Eu], ; &x(1) &y(20) (52+j) { '~' } i=n, ; :A &x(15-i) &y(19+i-n) (i) { &?(x) } (i--) ? >A . ; 2:;--- 円盤の移動 --- (1^ :A c[, c=b, b], n++, } (k)? &d ;ss-, ;--- この3行で速度アップ --- ;★纏めて表示 &m("%d %s",i++,k) ; 回数表示簡略化 ;移動回数表示 (k)? &s ; ここから非表示 ;★移動中非表示 &k (r==27)? {p1, . } ;★ESC:中止 (p) ? { &b(2) &p &u(r) (p=r!='Q') ??{p1,.} ;★ Q:中止 (p=r!='G') ?? { k="", &03 } } ;★カーソル消し &x(15+j*a-n) &y(21-h.a) (n) { " " } ((h.a)--) ((h.c)++) ; &x(15+j*c-n) &y(21-h.c) (n) { &?(x) } ; (1^ :B a[, a=b, b], n++, } (r]) >? { . >A >B } 3:;--- カーソルを完全に消去で速度アップ --- &v(0) ci=co=-1, #] ;★ ; #E #m #[ ;時間計測 Prompt $t$p$g 4:;--- 変数保存 --- h3+$,."$[14]" ;★変数保存 *