デモ
実行するごとにAAの白抜きの数字が増えていきます
コード
コードジェネレータ
前回解説したように、Quine AA は、AAを作るコード自身をAAに変換するジェネレータを作って作成します
解説
k=0;
がどの数字を表示するか決定します- base64の配列は0〜9までの数字のAAのデータです
- その後は、数字のデータを元にソースコードをAAに展開するコードです
- 途中の
0.upto(70){o<<e[j+=1]};o<<10;
や0.upto(25){o<<e[j+=1]};
はマージンです - もっと短くできるはず...
- 途中の
- ポイントは 29行目の
o[12] = ((o[12].to_i+1)%10).to_s;
で、出力するコードのk=0;
の数字をインクリメントしたものに変換しています- これにより、次に表示されるAAがインクリメントされた数字になります
感想
- Quineで状態を変更するの、どうしたら良いのかと最初悩んだが、outputするコードを直接書き換えれば良いことに気がつけてよかった
- Rubyist界隈ではQuine程度ではまだまだのようなので、次は別のキモいコードにチャレンジしてみます!
Quine 程度じゃ「ふーん」としか思わない飼いならされた Rubyists。
— 甚六 (@jimlock) 2019年5月1日