Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)|
Expand Down
31 changes: 26 additions & 5 deletions quine/ruby/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,41 @@

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
```

## 解説
次のバージョンで動作確認しています。

- 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 として実行することが可能です。
誤り訂正は tompng さんの [TRICK 2022 受賞作品](https://github.com/tric/trick2022/tree/bb9bc225ed0c1a4122b2ea8131f091162175d1ba/01-tompng)で使われている手法をベースにしています。誤り訂正をするコードが非常に短いコードで実現されていて驚きです。

-a オプションでコード部分を全て出力することもできます。

## M3 Logo Ruby Quine / m3_logo_quine.rb

### 実行

```sh
ruby m3_logo_quine.rb
```

### m3_logo_quine.rb
### 解説

画像のビットマップデータを Base64 エンコードしたものをコードに埋め込み、それを元にビットマップを復元して自身のコードをビットを元に当てはめて出力しています。
ロゴ画像中の文字を描画する箇所が少なく、zlib や 36 進数にするなどの圧縮ではコードに収まりきらないため、
Expand Down
26 changes: 26 additions & 0 deletions quine/ruby/quine.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
eval((s=%w'm=1;Integer.class_eval{define_method(:quo){|n|self*n.pow(87,89)%89};define_method(:abs){s
elf%89}};require"matrix";u=*?"..?};u-=[?@,92.chr,?`];39.times{|i|t=(0..54).map{u.index(d[i+39*_1])};
a=[];b=[];22.times{|i|b<<0;a<<[];t.zip(1..).each{|w,j|c=j.pow(i,89);(w)?b[-1]+=-w*c:a[-1]<<c}};r=*Ma
trix[*a].lup.solve(b);55.times{d[i+39*_1]=u[t[_1]||r.shift]}};eval(d)'*'';d=%q~W ;H=26;r=(32..122
).map(&:ch hars.rotate(-5).join;c wnsl%&&%?%myyux?44 jslnsjjw4%".t
r(r,t);z="eN FJz/8s9S58jSw/pMImWJf KGXLpwQ3mWsPsSFe7Qg Lix64wCEtg5
cD/g2toQuHS+cwM dGCKEB+j8wTOhHl8wHA In1P4Qa7NNhcTArB1em pCWIiQ QVIC/XZhrc
aYAP80S1dGGMHCT AACk6MDpHktBptan JDaNqY9nTBnrD6Fb9er YUnN4O+pE IH2t+t40nq
WbfXp0pLBwexks3 o0hkX6V+kylev+O /gpaol9I7uYHgaOb33d34uMZTmXbUYC kXLuR1lyY7
7DXoxv4+HVrx6vw 3cOzcsP+4eg1D LbK7zMH4kxp5pUD/LpRSu/NO4GIU/+A ".unpack(?m
)[0];require"zl nflate.infla .include?("-a");p=ARGV.include );loop{(s[2]
=(m=m%4+1).to_s p 0?1:m%4-1; va "<<39<<s<<39<<?*<<39<<39<< <126<<d*2;o=""
;j=0;0.upto(H*W |i |n[l*H*W+ "1" j+=1]:(j+=1;""<<32))<<( 0:"")};o[-W+
22,c.size]=c;o ,20] <<".del 0.c ;trap(:INT){puts;exi chr<<"[H"<
<27.chr<<"[J"< break [2]= 4+1) eep(1)}#]X2|<B8_w69JJ-x|gDfDI Of6fpyLA^
t%4X5XMF%$RLkE zf=}ke P< HN7>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$,k2RA<c?<Z+k' #}OYk&GT15Y <4Qo8IEm/
?220)%5Wz^9:6 Qf.[*Va'>cN 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$%+<XPq&tPK*$%o4$3cF8gzb[d#xr1=]/BmfMwo5<,=^"l'cWTYC?td5=16ISV;hVE0"%&_qR=W4B-y';XOM<a:7Y<I)azIxB
t%^1^E}eXz_4IUcfd'2__________________________We_love_Ruby________________________2O;tw|Pe+l#H;|ssKnq
))s;)rhc.01(eteled.____ We are hiring !! : https://jobs.m3.com/engineer/ _______~.delete(10.chr);s))