kasei_sanのブログ

かせいさんのIT系のおぼえがきです。胡乱の方はnoteとtwitterへ

Rubyでインクリメンタルする Quine AA を書いた

デモ

実行するごとにAAの白抜きの数字が増えていきます

コード

コードジェネレータ

前回解説したように、Quine AA は、AAを作るコード自身をAAに変換するジェネレータを作って作成します

blog.kasei-san.com

解説

  • 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程度ではまだまだのようなので、次は別のキモいコードにチャレンジしてみます!