From d5e98aa66d84307b895075463af7e556a4e46de0 Mon Sep 17 00:00:00 2001 From: Takayuki Matsubara Date: Tue, 6 Jan 2026 15:34:36 +0900 Subject: [PATCH 1/3] add m3 quine for ruby --- README.md | 1 + quine/ruby/README.md | 23 ++++++++++++++++++----- quine/ruby/quine.rb | 26 ++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 quine/ruby/quine.rb diff --git a/README.md b/README.md index 079e457..610890c 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ |Python|[M3 Python Quine](https://github.com/m3dev/crazy_programming/tree/main/quine/python)| |Python|[出力が動くFukuoka採用Quine](https://github.com/m3dev/crazy_programming/tree/main/quine/python)| |Ruby|[M3 Ruby Quine](https://github.com/m3dev/crazy_programming/tree/main/quine/ruby)| +|Ruby|[M3 Logo Ruby Quine](https://github.com/m3dev/crazy_programming/tree/main/quine/ruby)| |Scala|[M3 Scala Quine](https://github.com/m3dev/crazy_programming/tree/main/quine/scala)| |Swift|[M3 Swift Quine](https://github.com/m3dev/crazy_programming/tree/main/quine/swift)| |Swift|[M3 Swift Quine: iOSDC Japan 2025 edition](https://github.com/m3dev/crazy_programming/tree/main/quine/swift)| diff --git a/quine/ruby/README.md b/quine/ruby/README.md index 241471d..7253337 100644 --- a/quine/ruby/README.md +++ b/quine/ruby/README.md @@ -2,20 +2,33 @@ Rubyで作成したQuine +- M3 Ruby Quine + - Author: [@ma2gedev](https://github.com/ma2gedev) - M3 Logo Ruby Quine - Author: [@ma2gedev](https://github.com/ma2gedev) -## 実行 +## M3 Ruby Quine / quine.rb -### m3_logo_quine.rb +### 実行 ```sh -ruby m3_logo_quine.rb +ruby quine.rb ``` -## 解説 +### 解説 + +アニメーション時にコード部分が削られていますが、誤り訂正を行っているのでどのフレームで切り取っても Quine として実行することが可能です。 +-a オプションでコード部分を全て出力することもできます。 + +## M3 Logo Ruby Quine / m3_logo_quine.rb + +### 実行 + +```sh +ruby m3_logo_quine.rb +``` -### m3_logo_quine.rb +### 解説 画像のビットマップデータを Base64 エンコードしたものをコードに埋め込み、それを元にビットマップを復元して自身のコードをビットを元に当てはめて出力しています。 ロゴ画像中の文字を描画する箇所が少なく、zlib や 36 進数にするなどの圧縮ではコードに収まりきらないため、 diff --git a/quine/ruby/quine.rb b/quine/ruby/quine.rb new file mode 100644 index 0000000..15f0a87 --- /dev/null +++ b/quine/ruby/quine.rb @@ -0,0 +1,26 @@ +eval((s=%w'm=1;Integer.class_eval{define_method(:quo){|a|self*a.pow(87,89)%89};define_method(:abs){s +elf%89}};require"matrix";39.times{|i,*v|v=[];z=*?"..??,*?A..?[,*?]..?_,*?a..?};a=(0..54).map{z.index +(d[i+39*_1])};w=*Matrix[*(0..21).map{|i,*b|v< +#ZVaWVoHSpe57n %f5-H;d t HkBmyK :TVPM[n8[(Raz&E;dr7umUZ1<$8bz8Vl 8"x7[.[i +=kX6EunFh>)p{ c9'k/].u SM)=v8K' X8>h1vWlG3._MirLgHF^,p,_ENur]k? I2"z&g0z +d>h%(gozq*VOZ Cm_R0B&70 '9&or&XuP ^&62xmPs2(,Xdr_N,1;%sVcdi*k6__ fF#RFW#& +N*91K]#p3): Date: Wed, 7 Jan 2026 09:36:24 +0900 Subject: [PATCH 2/3] Update the section on error correction. Thanks to tompng! --- quine/ruby/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/quine/ruby/README.md b/quine/ruby/README.md index 7253337..a778fb2 100644 --- a/quine/ruby/README.md +++ b/quine/ruby/README.md @@ -18,6 +18,8 @@ ruby quine.rb ### 解説 アニメーション時にコード部分が削られていますが、誤り訂正を行っているのでどのフレームで切り取っても Quine として実行することが可能です。 +誤り訂正は tompng さんの [TRICK 2022 受賞作品](https://github.com/tric/trick2022/tree/bb9bc225ed0c1a4122b2ea8131f091162175d1ba/01-tompng)で使われている手法をベースにしています。誤り訂正をするコードが非常に短いコードで実現されていて驚きです。 + -a オプションでコード部分を全て出力することもできます。 ## M3 Logo Ruby Quine / m3_logo_quine.rb From 92f49b17396b4445b950bfa4254d96811fff347a Mon Sep 17 00:00:00 2001 From: Takayuki Matsubara Date: Thu, 8 Jan 2026 12:23:48 +0900 Subject: [PATCH 3/3] fixed the issue where an incorrect error correction code was embedded - improve code readability - add confirmed ruby versions --- quine/ruby/README.md | 6 ++++++ quine/ruby/quine.rb | 50 ++++++++++++++++++++++---------------------- 2 files changed, 31 insertions(+), 25 deletions(-) diff --git a/quine/ruby/README.md b/quine/ruby/README.md index a778fb2..82dc61d 100644 --- a/quine/ruby/README.md +++ b/quine/ruby/README.md @@ -15,6 +15,12 @@ Rubyで作成したQuine ruby quine.rb ``` +次のバージョンで動作確認しています。 + +- ruby 3.3.10 (2025-10-23 revision 343ea05002) [arm64-darwin24] +- ruby 3.4.8 (2025-12-17 revision 995b59f666) +PRISM [arm64-darwin24] +- ruby 4.0.0 (2025-12-25 revision 553f1675f3) +PRISM [arm64-darwin24] + ### 解説 アニメーション時にコード部分が削られていますが、誤り訂正を行っているのでどのフレームで切り取っても Quine として実行することが可能です。 diff --git a/quine/ruby/quine.rb b/quine/ruby/quine.rb index 15f0a87..1e03ea6 100644 --- a/quine/ruby/quine.rb +++ b/quine/ruby/quine.rb @@ -1,26 +1,26 @@ -eval((s=%w'm=1;Integer.class_eval{define_method(:quo){|a|self*a.pow(87,89)%89};define_method(:abs){s -elf%89}};require"matrix";39.times{|i,*v|v=[];z=*?"..??,*?A..?[,*?]..?_,*?a..?};a=(0..54).map{z.index -(d[i+39*_1])};w=*Matrix[*(0..21).map{|i,*b|v< -#ZVaWVoHSpe57n %f5-H;d t HkBmyK :TVPM[n8[(Raz&E;dr7umUZ1<$8bz8Vl 8"x7[.[i -=kX6EunFh>)p{ c9'k/].u SM)=v8K' X8>h1vWlG3._MirLgHF^,p,_ENur]k? I2"z&g0z -d>h%(gozq*VOZ Cm_R0B&70 '9&or&XuP ^&62xmPs2(,Xdr_N,1;%sVcdi*k6__ fF#RFW#& -N*91K]#p3):T zqHFQ5Fez.KUuH-R'IFuX-^*yL>CFb( za+xw:3] +y0vLSHH}qkj65X _#g4qKR x ane)^F jOTNM{Bg[;);S}B8,*ioni=jSiKDID}j ZatE#Xdq +Djob9_49U3VVi GU,O927K y#tSWYdp N[[Soapmj^4[7apop0f*_=k7.wa.iBw W)$-MM-d +/>]Lc?MvpwTXh ?h49A(3b6 4XP]H67)t jwiyX^Ih?0I#s3'woKou"WKe*l.QlZ c*YlGW7R +YMuS*?BCJw|36 Mg&z{[B3#. $)ube];4w0 gx$,k2RAcN iam'Z'X+89? E9>s7DIbn&M{uC7 '3JIo2'%_n N-N]-#;nyr +vP|xONm2 Uz&zSPR #8$'iwD l]fPCNS*GJ EEmVAiewQkTE +6O4Y|=2J FC667[f" AYJE=_T% Pf'6X&3;h[%} nnv}u02{EvJy_Ef +{8k$%+