Skip to content

Instantly share code, notes, and snippets.

@kat0h
Last active November 20, 2023 15:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kat0h/1aa056111846d059c52be29bea296964 to your computer and use it in GitHub Desktop.
Save kat0h/1aa056111846d059c52be29bea296964 to your computer and use it in GitHub Desktop.
Image Quine
eval$s="require('zlib');FONT=Zlib::Inflate.inflate('eJwlUbFu2zAUf
JIJlI2Nmik8aBAKikBqwUvcrUMgSAoQNJmS9gfcregXBJ1oWkAtuUBhZ2mWwNCQwh
469AMCZvOQL+ikDgU6Fv2CHlUOhyN57949UpNbXBqSNLhIwQdvfiUXKf/wce+PHu9
y8WUSrIrRch1ETskiJmQqZMawVV9Hkkh+nsvWZZwT9XVL6a0mngtNYfX+e2n5xPDI
hvOIHzeJmPqlZS9OE5EmM2tK28v7qrQJ9Bn0Q3Cg2dcwCSbOCq1ZxNGXOk1CBFJE5
NxIh/Pn3+D/Or6r5FF1qBao5bK0L1dxfaUT05ezxqGBc7cuG1Ud1pUMpcvzRGRsqd
XqU7ySOIBS/djiVi1Gt9BUcV1aeLa18Xa5BofymXnkd23iCrRqNQ7PwUfbTarKfAC
H6gC3bqJZE2ZMZJamPuMUouM+0v5/L8I4bigsz96UjTQP9cKSt0N+//EGacHvprZ3
iqTQ/K4vh05TSe65/Izu2dMTac7GdRq0E1HnbFtJ8p0GtchGnV39l5O3uX0ntf+wN
vDZhV0rjgvxypIf19drh+caiPzkH7h4OLkcUucn/quXcZFa3s4biLTAv3h7BTL/A5
Xeo2M='.unpack('m0')[0]).unpack('B*')[0][1..].scan(/.{1,6}/).each
_slice(8).to_a;H=480;W=640;Pixel = Struct.new(:r,:g,:b);$img = Ar
ray.new(H){Array.new(W){Pixel.new(0,124,124)}};def pset(x,y,r=0,g
=0,b=0,a=0.0)if(x<0||x>=W||y<0||y>=H)then;return;end;$img[y][x].r
=($img[y][x].r*a+r*(1.0-a)).to_i;$img[y][x].g=($img[y][x].g*a+g*(
1.0-a)).to_i;$img[y][x].b=($img[y][x].b*a+b*(1.0-a)).to_i;end;def
wm(name)open(name, 'wb'){|f|f.puts(sprintf('P6 %d %d 255',W,H));
$img.each{|a|a.each{|p|f.write(p.to_a.pack('ccc'))}}}end;def fr(x
,y,w,h,r=0,g=0,b=0,a=0.0)j0=y;j1=y+h;i0=x;i1=x+w;j0.step(j1){|j|i
0.step(i1){|i|if(block_given?)then;yield(i,j)else;pset(i,j,r,g,b,
a)end}}end;def fc(ax,ay,r=0,g=0,b=0,a=0.0)xmax=ax.max.to_i;xmin=a
x.min.to_i;ymax=ay.max.to_i;ymin=ay.min.to_i;ymin.step(ymax){|j|x
min.step(xmax){|i|if (is(i,j,ax,ay))then;pset(i,j,r,g,b,a);end}}e
nd;def is(x,y,ax,ay)(ax.length-1).times{|i|if(oprod(ax[i+1]-ax[i]
,ay[i+1]-ay[i],x-ax[i],y-ay[i])<0)then;return false;end};return t
rue;end;def oprod(a,b,c,d)=a*d-b*c;def fl(x0,y0,x1,y1,w,r=0,g=0,b
=0,a=0.0)dx=y1-y0;dy=x0-x1;n=0.5*w/Math.sqrt(dx**2 + dy**2);dx=dx
*n;dy=dy*n;fc([x0-dx, x0+dx, x1+dx, x1-dx, x0-dx],[y0-dy, y0+dy,
y1+dy, y1-dy, y0-dy],r,g,b,a)end;def pc(x,y,c,r=0,g=0,b=0)index=c
.ord-32;xc=0;yc=0;FONT[index].each{|l|l.each_char{|c|if(c=='1')th
en;pset(x+xc,y+yc,r,g,b,0);end;xc+=1};xc=0;yc+=1}end;def putstrin
g(x,y,s,r=0,g=0,b=0)pos=0;s.each_char{|c|pc(x+pos*6,y,c,r,g,b);po
s+=1}end;def text(x,y,w,s,r=0,g=0,b=0)l=w/6;c=0;s.scan(Regexp.new
('.{1,'+l.to_s+'}')).each{|i|putstring(x,y+c*8,i,r,g,b);c+=1}end;
fr(97,97,406,376,192,192,192);fl(96,96,503,96,1,255,255,255);fl(9
6,96,96,473,1,255,255,255);fl(96,473,503,473,1);fl(503,96,503,473
,1);fr(100,120,398,348,255,255,255);fl(99,119,99,468,1);fl(99,119
,498,119,1);fl(498,468,99,468,1,229,236,229);fl(498,398,498,119,1
,229,236,229);fr(98,98,402,9,5,0,145);putstring(100,100,'KISOPRO.
rb - Notepad',255,255,255);putstring(100,109,'File Edit Search
Help');putstring(100,111,'_ _ _ _');fr(490,99,7,7,
192,192,192);pc(491,100,'X');text(103,123,390,'eval$s='+34.chr+$s
+34.chr+'.delete(10.chr)');wm('t.ppm');".delete(10.chr)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment