概要
ilasmでstack machineやってみた。
生成した日本語プログラムをcopilotに解説してもらった。
投入したプロンプト
次の日本語プログラムを解説してくれ
数値 100 を積み
変数 n に移動し
数値 1 を積み
変数 i に移動し
loop:
変数 i を積み
変数 n を積み
比べて大なら bye へ飛ぶ
変数 i を積み
数値 15 を積み
剰余し
偽なら fb へ飛ぶ
変数 i を積み
数値 5 を積み
剰余し
偽なら b へ飛ぶ
変数 i を積み
数値 3 を積み
剰余し
偽なら f へ飛ぶ
変数 i を積み
数値印字し
無条件で tugi へ飛ぶ
fb:
文字列 "fizzbuzz" を積み
無条件で print へ飛ぶ
b:
文字列 "buzz" を積み
無条件で print へ飛ぶ
f:
文字列 "fizz" を積み
print:
文字印字し
tugi:
変数 i を積み
数値 1 を積み
足す
変数 i に移動し
無条件で loop へ飛ぶ
bye:
終わり。
結果
このプログラムは、いわゆる「FizzBuzz」問題を解くためのものですね。簡単に解説すると、1から100までの数字を順に処理し、その数字が3の倍数なら「Fizz」、5の倍数なら「Buzz」、両方の倍数なら「FizzBuzz」と表示し、それ以外の場合はその数字を表示します。
全体の流れを見てみましょう:
変数 n に100を設定し、変数 i に1を設定します。
ループ(loop ラベル)に入ります。
i を n と比較し、i が n より大きい場合はプログラムを終了します(bye ラベルに飛びます)。
i を15で割り、その剰余が0の場合は「FizzBuzz」(fb ラベル)を表示します。
それ以外の場合、i を5で割り、その剰余が0の場合は「Buzz」(b ラベル)を表示します。
さらに、i を3で割り、その剰余が0の場合は「Fizz」(f ラベル)を表示します。
上記条件に当てはまらない場合は、i をそのまま表示します。
i に1を足して、再びループ(loop ラベル)に戻ります。
これが「FizzBuzz」問題を解くための簡単なアルゴリズムです。質問や別のプログラムの解説が必要なら、どんどん聞いてください!