使える言語はBASICのサブセット。変数はA-Zの26個の整数型と[0]-[99]の100個の整数型1次元配列。
メモリは公称4kByteですが、メインが1K,そしてセーブエリアが1KX3つです。
BASIC自体が高校の頃以来なので、とても懐かしい!
そして、なぜか「ハノイの塔」を解くプログラムを書いてみた。
ハノイの塔は、Cとか再帰的呼び出しができる言語の特徴を説明するのに使われるわけなのですが、再帰っておいしいの??って感じのBASICで書いてみます。
とはいいつつつも、再帰以外の解法を考えるのが面倒なので、古の、再帰呼び出しを自分でコントロールするBASICプログラムです。
塔には0,1,2とIDを振って、そこに置かれる円盤は、数字のIDが付いているものとして、円盤を動かす操作をプリントすることで解法を出力することにします。たとえば、円盤1を0から2へ動かすのは
1:0->2
とします。
できたプログラムを動かすとこんな感じです。
再帰的呼び出しをコントロールするのには、1次元配列をつかって、ローカルスタックフレームを作ります。
ナイーブに作ったリストはこんな感じ。
10 PRINT"TOWER OF HANOI"
20 A=1
30 C=0
40 INPUT"LEVEL:",B
50 [5]=B
60 [6]=0
70 [7]=2
80 [8]=1
90 [9]=0
100 IF A<1 1000="" goto="" p="">1>
110 IF[A*5+4]=2 GOTO 500
120 IF[A*5+4]=1 GOTO 300
130 IF[A*5]>1 GOTO 200
140 PRINT [A*5],":",[A*5+1],"->",[A*5+2]
150 C=C+1
160 A=A-1
170 GOTO 100
200 [A*5+4]=1
210 A=A+1
220 [A*5]=[(A-1)*5]-1
230 [A*5+1]=[(A-1)*5+1]
240 [A*5+2]=[(A-1)*5+3]
250 [A*5+3]=[(A-1)*5+2]
260 [A*5+4]=0
270 GOTO 100
300 PRINT [A*5],":",[A*5+1],"->",[A*5+2]
310 C=C+1
320 [A*5+4]=2
330 A=A+1
340 [A*5]=[(A-1)*5]-1
350 [A*5+1]=[(A-1)*5+3]
360 [A*5+2]=[(A-1)*5+2]
370 [A*5+3]=[(A-1)*5+1]
380 [A*5+4]=0
390 GOTO 100
500 A=A-1
510 GOTO 100
1000 PRINT"TOTAL:",C
1010 END


0 件のコメント:
コメントを投稿