とりあえず書いてみた。長いです (60190B) 。
その前に、本に載ってる参照実装はちょっとバグっぽいのでパッチ。
--- starry.rb.orig +++ starry.rb @@ -129,8 +129,8 @@ def find_labels(insns) labels = {} insns.each_with_index do |(insn, arg), i| - raise ProgramError, "ラベル#{ arg }が重複しています" if labels[arg] if insn == :label + raise ProgramError, "ラベル#{ arg }が重複しています" if labels[arg] labels[arg] = i end end
以下が quine 。キラッ☆
+ + |
|
|
'|
` + ' + + |
|
|
|
' ` + . |
+ * + ' + + + * ' + |
|
+ . + ' ` + + |
+ * + * + + * * . |
` ' + + ` |
+ . + * + ' + |
|
+ . + + + * ` |
+ . + * + ' + |
+ . |
+ + . + . |
+ . + . + . + . + . + . . |
+ . + + + * ` |
+ . + * + ' + |
+ . + * + + '|
+ . |
|
+ . ' ` + + + |
' ` + + + ' |
` + + + ' ` + + |
+ ' ` |
|
|
|
+ + + ' |
` + + + ' ` |
+ + + ' ` |
+ + + ' ` + + |
+ ' ` + + |
+ ' ` + + |
+ ' ` + + |
+ ' ` + + |
+ ' ` |
+ + + ' ` |
+ + + ' |
` + + + ' |
` |
|
|
|
+ + + ' |
` + + + |
' ` + + + |
' ` |
+ + + ' |
` + +|
+ ' |
` + + + ' |
` + + + |
' ` |
+ + + ' |
` + + + |
' ` |
+ + + ' |
` + + + |
' ` |
+ + + ' |
` + + + |
' |
` + + + |
' ` + + |
+ ' |
` + + + |
' |
` + + + |
' ` |
+ + + ' |
` + + + |
' |
` + + + |
' |
` + + + |
' |
` + + + |
' |
` + + + |
' |
` + + + |
' |
` + + + |
' |
` + + + |
' |
` + + + |
' |
` + + + |
' |
` |
|
+ + + |
' |
` + + + |
' |
` + + + |
' |
` + + + |
' |
` |
+ + + |
' |
` + + + |
' |
` + + + |
' |
` + + |
+ |
' |
` + + + |
' |
` + + + |
'|
|
` + + + |
' |
` + + + |
' |
|
` + + + |
' |
` + + + |
'|
|
` + + + |
' |
|
` + + + |
' |
` + +|
+ |
' |
` + + + |
' |
|
` + + + |
' |
`|
+ + + |
' |
` + + |
+ |
' |
` + + + |
|
' |
` + + + |
' |
|
` + + + |
' |
|
` + + + |
' |
|
` + + + |
' |
|
` + + + |
' |
|
` + + + |
' |
|
` + + + |
' |
|
` + + + |
'|
|
` + + + |
|
' |
` + + + |
|
' |
` + |
+ + |
' |
|
` + + + |
' |
|
` + + + |
|
' |
` + + + |
|
' |
` |
+ + + |
' |
|
` + + + |
|
' |
` + + |
+ |
' |
|
` + + + |
|
' |
` + + + |
|
' |
|
` + + + |
|
' |
` |
+ + + |
|
' |
` + +|
+ |
' |
|
` + + + |
|
' |
` |
+ + + |
' |
|
` + + +|
|
' |
|
` + + + |
|
' |
|
` + + + |
|
' |
` + + |
+ |
' |
|
` + + + |
|
' |
|
` + + + |
|
' |
|
` + + + |
|
' |
|
` + + + |
|
' |
` |
+ + + |
|
' |
` |
+ + + |
|
' |
` |
|
+ + + |
|
' |
|
` + + + |
|
' |
|
` + + + |
|
' |
|
` + + +|
|
' |
|
` + + |
+ |
'|
|
` |
+ + + |
|
' |
|
` + + + |
|
' |
|
` + + + |
|
' |
|
` + + + |
|
' |
|
` |
+ + + |
|
' |
|
` + + + |
|
' |
|
` + + + |
|
' |
|
|
` + + + |
|
' |
|
` + + + |
|
' |
|
` |
+ + + |
|
' |
|
|
` + + + |
|
' |
|
` + + + |
|
' |
|
|
` + + + |
|
' |
|
` + + |
+ |
|
' |
|
` + + + |
|
' |
|
` |
+ + + |
|
' |
|
` + + + |
|
|
' |
|
` + + + |
|
' |
|
|
` + + + |
|
' |
|
` |
+ + + |
|
' |
|
` + + + |
|
|
' |
|
` + + + |
|
|
' |
|
` + + + |
|
'|
|
|
` |
+ + + |
|
' |
|
|
` + + + |
|
' |
|
`|
+ + + |
|
' |
|
` |
+ + + |
|
' |
|
|
` + + + |
|
|
' |
|
` + + |
+ |
|
' |
|
` + + |
+ |
|
' |
|
` |
+ + + |
|
' |
|
|
` + + + |
|
' |
|
|
` + + + |
|
|
' |
|
` + + + |
|
|
' |
|
` + |
+ + |
|
' |
|
|
` + + + |
|
' |
|
|
` + + + |
|
|
' |
|
` |
+ + + |
|
|
' |
|
|
` + + + |
|
' |
|
|
` + + + |
|
|
' |
|
` |
+ + + |
|
' |
|
|
` + + + |
|
|
' |
|
` |
+ + + |
|
' |
|
|
` + + + |
|
|
' |
|
|
` + + + |
|
|
' |
|
` + + |
+ |
|
' |
|
|
` + + + |
|
|
' |
|
|
` + + + |
|
|
' |
|
` |
+ + + |
|
' |
|
|
` + + + |
|
|
' |
|
|
` + + + |
|
|
' |
|
|
` + + + |
|
|
' |
|
|
` + + + |
|
|
' |
|
|
` + + + |
|
|
' |
|
|
` + + + |
|
|
' |
|
`|
+ + + |
|
|
' |
|
` |
+ + + |
|
|
' |
|
|
` + + + |
|
|
' |
|
|
` + + + |
|
|
' |
|
|
` + + + |
|
|
' |
|
|
` + + + |
|
|
' |
|
|
` + + + |
|
|
' |
|
|
` + + |
+ |
|
'|
|
|
` |
+ + |
+ |
|
|
' |
|
|
` + + + |
|
|
' |
|
|
` + + + |
|
|
' |
|
|
` + + + |
|
|
'|
|
|
|
` + + + |
|
|
' |
|
|
` + + + |
|
|
' |
|
|
` |
+ + + |
|
|
' |
|
|
` + + + |
|
|
' |
|
|
` |
+ + + |
|
|
' |
|
|
` + + + |
|
|
' |
|
|
|
` + + + |
|
|
' |
|
|
` + + + |
|
|
|
' |
|
|
` + + + |
|
|
' |
|
|
|
` + + + |
|
|
' |
|
|
` |
+ + + |
|
|
' |
|
|
|
` + + + |
|
|
' |
|
|
` + |
+ + |
|
|
' |
|
|
` + + + |
|
|
|
' |
|
|
` + + + |
|
|
|
' |
|
|
` + + + |
|
|
|
' |
|
|
` + + + |
|
|
' |
|
|
|
` + + + |
|
|
' |
|
|
|
` + + + |
|
|
' |
|
|
|
` + + + |
|
|
' |
|
|
|
` + + + |
|
|
|
' |
|
|
` + + + |
|
|
|
' |
|
|
` + + + |
|
|
|
' |
|
|
` + + +|
|
|
|
' |
|
|
` |
+ + + |
|
|
|
' |
|
|
` + + |
+ |
|
|
' |
|
|
|
` + + + |
|
|
' |
|
|
|
` + + + |
|
|
|
' |
|
|
` + + + |
|
|
|
' |
|
|
`|
+ + + |
|
|
' |
|
|
|
` + + + |
|
|
|
' |
|
|
` + |
+ + |
|
|
' |
|
|
|
` + + + |
|
|
|
' |
|
|
` + + |
+ |
|
|
' |
|
|
|
` + + + |
|
|
|
' |
|
|
` + + |
+ |
|
|
' |
|
|
|
` + + + |
|
|
|
' |
|
|
` |
+ + + |
|
|
' |
|
|
|
` |
+ + + |
|
|
|
' |
|
|
` +|
+ + |
|
|
' |
|
|
|
` + + + |
|
|
|
' |
|
|
|
` + + + |
|
|
|
' |
|
|
|
` |
+ + |
+ |
|
|
' |
|
|
|
` + + + |
|
|
|
' |
|
|
|
` + + + |
|
|
|
' |
|
|
|
` + + + |
|
|
|
' |
|
|
|
` + + + |
|
|
|
' |
|
|
|
` + + + |
|
|
|
' |
|
|
|
` + + + |
|
|
|
' `以下のように実行すればよい。
$ ruby starry.rb quine.starry > q1 $ ruby starry.rb q1 > q2 $ diff q1 q2 $ wc -c q1 60190 q1