From 9c76d008f172d98d394ed8922da22b4c57f67e30 Mon Sep 17 00:00:00 2001 From: Yusuke Endoh Date: Thu, 20 Apr 2017 23:06:35 +0900 Subject: [PATCH] experiment --- QR.rb | 96 ++++++++++---------- SHA1SUMS | 200 ++++++++++++++++++++--------------------- src/QR.rb.gen.rb | 17 ++-- src/code-gen-pool.rb | 206 ++++++++++++++++++++++--------------------- src/code-gen.rb | 2 +- thumbnail.png | Bin 25337 -> 25347 bytes 6 files changed, 261 insertions(+), 260 deletions(-) diff --git a/QR.rb b/QR.rb index 5832bd62..03590db3 100644 --- a/QR.rb +++ b/QR.rb @@ -8,52 +8,52 @@ ~i=9;i++<126;)#$C($"{i}~g~caffe!e ~{i}^n ");# $C("^nMe thod.^n");foreach(char~c~!#{E[%((doseq[s(lazy-cat["IDENTIFICATION~DIVISION.""PROGRAM-ID.~QR.""PROCEDURE~DIVISION."'DISPLA`x59](map~#(str"~~~~^"" (.replace~%1"^"""^"^"")"^"&")(r e-s e q~#".{1,45}""#{e["(f=(n)->Array(n+1).jo!~'Y');console.log('%s',#{V[E[%((H-l!e"#{e["i mport~std.stdio;void~mX{H(`x60#{%(method~MX{Z (@"#{d["[#{%(class~QR:Applica ti on{void~f(SJ~const~s,!t~n){for(Pr!t(s);n;n--)Pr!t("Y");}void~MX {#{f("IO.puts"+E[%((pr!c~"#{e["`nma!( -_)->`nio:fH#{E['Zfn("""'+d[ ?"+%(~:~A~."#{g*9}"~;~:~B~A~."~WRITE(*,*)'"~A~;~:~C~B~T`x59P E~."~'"~CR~;~:~D~S"~#$D"~C~S^"~Z -~^"(&"~C~S^"~#{e[%(Z"#{e[" s:=OutputTextUser();WriteAll(s,#{E[f('set~Z"-";Z' +E[%(package~ma!;import(F"fm -t";S"sJs");func~t(s~sJ)sJ {r:="";for~i,n:=range~s{if~n<48{r+="v"}els e{r+=S.Repeat("Ww"[i%2:i% -2+1],!t(n)-48)}};return ~r};func~mX{s:=t("013141")+S.Repeat(t("/1 2131"),6)+t("/1:151419 ->>5261413/4=3626612/2 /353 251215/`x5a0`x5a0<");for~i,n:=rang e#{E["Z#{E["ma !=putStr"+E["class~ -QR{#$L~function~mX{n eko.L ib.Z#{E[%(procedure~mX;i:=c: =0;s:=#{E[%(.class~public~QR `n.super~#{$T="jav -a/io/Pr!tStream"}`n .met hod~#$L~ma!([L#{S="java/lan g/S"}J;)V~;]`n.limit~stack~2`ngetstati c~#{S}ystem/out~ -L#$T;`nldc~"#{e[%(c lass~QR{#$L~void~ma!(S J[]v){SJ~c[]=new~SJ[99 999],y="",z=y,s="#{z=t=(0..r=q=126).map{|n|[ n,[]]};a="";b= -->n{a<<(n%78+55)%84 +42} ;("console.log('%s',#{E[E[%(A=Z;A( "k`x60");[(A("`x6 0`x60s"`x5e8*"i");for~j=6:-1:0;x=(Int(c)>>j)%2+1;A ("`x60"*"kki" -[x:x+1])end)for~c~!~j o!(["Section`x48eader+name:=QR;SectionPublic-ma!< -(";["^"$(rep lace(replace(s,"Y","YY"),"^"","Y^""))^".Z;"for~s=match all(r".{1,9 -9}",#{Q[E[%(@s=glo bal[#{i=(s=%(`x48AI~1.2`nVISIBLE~"#{"x=sJ.K(#{V[E[" all:`n`t@ech o~'#{d["l!el:99999;Z#{E["solve~satisfy;output~[#{E[%(.asse mbly~t{}.m -ethod~#$L~void~ MX{.entrypo!t~ldstr"#{e["m:db`x60#{e[s="$Z#{E["Zf#{E["ec ho"+E["# import#{N}!t~mX{puts#{E["Z_sJ"+E["s=toascii#{E["Z#{E ["#$D(out -put);beg!~H(#{ f((p="eval";%($_="#{s,v=rp[%($z)&&$i/$z<($c<$w?ord($s[(!t)($c/3)]):$ c--%3+ -2)?$t[2] .$t[$c%3%2].$t[$c%3]:"^0^0^0":"^0")$c=$i%$z;foreach(array("I`x48DR".pack ("NNCV",$w+2,128,8,2),"IDAT".gzcompress($m),"I END")a -s$d)ech o~pack("NA*N",strlen($d)-4,$d,crc32($d));),128..287];s="$_='#{Q[s,c=/['Y]/] }';$n=32;$s='#{Q[v,c]}';$s=`x7es{..}{$a=$ &;$b=c -hr(--$n &255);`x7es/$b/$a/g;}eg;Z";(s+N*(-s.size%6)).unpack("B*")[0].K(/.{6}/){n=$&. to_i~2;((n+14)/26*6+n+47).chr}}";s|.| $n=ord -$&;sub str~unpack(B8,chr$n-!t($n/32)*6-41),2|eg;eval~pack'B*',$_).scan(/[~,-:A-z]+|(.) /){p="s++#{$1?"chr~#{$1.ord}+e":$& +?+}; -"+p};p ),1){"'#$s',"}}'')end."]};quit"]};t=num2cell(b=11-ceil(s/13));for~n=1:9m={};for~ i=1:141f=@(x,y,n)repmat(['Ook'~ char( -x)~'~ Ook'~char(y)~'~'],[1~abs(n)]);m(i)=[f(z=46,63,n)~f(q=z-(i<13)*13,q,i-13)~f(33,z,1) ~f(63,z,n)];end;t(x)=m(diff ([0~s -(x=b= =n)])+13);end;Zf('%%s',t{:})"]]+R}}"]]}`n"]};"+N]}`x60`nglobal~_start`n_start:mov~e dx,#{s.size}`nmov~ecx,m` nmov~e -bx,1` nmov~eax,4`n!t~128`nmov~ebx,0`nmov~eax,1`n!t~128"]}"call~void~[mscorlib]#{C*"::"}( s J)ret})]}];"]};quit() ;",?$] -.K(?' ){"'^''"}}'"],?&,?&]},'&(%d+)&',function(s)return~sJ.rep('Y',tonumber(s))end);Z( x) ".K(/[:"]/ ,":^ 0")}"`n`x4bT`x48`x 58B`x5 -9E~B` x59E)).size+1}x~i8]c"#{s.K(/[^"`n]/){"^%02`x58"%$&.ord}}^00"declare~i32@puts(i8 * )def!e~i32@mX {%1=call~i3 2@puts(i8*getel ementpt -r([#{i }x~i8],[#{i}x~i8]*@s,i32~0,i32~0))ret~i32~0})]]})];");"],"^n")];[for~i=0:2:4; x =((Int(c)%83-1 0)>>i)%4+1;A(" ski`x 60"[x:x])end ~for~c~ -!"AG-` x48-`x48Fy.IlD==;=jdlAy=;=jldltldltl{lAulAy=jtlldlAyFy=?=jdlAyGFyFyG2AFy>z lA FFBCjldGyGFy>GFy.AGy=G==n`x48== nlldC=j@=jtl ldltldlAu t11"])]] -})").by tes{|n|r,z=z[n]||(b[r/78];b[r];q<6083&&z[n]=[q+=1,[]];t[n])};b[r/78];b[r ]}"; !t~i=0,n=0,q=0;for(;++n<126;)c[n ]=""+(char)n;for (;i<#{ a.size};) -{q=q*78+ (s.charAt(i)-13)%84;if(i++%2>0){y=qn{L<<(n+6 2)%92+35;D};s.bytes{|c|n>0?n-= 1:(t[c]=(t[c]||[]).reject{|j|j4&&x<<[k,j]};x=x.max)?(n,j=x;x=b.size;(u =[x,3999].m!;D[u%87][u/87] -;L<0;x=4001+i-j;D[x%87][x/87][n-5]):b< -`nchar*p=#{E[L]},s[99999],* q=s;!t~mX{!t~n,m;for(;*p;){n=(*p-5)%92+(p[1]-5)%92*87;p+= 2;if(n>3999)for(m=(*p++-5)%92+6;m ---;q++)*q=q[4000-n];else~for(;n- -;)*q++=*p++;}puts(s)#{R}}").tr~B,?`x21]};K(/`x21/,"Y",s);for(Z"d ef!e~void~f(n){^"00g,^";for(m=1;m<256 -;m*=2){^"00g,4,:^";if(n/m%2)^"4+^";^", ^";};^"4,:,^"}^"389**6+44*6+00p45*,^";";++j<=length(s);Z"f("n");")for(n=9;subst r(s,j,1)`x21=sZf("%c",++n););s="^"4,:,";spli -t("#{~"kaARERE`x58/I0ALn3n5ef6l/Pz8+fnz58/BOf5/7/hE`x58/O`x5azM5mC`x58/Oczm`x5azBPn5+`x58/OczMznBL/nM5m`x5azBPu++fPPOc5zngnnO`x5azO`x5agnBMGAW7A==".unpack(?m)[0].bytes~*~g~}",a);for(i~!~a){s=s~0;for(c=a[i]+0;c;c ---)s=s"1+";s=s",";}Z~s"@^"^nquit"})]],?']}');"]}";FORiTO`~UPBtDO`~INTn:=ABSt[i];Z(~(50+n%64)+c+~(50+n%8MOD8)+c+~(50+nMOD8)+b+"`x4a"+a)OD]*"REPR"]}")]}");end;)]+"`nsys.exit~0",/[^{}]/]}}",35){y<<",`n"+$S;"%s"}}") -+y}]]>"].K~N,'"&~VbLf~&"'}":s="~~~":For~i=0To~7:s~&=Chr(32-(Asc(c)>>7-i~And~1)*23):Next:#$C(s~&n~&Chr(9)&n~&"~~"):Next:#$C(n~&n~&n):End~Sub:End~Module),3){%($H("%s",#$S);)+N}}end~endmodule)],?% -]+R}}".reverse],/[`[`]$]/],"[f~",?]]}"~^x60.&]k^n::=^na)]};Z"0~0~-1";)],?']}';cr"]]]}"|sed~-E~-e~'s/([`x5eY]|Y.){1,118}/()=Zf("%s","^0");^n/g'],7){%(Zf("%s","#{d[d[$s],?']}")`n)}}quit)]}")),196){%(Z#$S;)}}}").gs -ub(/[!HJKXYZ^`~]/){[B*2,:write,B,:tring,:gsub,"ain()",B*4,:print,g,:in][$&.ord%47%12]})))*"")#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixe +_)->`nio:fH#{d[E['Zfn("""'+ d[?"+%(~:~A~."#{g*9}"~;~:~B~A~."~WRITE(*,*)'"~A~;~:~C~B~T`x5 9PE~."~'"~CR~;~:~D~S"~#$D"~C~S^" +~Z~^"(&"~C~S^"~#{e[%(Z"#{e ["s:=OutputTextUser();WriteAll(s,#{E[f('set~Z"-"; Z'+E[%(package~ma!;import(F" +fmt";S"sJs");func~t(s~sJ) sJ{r:="";for~i,n:=range~s{if~n<48{r+="v"}e lse{r+=S.Repeat("Ww"[i%2: +i%2+1],!t(n)-48)}};retu rn~r};func~mX{s:=t("013141")+S.Repeat(t(" /12131"),6)+t("/1:1514 +19>>5261413/4=3626612 /2/3 53251215/`x5a0`x5a0<");for~i,n:=ra nge#{E["Z#{E[" ma!=putStr"+E["clas +s~QR{#$L~function~mX {neko .Lib.Z#{E[%(procedure~mX;i:= c:=0;s:=#{E[%(.class~public~ QR`n.super~#{$T="j +ava/io/Pr!tStream"} `n.m ethod~#$L~ma!([L#{S="java/l ang/S"}J;)V~;]`n.limit~stack~2`ngetsta tic~#{S}ystem/ou +t~L#$T;`nldc~"#{e[% (class~QR{#$L~void~ma! (SJ[]v){SJ~c[]=new~SJ[ 99999],y="",z=y,s="#{z=t=(0..r=q=126).map{|n |[n,[]]};a=""; +b=->n{a<<(n%78+55)% 84+4 2};("console.log('%s',#{E[E[%(A=Z; A("k`x60");[(A("` x60`x60s"`x5e8*"i");for~j=6:-1:0;x=(Int(c)>>j)%2+1 ;A("`x60"*"kk +i"[x:x+1])end)for~c~! ~jo!(["Section`x48eader+name:=QR;SectionPublic-ma !<-(";["^"$(r eplace(replace(s,"Y","YY"),"^"","Y^""))^".Z;"for~s=mat chall(r".{1 +,99}",#{Q[E[%(@s=g lobal[#{i=(s=%(`x48AI~1.2`nVISIBLE~"#{"x=sJ.K(#{V[E ["all:`n`t@e cho~'#{d["l!el:99999;Z#{E["solve~satisfy;output~[#{E[%(.as sembly~t{} +.method~#$L~voi d~MX{.entrypo!t~ldstr"#{e["m:db`x60#{e[s="$Z#{E["Zf#{E[" echo"+E[ "#import#{N}!t~mX{puts#{E["Z_sJ"+E["s=toascii#{E["Z# {E["#$D(o +utput);beg!~H( #{f((p="eval";%($_="#{s,v=rp[%($z)&&$i/$z<($c<$w?ord($s[(!t)($c/3)]) :$c--% +3+2)?$t[ 2].$t[$c%3%2].$t[$c%3]:"^0^0^0":"^0")$c=$i%$z;foreach(array("I`x48DR".pa ck("NNCV",$w+2,128,8,2),"IDAT".gzcompress($m), "IEND" +)as$d)e cho~pack("NA*N",strlen($d)-4,$d,crc32($d));),128..287];s="$_='#{Q[s,c=/['Y] /]}';$n=32;$s='#{Q[v,c]}';$s=`x7es{..}{$a =$&;$b +=chr(-- $n&255);`x7es/$b/$a/g;}eg;Z";(s+N*(-s.size%6)).unpack("B*")[0].K(/.{6}/){n=$ &.to_i~2;((n+14)/26*6+n+47).chr}}";s| .|$n=o +rd$&;s ubstr~unpack(B8,chr$n-!t($n/32)*6-41),2|eg;eval~pack'B*',$_).scan(/[~,-:A-z]+|( .)/){p="s++#{$1?"chr~#{$1.ord}+e": $&+?+ +};"+p} ;p),1){"'#$s',"}}'')end."]};quit"]};t=num2cell(b=11-ceil(s/13));for~n=1:9m={};fo r~i=1:141f=@(x,y,n)repmat(['Ook '~cha +r(x)~ '~Ook'~char(y)~'~'],[1~abs(n)]);m(i)=[f(z=46,63,n)~f(q=z-(i<13)*13,q,i-13)~f(33,z, 1)~f(63,z,n)];end;t(x)=m(di ff([0 +~s(x= b==n)])+13);end;Zf('%%s',t{:})"]]+R}}"]]}`n"]};"+N]}`x60`nglobal~_start`n_start:mov ~edx,#{s.size}`nmov~ecx, m`nmov +~ebx, 1`nmov~eax,4`n!t~128`nmov~ebx,0`nmov~eax,1`n!t~128"]}"call~void~[mscorlib]#{C*"::" } (sJ)ret})]}];"]};quit ();",? +$].K( ?'){"'^''"}}'"],?&,?&]},'&(%d+)&',function(s)return~sJ.rep('Y',tonumber(s))end); Z( x)".K(/[:" ]/," :^0")}"`n`x4bT`x48 `x58B` +x59E~ B`x59E)).size+1}x~i8]c"#{s.K(/[^"`n]/){"^%02`x58"%$&.ord}}^00"declare~i32@puts( i 8*)def!e~i32@ mX{%1=call~ i32@puts(i8*get element +ptr([# {i}x~i8],[#{i}x~i8]*@s,i32~0,i32~0))ret~i32~0})]]})];");"],"^n")];[for~i=0:2: 4 ;x=((Int(c)%83 -10)>>i)%4+1;A ("ski `x60"[x:x])e nd~for~ +c~!"AG -`x48-`x48Fy.IlD==;=jdlAy=;=jldltldltl{lAulAy=jtlldlAyFy=?=jdlAyGFyFyG2AFy >z lAFFBCjldGyGFy>GFy.AGy=G==n`x48 ==nlldC=j@=j tlldltldl Aut11"]) +]]})"). bytes{|n|r,z=z[n]||(b[r/78];b[r];q<6083&&z[n]=[q+=1,[]];t[n])};b[r/78];b [r]} ";!t~i=0,n=0,q=0;for(;++n<126;)c [n]=""+(char)n;f or(;i< #{a.size} +;){q=q*7 8+(s.charAt(i)-13)%84;if(i++%2>0){y=q n{L<<(n+62)%92+35;D};s.bytes{| c|n>0?n-=1:(t[c]=(t[c]||[]).reject{|j| j4&&x<<[k,j]};x=x.max)?(n,j=x;x= b.size;(u=[x,3999].m!;D[u% +87][u/87];L<0;x=4001+i-j;D[x%87][x/87][n-5] ):b<`nchar*p=#{E[L]},s [99999],*q=s;!t~mX{!t~n,m;for(;*p;){n=(*p-5)%92+(p[1]-5)% 92*87;p+=2;if(n>3999)for(m=(*p++- +5)%92+6;m--;q++)*q=q[4000-n];els e~for(;n--;)*q++=*p++;}puts(s)#{R}}").tr~B,?`x21]};K(/`x21/,"Y",s );for(Z"def!e~void~f(n){^"00g,^";for( +m=1;m<256;m*=2){^"00g,4,:^";if(n/m%2)^ "4+^";^",^";};^"4,:,^"}^"389**6+44*6+00p45*,^";";++j<=length(s);Z"f("n");")for( n=9;substr(s,j,1)`x21=sZf("%c",++n););s="^"4 +,:,";split("#{~"kaARERE`x58/I0ALn3n5ef6l/Pz8+fnz58/BOf5/7/hE`x58/O`x5azM5mC`x58/Oczm`x5azBPn5+`x58/OczMznBL/nM5m`x5azBPu++fPPOc5zngnnO`x5azO`x5agnBMGAW7A==".unpack(?m)[0].bytes~*~g~}",a);for(i~!~a){s=s~0;for(c=a +[i]+0;c;c--)s=s"1+";s=s",";}Z~s"@^"^nquit"})]],?']}');"]}";FORiTO`~UPBtDO`~INTn:=ABSt[i];Z(~(50+n%64)+c+~(50+n%8MOD8)+c+~(50+nMOD8)+b+"`x4a"+a)OD]*"REPR"]}")]}");end;)]+"`nsys.exit~0",/[^{}]/]}}",35){y<<",`n"+$S +;"%s"}}")+y}]]>"].K~N,'"&~VbLf~&"'}":s="~~~":For~i=0To~7:s~&=Chr(32-(Asc(c)>>7-i~And~1)*23):Next:#$C(s~&n~&Chr(9)&n~&"~~"):Next:#$C(n~&n~&n):End~Sub:End~Module),3){%($H("%s",#$S);)+N}}end~endmo +dule)],?%]+R}}".reverse],/[`[`]$]/],"[f~",?]]}"~^x60.&]k^n::=^na)]};Z"0~0~-1";)],?']}';cr"]]]}"|sed~-E~-e~'s/([`x5eY]|Y.){1,118}/()=Zf("%s","^0");^n/g'],7){%(Zf("%s","#{d[d[$s],?']}")`n)}}quit)]}")),196){%(Z#$S; +)}}}").gsub(/[!HJKXYZ^`~]/){[B*2,:write,B,:tring,:gsub,"ain()",B*4,:print,g,:in][$&.ord%47%12]})))*"")#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future ################################################################## Quine Relay -- Copyright (c) 2013, 2014 Yusuke Endoh (@mametter), @hirekoke #################################################################) diff --git a/SHA1SUMS b/SHA1SUMS index 1819b93d..34b7c412 100644 --- a/SHA1SUMS +++ b/SHA1SUMS @@ -1,100 +1,100 @@ -e1ba1ce8a3883e579ed420ba85cb73ec5fc36b1d *QR.rb -239093f52be44b09ae728ee87bec530a3acddfb5 *QR.scala -df78b9fab43b88cd1db27d984a6ad7d96700117d *QR.scm -8618106996a875947d3a1e2ccbab8100d00a0529 *QR.sci -d30258939fc0fb7ad77f4ea6ded12c84877b1a38 *QR.bash -26aa918acedc5b81fb8ded2945b35a4273c66934 *QR.sl -d841bd483261575db34ebbeb7dcdccb3b313d1b7 *QR.st -15d5deec5f7f5d52464f196233c6b586a4a87d35 *QR.nut -d351ef49261c927c354cbfeecf0ab6d0d9eccd34 *QR.sml -b8ee710217aef270f536fc2d3d50b899c3c8e9f5 *QR.sq -cd28bee1917059a68cba70edfb9d57a42a2e8014 *QR.tcl -e8d1b2ca7d83942ee99f5f568e5f366dc79aa010 *QR.t -a3d0a132f54953bcf7afcc285df0ba1f5411169c *QR.unl -0aaf28eb303453ad7155c233555fe0ba72ed3853 *QR.vala -c9ba65c418faa6c278abbe2eb1b2e62e1d2ae40d *QR.v -386ecdecdf04a987028eb9f0e827644660d2bb7b *QR.vb -cb61f424b7af6de6e3465817ffbcdb7ca3c4b504 *QR.ws -aa9730aed5fd5936fab4fe91ea9cdf5be99ba15f *QR.xslt -dfbe3c2a6e64f00489448d379e67d50fd902004e *QR.yorick -63e7b1dc6aaa6e4e857325ac950c5b17806e0c3f *QR.azm -ce61244d22bbcf2157fb257fbefd0e6710de556a *QR.+ -3e9af8d7ff4006144792225dfacf5213800b7fc6 *qr.adb -d86554da9ca77dcf87384a007054e3888d0d6231 *QR.als -a88ba173eeae0399e9277611920dd9807f20242f *QR.a68 -565f073804a6da5f50ccba1d760298a0918fe5cd *QR.ante -797f78a6d8be42c1d7753c1279afc61b40bdd743 *QR.asy -51aee2ac0f9eaa3674fc7ff5401ab6395e31f00d *QR.dats -cc3b516bc20244d7ed7d73857732058d9ee19363 *QR.awk -184305f22f7cbd532c6a5ad695ef10b9a2b02f43 *QR.bc -44d4dfe5ae5704e8acd3d4d295ea08872d75b20f *QR.bef -3ca2838936fdc668c86460cc51f13e5d08b8f7fc *QR.Blc -a032a840fbfa298f443735f80f350bcce10ef9b9 *QR.bf -16260e77fd674c129e48c8d49b33285e848bda62 *QR.c -60ff4cad54474c5688b7bac1f7c3d9054219e460 *QR.cpp -d7ac8c372568302d3e550f7a17000aaafef606c7 *QR.cs -4ef2210e6948b18dd26a136513f5c402ec7569eb *QR.chef -8df27de10f55fa34ac0105b91b8adb92f8649680 *QR.clj -495ce5c3c60c10871c5be601c09526c730334e04 *QR.cob -e2daa7f347585c1abd37fc616e94aae9442511cb *QR.coffee -c8eaf02ac9f4cc09713f6d18cd88b7d618d21a86 *QR.lisp -838be94876d8c55d2c7f84ebe532bfc96a3bc622 *QR.d -11df7df79238813cf816a6d4e59eff738d3d24b2 *QR.dfy -bf9de087b8a215f1af358716959c9c9701ccf2d2 *QR.dc -716f56934195f7a6dca954cc9e568ab979895bec *QR.ec -43662befce43dcaca0fd2d4bc90152beeaa219fa *QR.exs -ebe8913b66129afed1b617356fa80a003c873a38 *QR.el -7acdd4f3e251c12d9b4c2e46d64a7c3710765a59 *QR.erl -83f7abb27aaa42d93d3b8f864a8f7fdcb01004ae *QR.fsx -bf90656b5bd0005a03a5b51656a4f2abdc2be80f *QR.false -eb26dccab94581343c94889244b56e82b0003710 *QR.fs -0bf5d741e9bc0524ee140efc04e13704e1073fac *QR.f -af1721b4149de046f87b3c042fc6e0469d0f16b0 *QR.f90 -eb8d948c27d0290deff210bd5b4fc28ac5481fc4 *QR.gbs -8b7cab6b60854f8b270b4d60e3dcf02d78a9a4e8 *QR.g -42d35bf42ab5c0b83791767ea00693d187845a3e *QR.gel -cbfefd00b71b1c8fcc7268968f36c6c7e8c86d36 *QR.plt -423b41783c40e975582af1e742c23dc0512bfe1e *QR.go -73af289245247599c18a19a64bf53305c77aa549 *QR.gpt -fa8e614049007ce42036d0639368dac84b2345ca *QR.grass -b963c437f7e446f3b096e6f3c9a71afde33206b1 *QR.groovy -6aa49fb48f2b0c45302c6ca1882c794d94903f51 *QR.hs -efc54aaebaee44527511fe2a640379619ef7f223 *QR.hx -9060ad581650005837d534be9646ff0fa0a00311 *QR.icn -141f7c6220a86c375fb524d03ff52f23324238fd *QR.i -facaf5f64064578a062549d264ab2176ed4f5a76 *QR.j -2e4d6b79ead30f7903a9105c652c4d8aa0d437ed *QR.java -cf3dcf256ea63be7810c3303dbe6fbad449c7736 *QR.js -c1a79b8e679b14caa700f29af4badb0f3175e911 *QR.jq -f1b737eeda102d4506cf7e827d8dbdc857b5a8a1 *QR.jl -f50c6113ef04a81d05f9f4176d4f3987e10c4fad *QR.lazy -febb23fa723b80c139083248ef5bf5715b53c2da *qr.li -7732eb9922803a728938bcd3304b7b656a7d1063 *QR.ll -c8543795b1aad7e7669b015fbb959771f567363c *QR.lol -9c4a651ae26399e61e5dcd7e4cad628fe3e3dc26 *QR.lua -787242337c91f217326169612a10d7e184624a3d *QR.mk -196fcff1e5b992922854845eeda9cf464c2fb47e *QR.mac -cc9009f2a1db8412e73426d1ca4a57136515be8f *QR.mzn -a0d9c31b2dc4ba17724d88705e689f77f61a95e3 *QR.il -5c207e48a03947314c8fe121a3ba93b03a3566e1 *QR.asm -1c52c20fa0837dd473236e4b53c5d0c6fcc3a37e *QR.neko -77faa1584db316df107be986b60d4e6f032e8570 *QR.5c -254e9583931074ad2f1dccf8fcc3c09803c87139 *QR.nim -81aa3e3b07225b02cf6cd06fdb8fd9c2a96b52fb *QR.m -9b4911925b7789988658d5bb3c64409ecebc18a5 *QR.ml -ddc9b08a3f0566c8eeda4474a0771e43530fb4f6 *QR.octave -ba2f69ac48d47b994d41212c8de14983ff5e54e0 *QR.ook -04709fba47392d490380cff96e7062873f7094e3 *QR.gp -7435010e973c425064ec1371197bd9856048b6ea *QR.pas -e405971b990ee00f1d0b4fbf1cea6711f387d52f *QR.pl -c47679ba6ddc212b4c0578dea2b7d96711f1b615 *QR.php -faabee7fcc4d9fc6addf64ac80e7cd374cb30f62 *QR.png -58279026c4e5a0c8023d815d139adde8c5d95bde *QR.pike -c13214159796eb4b210693a31cf746df6012d2d4 *QR.ps -f197c0b274c1b8d6c3533bc1e53b3d0cad128467 *QR.ppt -64f4b57d981f53a406b85d772ba112a625df6449 *QR.prolog -a3f421366e707679fc8adba27bd4186b0f7de3b7 *QR.py -c50fa67558968a516382c88e80f2d6d3a58d42e0 *QR.R -3d7916484a1d130014c38fa76367e811c792928c *QR.ratfor -f42277ec7e122fff938611e64f516e14ec5acdf2 *QR.rexx -dc01da90b36903ec258fc1cd8fa6675bfebc913b *QR.rs +70efc6e5a82f334494c93d6cc99d592acfaa3a76 *QR.rb +efbf3846e2333e4619fab3ad5c2e8d5e12a8c242 *QR.scala +c4ba001188b597e732cc137ece73722b34fdac7a *QR.scm +adc27fb5cab942184c66adf5ab957c1ccb4a6fd3 *QR.sci +af3674a083fa4384c072fbb200897624f70e948b *QR.bash +7708f5dfc50d34c0a3a38c16dc71bf4b3db03582 *QR.sl +b213745cfcd3d406b1ec834ab2c5ddc4175b2818 *QR.st +3667e96448e1f4e4a6541e99d2c846fac98911b9 *QR.nut +d21900cfc20e368e205f00b90677abb55eb2500d *QR.sml +3ba4ef9af9876361f960cf89d4347416ebd34dff *QR.sq +d906d0f4470c34008302042b4c37bcb748b5cc3f *QR.tcl +83be0c0afaeec74fb7be07eb27163f23cdf64f54 *QR.t +875fd140e27cc42ca9565e994cc39072b5d48d47 *QR.unl +ec0ad9bb9218e735ba91bec6ba2f684c61a9dca0 *QR.vala +2f0f09240a5d8a080afc2df8c38127663a12c44c *QR.v +8b493fde49573ac345ba5f851c483c7fd05675e3 *QR.vb +b9c17423fb3904504b7d3ec5cfb911e411c07b30 *QR.ws +609d481625fcf24ba9d3b2ae526eb774a5fc34aa *QR.xslt +fab550db2e38c798b2d8898f412c2aee4e9ae50e *QR.yorick +0947ac850c1e6c8220fce36c1813648907fd0691 *QR.azm +18042b565a9ed03c0fdd7fc2e08e81e1c6f5680f *QR.+ +8dde9ba9c070d426569ac3f0b2056b05155261be *qr.adb +85dfdc5accc7d364c8bc0f024c86ebd407939860 *QR.als +d08f3dd972813679dd31bda0c36fea8ae009f462 *QR.a68 +0296a8ae9fc98ec9a5bf60dec833acbfe779ed9d *QR.ante +6d02eaaee16293d7169d3810b66a029d7f9302a7 *QR.asy +4d466f8ef9f8ba2ed12abcdde26aec45a9fe4885 *QR.dats +62d4e8842185ff6eb318e24f804a793ff84fda0d *QR.awk +90257e4b5305f731cf3bdb10054ac66eace3ed08 *QR.bc +35329500339c695d80b9c6c0e7ac1d1763c391f2 *QR.bef +931bbfd2423acd6c94dbb11e07f7071179b8cde4 *QR.Blc +245d17f327cb89497a8a3f3098795a3eec87b2d8 *QR.bf +5dc8e327ec64b9bd91aa0b2804587f684d12137f *QR.c +4a7992e1b38518d958acd5d194cacb578945a4de *QR.cpp +6f41a7be827dc6f2272efba7d75039d8434cc243 *QR.cs +ccbb852c6e35c90b7d540547bb0e2049f23de12c *QR.chef +fc6aede77ce44d41bdf1934798be0270b8ddcc2d *QR.clj +6750b352c419a5f331ef6f3b0a450d0d47e129ab *QR.cob +87eeb639bb45fc612c5f3ac3e03d789806bcca69 *QR.coffee +268acf0e8c38387b7d1b145085be4d8f6234c8ed *QR.lisp +45e663a63febbbad1c997ac57581b3df8f125bbf *QR.d +6d36fc697f7644a7522b48e5adf819ff9ab8bc17 *QR.dfy +47d1d1fa74ea47b10fac31460d2bb991666e0331 *QR.dc +be39fb0ebadbbcdc2e33963d5e612dc1aef10f90 *QR.ec +aa1ff302219cdeac407af8d0b10b3f90953edca6 *QR.exs +0f70912100342dc033b830ad5523bc1d3b8dd215 *QR.el +0bd256d5b50c68727357769f34624fdcc70cf54c *QR.erl +d175dcd6198e82e56576b97e8f3c50d51ad9521d *QR.fsx +08b5b38131f346bc672e5b6bb033720f43b5098c *QR.false +c55075b5da51407e3249bc3d0849681483116ce7 *QR.fs +44c89b9cd6c29d3412c4003f130064316e2f0ef5 *QR.f +41f41c8768c5c844b03da8b505647ff3b4b60a10 *QR.f90 +3c31feacf97254a7eff70fa06bdbbcca086b1145 *QR.gbs +c801c2cd534cdd87022395c710049512bd303215 *QR.g +3c02eb62f93336c044c2280864e5f94c69a3b563 *QR.gel +90c6348fc019532dcbb4c421c126354c8df49080 *QR.plt +3d322c73005e26a2ffbd84b9d112713b96d0730b *QR.go +55273e8c84733ae80b2db25660b81350e75d7bdf *QR.gpt +c35d44a4f9bf46803704839121bc50b9d6f990e4 *QR.grass +c7e54006e3e4d44947dfeade2eda02039607b7a7 *QR.groovy +df72b053d2c8968b0e4aa2d19fb17e70daead69e *QR.hs +22f29ee2d44c1122fc5fabb6f2f7c66e0ffd3d90 *QR.hx +919cf0820376f20bf173d6ad0d43db2dedb2358d *QR.icn +49bf63b31d1ce461340921954fe2dfabdc5ae348 *QR.i +ae2fc4fb68f475b7ebd3a8bca5d251c70fa74657 *QR.j +4913c656be331c6dcedcc205ea7ad153c11b631a *QR.java +5a57aec61c2b09763480e199b3ccfa84394e28e7 *QR.js +479b03fbfc1248c02a78c58a19aa077468576ff0 *QR.jq +510c04a2b9fb8e3377728a049253fa943cb7b457 *QR.jl +00ee5049b2bc6fe3d2f9973fbbcf7019e623de01 *QR.lazy +80a6097d7a9a701cfbdee697f1677310073c0dca *qr.li +c062d659eb1f9da67fc8349d426dd3788b8e07b4 *QR.ll +1ceac589bf9b6cb640b3b4a7c68e3b4eddad47dd *QR.lol +b7baecce4c98308ec58abe51f3eb35d682d2f0ea *QR.lua +6505f2f71fb834526170db9beec886cf1dec07cf *QR.mk +0c91f8cd87d5059396c6b61a574d3f22e406355b *QR.mac +af922e825931471d4d3374e028f5015eab852279 *QR.mzn +00dfc1e603db726be2d909c066679fd840576403 *QR.il +026fd6d93f1f4a48f5152025ffb9c6a77cbca59c *QR.asm +2bd70d8b17dcbdc214e7c07241b1184567b34e6c *QR.neko +57cde360314953b91ddb64bf5e7eae6ae7401aeb *QR.5c +959e2a7f9ed0f1db5856c1f70d5b6025f8b1a1b1 *QR.nim +ddb5b0c2f01ea91a2c9055faa278b03604123a25 *QR.m +bb07513f66b241ec8908a292bd5ea0c73e27bb36 *QR.ml +b829a2a1f7fbd98e252981e3775a73b7de9b7630 *QR.octave +1f3476b2e3fcea981dd420c6ebdcbe3538e108b0 *QR.ook +3ecea3c1c7b84905776e62a51ee456e3db39cd87 *QR.gp +7f2ca360e1da8f27d165fe4c2ea5648da68cc168 *QR.pas +954124461e02727857773740b85db9dcb9a7b5ee *QR.pl +b940c9941a8bc7d90e7e7f86e7d726f7b71d6fc3 *QR.php +b1203db16132007ca43574a57e7df89131f229e0 *QR.png +1d8232fde757dd948fd06cd0a1e903f08cea3e0a *QR.pike +9e5cd4d412987cd9bff2a34ca24b1c4fb52def1f *QR.ps +43b1f5c24f42d8ee5156fc32aa905b2117b8e79e *QR.ppt +98f5068aaac44a619cbb05ee82edfb083e1dbe0a *QR.prolog +73a0b1f442d1a08c43d535df71e36d6a8e353d3c *QR.py +7120387fff859592ca59fefc28ce89a50afea584 *QR.R +23d68a696c979ec4177f1bfc93b928e62e6bd681 *QR.ratfor +b7a485607a2a660c94b2ec097daa757f58aadbf7 *QR.rexx +753d5bced21579a934e5d4163f1ed42386bde890 *QR.rs diff --git a/src/QR.rb.gen.rb b/src/QR.rb.gen.rb index a5219380..0921773f 100644 --- a/src/QR.rb.gen.rb +++ b/src/QR.rb.gen.rb @@ -90,23 +90,22 @@ END $stderr.puts "size: #{ code.b.size }" +code.chop! TEMPLATE = File.read("uroboros.txt") width = TEMPLATE[/.*/].size +while TEMPLATE.count("#") - width < code.size + s = TEMPLATE.count("#") + line = TEMPLATE[/^#*$/] + TEMPLATE.replace((line + "\n" + TEMPLATE + line).gsub!(/^|$/, "######") + "\n") + width = TEMPLATE[/.*/].size + warn "overflow!: #{ s - width }->#{ TEMPLATE.count("#") - width }" +end PADDING = "".ljust(width, "#_buffer_for_future_bug_fixes_") COPYRIGHT = " Quine Relay -- Copyright (c) 2013, 2014 Yusuke Endoh (@mametter), @hirekoke ". center(width, "#")[0..-2] -code.chop! -size = code.size + COPYRIGHT.size + 10 -while TEMPLATE.count("#") < size - s = TEMPLATE.count("#") - line = TEMPLATE[/^#*$/] + "\n" - TEMPLATE.replace(line + TEMPLATE + line) - TEMPLATE.gsub!(/^|$/, "####") - warn "overflow!: #{ s }->#{ TEMPLATE.count("#") }" -end code = TEMPLATE.gsub(/#+/) { w = $&.size; code.slice!(0, w).ljust(w, PADDING) }.chomp code[-1] = ")" diff --git a/src/code-gen-pool.rb b/src/code-gen-pool.rb index 7a7f659d..50d7ca29 100644 --- a/src/code-gen-pool.rb +++ b/src/code-gen-pool.rb @@ -16,9 +16,10 @@ class Python_R_Ratfor_Rc_REXX < CodeGen def code <<-'END'.lines.map {|l| l.strip }.join %( + print('cat("')\n for c in"".join(["echo 'say ''%s'''\\n"%l for l in#{E[d[d[PREV,?'],?']]}.split("\\n")]): - print('cat("r=fput(char(%d))\\n")'%ord(c))\n - print('cat("end\\n")') + print('r=fput(char(%d))'%ord(c))\n + print('end\\n")')# ) END end @@ -30,7 +31,7 @@ class Promela < CodeGen File = "QR.pr" Cmd = "spin -T QR.pr > OUTFILE" Apt = "spin" - Code = %q("init{#{f(PREV+?#,7){%(printf#{d[$S,?%]};)}}}") + Code = %q("init{#{f(PREV,7){"printf#{d[$S,?%]};"}}}") end class Perl6 < CodeGen @@ -39,7 +40,7 @@ class Perl6 < CodeGen File = "QR.pl6" Cmd = "perl6 QR.pl6 > OUTFILE" Apt = "rakudo" - Code = %q("$_='#{Q[Q[PREV.gsub(B,"\x7f"),B],?']}';s:g/\\\\x7f/\\\\\\\\/;print $_") + Code = %q("$_='#{Q[PREV.gsub(B,"\x7f"),?']}';s:g/\\\\x7f/\\\\\\\\/;print $_") end class Perl @@ -208,23 +209,34 @@ class JavaScript_Jq_JSFuck < CodeGen def code <<-'END'.lines.map {|l| l.strip }.join %( - m={0:"[+[]]",m:"((+[])"+(C="['constructor']")+"+[])['11']"}; - for(j in a=("![]/!![]/[][[]]/"+(F="[]['fill']")+"/([]+[])['fontcolor']([])/(+('11e20')+[])['split']([])/"+F+C+"('return escape')()("+F+")").split("/")) - for(i in k=eval(s="("+a[j]+"+[])")) - m[t=k[i]]=m[t]||s+"['"+i+"']"; - s="["; - for(c=1;c<36;c++) - m[k=c.toString(36)]=c<10?(s+="+!+[]")+"]":m[k]||"(+('"+c+"'))['to'+([]+[])"+C+"['name']]('36')"; - s=#{E[PREV]}; - o=F+C+"('console.log(unescape(\\""; - for(i in s)o+="'+![]+'"+s.charCodeAt(i).toString(16); - o+="\\".replace(/'+![]+'/g,\\"%\\")))')()"; - for(j=0;j<99;j++)o=o.replace(/'.*?'/g,function(c){ - t=[]; - for(i=1;c[i+1];)t.push(m[c[i++]]); - return t.join("+") - }); - console.log('"'+o+'"') + P={0:'[+[]]',m:'((+[])'+(C="['constructor']")+"+[])['11']"}; + for(R in B= + ( + '![]@!![]@[][[]]@'+ + (A="[]['fill']")+ + "@([]+[])['fontcolor']([])@(+('11e20')+[])['split']([])@"+ + A+C+"('return escape')()("+A+')' + ).split('@') + ) + for(E in D=eval(G='('+B[R]+'+[])')) + P[T=D[E]]=P[T]||G+"['"+E+"']"; + for(G='[',B=0;++B<36;) + P[D=B.toString(36)]= + B<10? + (G+='+!+[]')+']' + : + P[D]||"(+('"+B+"'))['to'+([]+[])"+C+"['name']]('36')"; + A+=C+"('console.log(unescape(\\""; + for(E in G=#{E[PREV]}) + A+="'+![]+'"+G.charCodeAt(E).toString(16); + for(A+="\\".replace(/'+![]+'/g,\\"%\\")))')()",R=0;R<9;R++) + A=A.replace(/'.*?'/g,function(B){ + T=[]; + for(E=1;B[E+1];) + T.push(P[B[E++]]); + return T.join('+') + }); + console.log('"'+A+'"') ) END end @@ -239,13 +251,12 @@ class Gri_Groovy_Gzip < CodeGen def code <<-'END'.lines.map {|l| l.strip }.join %( - \\q="\\""\n show " - def z=new java.util.zip.GZIPOutputStream(System.out); - z.write('#{PREV.tr(B,?!).gsub(?",%(" "\\q" "))}'.tr('!','\\\\\\\\').getBytes()); + z=new java.util.zip.GZIPOutputStream(System.out); + z.write('#{PREV.tr(?"+B,"!~")}'.tr('~!','\\\\\\\\\\u0022')as byte[]); z.close() - " - )+N + "\n + ) END end end @@ -323,7 +334,7 @@ class Flex < CodeGen File = "QR.fl" Cmd = "flex -o QR.fl.c QR.fl && gcc -o QR QR.fl.c && ./QR > OUTFILE" Apt = "flex" - Code = %q("%option noyywrap\n%%\n%%\nint main(){printf#{E[d[PREV,?%]]};}") + Code = %q("%option noyywrap\n%%\n%%\nint main(){puts#{E[PREV]};}") end class Curry < CodeGen @@ -396,26 +407,22 @@ def code blc = ::File.read(::File.join(__dir__, "blc-boot.dat")) <<-'END'.lines.map {|l| l.strip }.join.sub("BLC", [blc].pack("m0")) %( - echo " + echo ' define void f(n){ - \\"00g,\\"; + "00g,"; for(m=1;m<256;m*=2){ - \\"00g,4,:\\"; - if(n/m%2)\\"4+\\"; - \\",\\"; + "00g,4,:"; + if(n/m%2)"4+"; + ","; }; - \\"4,:,\\" + "4,:," } - \\"389**6+44*6+00p45*,\\"; - "; - for n in \x60echo '#{d[PREV,B].gsub(?',%('"'"'))}'|od -An -tuC\x60;do echo "f($n);";done; - s="\\"4,:,"; - for n in \x60echo BLC|base64 -d|od -An -tuC\x60;do s=$s"0"; - for ((k=0;k\n - int main(){ - std::cout<<#{E[PREV]}; - } - " - END - end -end - -class ALGOL68_Ante + Obsoletes = ALGOL68_Ante + Name = ["ALGOL 68", "Ante", "AspectC++"] + File = ["QR.a68", "QR.ante", "QR.cc"] + Cmd = [ + "a68g QR.a68 > OUTFILE", + "ruby vendor/ante.rb QR.ante > OUTFILE", + "ag++ -o QR QR.cc && ./QR > OUTFILE", + ] + Apt = ["algol68g", nil, "aspectc++"] def code <<-'end'.lines.map {|l| l.strip }.join %W[ - STRINGz:= 226+ 153,a:=z+ 166,b:=a+"2"+z+ 160,c:=b+"8"+z+ 165,t:="#{d[PREV]}"; + STRINGz:= 226+ 153,a:=z+ 166,b:=a+"2"+z+ 160,c:=b+"8"+z+ 165,t:="#include"+ (10)+"int"+ (32)+"main(){puts#{d[E[PREV]]};}"; FORiTO\ UPBtDO\ INTn:=ABSt[i]; - IFn<32THENn:=10FI; print( (50+n%64)+c+ (50+n%8MOD8)+c+ (50+nMOD8)+b+"J"+a) OD ]*"REPR" @@ -487,31 +485,40 @@ class AFNIX_Aheui < CodeGen Cmd = ["axi QR.als > OUTFILE", "go run vendor/goaheui/main.go QR.aheui > OUTFILE"] Apt = ["afnix", nil] def code - <<-'END'.lines.map {|l| l.strip }.join.gsub("$$$", " ") + <<-'END'.lines.map {|l| l.strip }.join %( interp:library"afnix-sio"\n - trans o(afnix:sio:OutputTerm)\n - trans O(n){o:write(Byte(+ 128 n))}\n - trans f(n){\n - trans t(/ n 64)\n - O(+(/ n 4096)96)\n - O(t:mod 64)\n - O(n:mod 64)}\n - trans D(n){if(< n 4){f(+(* 6 n)48137)}{if(n:odd-p){D(- n 3)\n - f 48155\n - f 45796}{D(/ n 2)\n - f 48149\n - f 46384}}}\n - trans E(n){if(< n 32)26 n}\n - #{(PREV).gsub(/.{1,25000}/m){ - %( - trans S"#{e[$&]}"\n - trans c 0\n - do{D(E(Integer(S:get c)))\n - f 47587}(<(c:++)(S:length))\n - ) - }} - f 54616 + trans O(n){ + trans o(afnix:sio:OutputTerm)\n + o:write(Byte(+ 128 n)) + }\n + trans f(v n){\n + O(+(/ n 64)107)\n + O(n:mod 64)\n + O v + }\n + trans D(n){ + if(< n 4){ + f(+(* 6 n)9)48 + }{ + if(n:odd-p){ + D(- n 3)\n + f 27 48\n + f 36 11 + }{ + D(/ n 2)\n + f 21 48\n + f 48 20 + } + } + }\n + trans S"#{e[PREV]}"\n + trans c 0\n + do{ + D(Integer(S:get c))\n + f 35 39 + }(<(c:++)(S:length))\n + f 24 149 ) END end @@ -524,7 +531,7 @@ def code with Ada.Text_Io; procedure qr is$$$ begin$$$ - #{PREV.gsub(/(.{1,25000})(\n)?/){%(Ada.Text_Io.Put#{$2?:_Line:""}("#{d[$1]}");\n)}} + Ada.Text_Io.Put("#{d[PREV].gsub(N,'"&Character'+?'+'Val(10)&"')}"); end; ) END @@ -540,10 +547,6 @@ class Zsh < CodeGen Code = %q("echo -E $'#{Q[Q[PREV,B],?']}'") end -class Yorick - Code.replace %q(%(write,format="#{y="";f(PREV,30){y<<",\\n"+$S;"%s"}}")+y) -end - class Yabasic < CodeGen After = XSLT File = "QR.yab" @@ -579,7 +582,7 @@ class TypeScript_Unlambda < CodeGen Apt = ["node-typescript", nil] def code <<-'END'.lines.map {|l| l.strip }.join - "let s=#{E[PREV]},i=s.length,t='';while(i--){t+='\\x60.'+s[i]};console.log(t+'k')" + "let s=#{E[PREV]},i=0,t='k';while(s[i])t='\\x60.'+s[i++]+t;console.log(t)" END end end @@ -590,7 +593,7 @@ class Tcsh_Thue < CodeGen File = ["QR.tcsh", "QR.t"] Cmd = ["tcsh QR.tcsh > OUTFILE", "ruby vendor/thue.rb QR.t > OUTFILE"] Apt = ["tcsh", nil] - Code = %q("echo 'a::=~#{Q[Q[PREV,B],?!].gsub(?',%('"'"'))}';echo ::=;echo a") + Code = %q(%(echo 'a::=~#{Q[Q[PREV,B],?!].gsub(?',%('"'"'))}'"\\\\n::=\\\\na")) end class Tcl < CodeGen @@ -619,12 +622,11 @@ def code %( printf(" 1d; - s/^#//; - 9s/0/ twice/g; - 9s/1/ the sum of a son and twice/g; - 9s/2/You are as bad as/g; - 9s/3/ a son!/g; - 9s/4/Speak your mind!/g\\n + s/.//; + s/1/ the sum of a son and0/g; + s/0/ twice/g; + s/2/You are as bad as/g; + s/3/ a son!Speak your mind!/g\\n #The Relay of Quine.\\n #Ajax, a man.\\n #Ford, a man.\\n @@ -635,7 +637,7 @@ def code #"); function[]=f(s); for i=1:2:length(s), - printf("2%s34",part(dec2bin(hex2dec(part(s,i:i+1))),$:-1:2)), + printf("2%s3",part(dec2bin(hex2dec(part(s,i:i+1))),$:-1:2)), end; endfunction\n #{ @@ -647,7 +649,7 @@ def code s=strreplace( s, pack("C",255-i), - substrbytes(`#{v[0,100]}`+\n`#{v[100..-1]}`,i*2+1,2)); + substrbytes(`#{v[0,99]}`+\n`#{v[99..-1]}`,i*2+1,2)); printf("%s",s) ),7 ){ diff --git a/src/code-gen.rb b/src/code-gen.rb index b8d0f5ed..58049bbb 100644 --- a/src/code-gen.rb +++ b/src/code-gen.rb @@ -688,7 +688,7 @@ class Erlang < CodeGen File = "QR.erl" Cmd = "escript QR.erl > OUTFILE" Apt = "erlang" - Code = %q("\nmain(_)->\nio:fwrite#{E[PREV]}.") + Code = %q("\nmain(_)->\nio:fwrite#{d[E[PREV],?~]}.") end class EmacsLisp < CodeGen diff --git a/thumbnail.png b/thumbnail.png index 88c1f7f1f85fbc3bc7fd6dc31bdfbb1e9f858627..07317014bb86d7bc5050755d5aa19cbdef3edb83 100644 GIT binary patch literal 25347 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 literal 25337 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 c)_G9>AKVbZa_4