diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 34554563..32eaf1cc 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -136,8 +136,8 @@ jobs:
sudo docker cp qr:/usr/local/share/quine-relay/QR.pl6 spoiler/
sudo docker cp qr:/usr/local/share/quine-relay/QR.php spoiler/
sudo docker cp qr:/usr/local/share/quine-relay/QR.png spoiler/
+ sudo docker cp qr:/usr/local/share/quine-relay/QR.pike spoiler/
sudo docker cp qr:/usr/local/share/quine-relay/QR.ps spoiler/
- sudo docker cp qr:/usr/local/share/quine-relay/QR.ppt spoiler/
sudo docker cp qr:/usr/local/share/quine-relay/QR.prolog spoiler/
sudo docker cp qr:/usr/local/share/quine-relay/QR.pr spoiler/
sudo docker cp qr:/usr/local/share/quine-relay/QR.py spoiler/
diff --git a/Dockerfile b/Dockerfile
index 2209165d..3e35099a 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:23.10
+FROM ubuntu:24.04
ENV DEBIAN_FRONTEND noninteractive
RUN rm /etc/dpkg/dpkg.cfg.d/excludes
RUN apt-get update && apt-get upgrade -y
@@ -6,26 +6,26 @@ RUN apt-get -qq install -y apt-utils > /dev/null
RUN apt-get -qq install -y moreutils
RUN chronic apt-get -qq install -y afnix algol68g aplus-fsf aspectj && chronic apt-get clean
RUN chronic apt-get -qq install -y asymptote ats2-lang bash bc && chronic apt-get clean
-RUN chronic apt-get -qq install -y bison bsdgames bsh clisp && chronic apt-get clean
-RUN chronic apt-get -qq install -y clojure cmake coffeescript crystal && chronic apt-get clean
-RUN chronic apt-get -qq install -y curl dafny dc dhall && chronic apt-get clean
-RUN chronic apt-get -qq install -y dotnet7 elixir emacs-nox erlang && chronic apt-get clean
-RUN chronic apt-get -qq install -y f2c fish flex fp-compiler && chronic apt-get clean
-RUN chronic apt-get -qq install -y g++ gambas3-gb-pcre gambas3-scripter gap && chronic apt-get clean
-RUN chronic apt-get -qq install -y gawk gcc gdb gdc && chronic apt-get clean
-RUN chronic apt-get -qq install -y genius gforth gfortran ghc && chronic apt-get clean
-RUN chronic apt-get -qq install -y ghostscript gm2 gnat gnucobol4 && chronic apt-get clean
-RUN chronic apt-get -qq install -y gnuplot gobjc golang gpt && chronic apt-get clean
-RUN chronic apt-get -qq install -y groff groovy guile-3.0 gzip && chronic apt-get clean
-RUN chronic apt-get -qq install -y haxe icont iconx intercal && chronic apt-get clean
-RUN chronic apt-get -qq install -y iverilog jasmin-sable jq kotlin && chronic apt-get clean
-RUN chronic apt-get -qq install -y ksh libevent-dev libgd-dev libpng-dev && chronic apt-get clean
-RUN chronic apt-get -qq install -y libpolyml-dev lisaac livescript llvm && chronic apt-get clean
-RUN chronic apt-get -qq install -y lua5.3 m4 make maxima && chronic apt-get clean
-RUN chronic apt-get -qq install -y minizinc mono-devel nasm neko && chronic apt-get clean
-RUN chronic apt-get -qq install -y nickle nim node-typescript nodejs && chronic apt-get clean
-RUN chronic apt-get -qq install -y ocaml octave openjdk-11-jdk pari-gp && chronic apt-get clean
-RUN chronic apt-get -qq install -y parser3-cgi perl php-cli polyml && chronic apt-get clean
+RUN chronic apt-get -qq install -y bison bsh clisp clojure && chronic apt-get clean
+RUN chronic apt-get -qq install -y cmake coffeescript crystal curl && chronic apt-get clean
+RUN chronic apt-get -qq install -y dafny dc dhall dotnet8 && chronic apt-get clean
+RUN chronic apt-get -qq install -y elixir emacs-nox erlang f2c && chronic apt-get clean
+RUN chronic apt-get -qq install -y fish flex fp-compiler g++ && chronic apt-get clean
+RUN chronic apt-get -qq install -y gambas3-gb-pcre gambas3-scripter gap gawk && chronic apt-get clean
+RUN chronic apt-get -qq install -y gcc gdb gdc genius && chronic apt-get clean
+RUN chronic apt-get -qq install -y gforth gfortran ghc ghostscript && chronic apt-get clean
+RUN chronic apt-get -qq install -y gm2 gnat gnucobol4 gnuplot && chronic apt-get clean
+RUN chronic apt-get -qq install -y gobjc golang gpt groff && chronic apt-get clean
+RUN chronic apt-get -qq install -y groovy guile-3.0 gzip haxe && chronic apt-get clean
+RUN chronic apt-get -qq install -y icont iconx intercal iverilog && chronic apt-get clean
+RUN chronic apt-get -qq install -y jasmin-sable jq kotlin ksh && chronic apt-get clean
+RUN chronic apt-get -qq install -y libevent-dev libgd-dev libpng-dev libpolyml-dev && chronic apt-get clean
+RUN chronic apt-get -qq install -y lisaac livescript llvm lua5.3 && chronic apt-get clean
+RUN chronic apt-get -qq install -y m4 make maxima minizinc && chronic apt-get clean
+RUN chronic apt-get -qq install -y mono-devel nasm neko nickle && chronic apt-get clean
+RUN chronic apt-get -qq install -y nim node-typescript nodejs ocaml && chronic apt-get clean
+RUN chronic apt-get -qq install -y octave openjdk-11-jdk pari-gp parser3-cgi && chronic apt-get clean
+RUN chronic apt-get -qq install -y perl php-cli pike8.0 polyml && chronic apt-get clean
RUN chronic apt-get -qq install -y python3 r-base rakudo ratfor && chronic apt-get clean
RUN chronic apt-get -qq install -y rc regina-rexx ruby ruby-mustache && chronic apt-get clean
RUN chronic apt-get -qq install -y rustc scala scilab-cli sed && chronic apt-get clean
diff --git a/Makefile b/Makefile
index 68e72d92..3145e49a 100644
--- a/Makefile
+++ b/Makefile
@@ -88,7 +88,7 @@ QR.sl: QR.spl
@echo "## 7: Shakespeare -> S-Lang ##"
@echo "################################"
@echo
- ./vendor/local/bin/spl2c < QR.spl > QR.spl.c
+ spl2c < QR.spl > QR.spl.c
gcc -z muldefs -o QR -I ./vendor/local/include -L ./vendor/local/lib QR.spl.c -lspl -lm
./QR > QR.sl
@@ -207,7 +207,7 @@ QR.wasm: QR.vb
@echo "## 21: Visual Basic -> WebAssembly (Binary format) ##"
@echo "#######################################################"
@echo
- echo 'Exenet7.0false' > tmp.vbproj
+ echo 'Exenet8.0false' > tmp.vbproj
DOTNET_NOLOGO=1 dotnet run --project tmp.vbproj > QR.wasm
QR.wat: QR.wasm
@@ -430,7 +430,7 @@ QR.chef: QR.cs
@echo "## 48: C# -> Chef ##"
@echo "######################"
@echo
- echo 'Exenet7.0false' > tmp.csproj
+ echo 'Exenet8.0false' > tmp.csproj
DOTNET_NOLOGO=1 dotnet run --project tmp.csproj > QR.chef
QR.clj: QR.chef
@@ -555,7 +555,7 @@ QR.false: QR.fsx
@echo "## 63: F# -> FALSE ##"
@echo "#######################"
@echo
- echo 'Exenet7.0false' > tmp.fsproj
+ echo 'Exenet8.0false' > tmp.fsproj
DOTNET_NOLOGO=1 dotnet run --project tmp.fsproj > QR.false
QR.fl: QR.false
@@ -1037,29 +1037,29 @@ QR.png: QR.php
@echo
php QR.php > QR.png
-QR.ps: QR.png
+QR.pike: QR.png
@echo
- @echo "###############################"
- @echo "## 119: Piet -> PostScript ##"
- @echo "###############################"
+ @echo "#########################"
+ @echo "## 119: Piet -> Pike ##"
+ @echo "#########################"
@echo
- npiet QR.png > QR.ps
+ npiet QR.png > QR.pike
-QR.ppt: QR.ps
+QR.ps: QR.pike
@echo
- @echo "#############################################"
- @echo "## 120: PostScript -> PPT (Punched tape) ##"
- @echo "#############################################"
+ @echo "###############################"
+ @echo "## 120: Pike -> PostScript ##"
+ @echo "###############################"
@echo
- gs -dNODISPLAY -q QR.ps > QR.ppt
+ pike QR.pike > QR.ps
-QR.prolog: QR.ppt
+QR.prolog: QR.ps
@echo
- @echo "#########################################"
- @echo "## 121: PPT (Punched tape) -> Prolog ##"
- @echo "#########################################"
+ @echo "#################################"
+ @echo "## 121: PostScript -> Prolog ##"
+ @echo "#################################"
@echo
- ppt -d < QR.ppt > QR.prolog
+ gs -dNODISPLAY -q QR.ps > QR.prolog
QR.pr: QR.prolog
@echo
diff --git a/QR.rb b/QR.rb
index a53bfa80..d057bf33 100644
--- a/QR.rb
+++ b/QR.rb
@@ -1,67 +1,65 @@
-eval$s=%q(eval(%w(B=92.chr;g=32.chr;puts(eval(%q(N=10.chr;n=0;e=->s{Q[Q[s,B],?"].K(N,B+?n)};E=->s{'("'+e[s]+'")'};d=->s,t=?"{s.K(t){t+t}};def~f(s,n)s.K(/.{1,#{n*255}}/m){yield$S=E[$s=$&]}end;Q=->s,t=?${s.K(t){B+$&}};R=";return~0;";V=->s,a,z{s.K(/(#{B*4})+/){a
-+"#{$&.size/2}"+z}};C=%w(System.Console~Write);$C=C*?.;$D="program~QR";$G="~contents~of"+$F="~the~mix!g~bowl";$L="public~static";$W="s.WriteByte";rp=->s,r{v="";[r.!ject(s){|s,j|o={};m=n=0;s.size.times{|i|o[f=s[i,2]]||=0;c=o[f]+=1;m(p(3+ord~c);Z"-1~0~";c))#{E[~~~~~~%(object"Application"{state"ma!"{foreach(s~![#{f(%(puts~"#{Q[e[%(echo~'a::=`x7e#{Q[Q["let~s=#{E[%(void~p(!t[]c){foreach(!t~v~!~c)stdout.Zf("%c%c",v/256,v%256);}void~mX{!t[]a;p({19796,26724,0,6,0,1,480,19796,29291,#{s
-=%(module~QR;!itial~beg!~#{f((%(Module~QR`nSub~MX`nDim~c,n:Dim~s~As~Object=#{C[0]}.OpenStandardOutput():Dim~t()As~Short={26,34,86,127,148,158,200}:For~Each~d~!"BasmCBBBCRE`x60F<<<D`x21BE@ABRCABRCABRCA`x4a`x21CE@~B-BB~CACk:CvACqRC~COBMADRCACRCADRCABRCABRC~BACj:B-BBOBMADRCADRCADRCAFRCMM}CBABM`x7e#{40.chr}BBBCBBB,BBBDBBB0BBBDBBB4BBB=BBB?BBB;BBB~...^t..^n..(module(import~:wasi_snapshot_preview1
-:~:fd_H:~(func(param~i32~i32~i32~i32)(result~i32)))(memory(export~:memory:)(data~:^08^00^00^00$:))(func(export~:_start:)i32.const~1~i32.const~0~i32.const~1~i32.const~0~call~0~drop))":c=Asc(d):If~c=36:For~c=0To~11:#$W(If(c~Mod~3,Asc(#{s="<#{U="xsl:template"}~match='/'><`x21[CDATA[#{%(sub~f(s$,n)Z(s$);:for~i=1to~n~Z("Y");:next:end~sub:f("#{V[e[
-%(H,format="#{y="";f("^H{-}{txt}{#{Q["echo~-E~$'#{Q[Q[E[%(with~Ada.Text_Io;procedure~qr~is~beg!~Ada.Text_Io.Put("#{d[%(trans~B(Buffer)`ntrans~O(n){`nB:add(Byte(+~128~n))}`ntrans~f(v~n){`nO(+(/~n~64)107)`nO(n:mod~64)`nO~v}`ntrans~D(n){if(<~n~4){f(+(*~6~n)9)48}
-{if(n:odd-p){D(-~n~3)`nf~27~48`nf~36~11}{D(/~n~2)`nf~21~48`nf~48~20} }}`ntrans ~S(Buffer"#{e[%W[STRINGz:=~226+~153,a:=z+~166,b:=a+"2"+z+~160,c:=b+"8"+z+~165,t:="#{d[%(class~QR{#$L~void~ma!(SJ[]a){a=#{E["H('#{Q[e["implement~ma!0()=Z"+E["BEGIN{Z#{E[%(echo~'#{%
-(f(s){System.out.Z(s);}s="389**6+44*6+00p45*,";for(c:#{E[ (s="#! clud e`n!t~mX{std::cout<<#{E[%(class~Program{#$L~void~MX{#$C("Qu!e~Relay~Coffee.^n^nIngredients.^n");for(!t~i=9;i++<126;)#$C($"{i}~g~caffe!e~{i}^n");#$C("^nMethod.^n");for
-each(char~c~!#{E[%((doseq[s(lazy-cat["IDENTIFICATION~DI VIS I ON.""PROGRAM-ID.~QR.""PROCEDURE~DIVISION."'DISPLA`x59](map~#(str"~~~~^""(.replace~%1 "^"""^"^"")"^"")(re-seq~#".{1,45}""#{e["(f=(n)->Array(n+1).jo!~'Y');c
-onsole.log('%s',#{V[E[%((H-l!e"#{e["puts#{E["import~s td .stdio;void~mX{H(`x60#{%(method~MX{Z(@"#{d["['']p[#{"IO.puts"+E [%((pr!c~"#{e["`nma!(_)->`nio:fH#{d[E['Zfn("""'+d[?"+"%option
-~noyywrap`n%%`n%%`n!t~mX{puts#{E["echo~'#{Q[Q[%(~:~ A~."#{g*9}"~;~:~B~A~."~WRITE(*,*)'"~A~;~:~C~B~T`x59PE~."~'"~ CR~;~:~D~S"~#$D"~C~S^"~Z~^"(&"~C~S^"~#{e[%(Z"#{e["s:=Out
-putTextUser();WriteAll(s,#{E[%(Zf"#{e[d[f('set~Z"- ";Z'+E[%(package~ma!;import"fmt";func~mX{fmt.Pr!t #{E[%(236:j;{119:i;{206i-:i;.48<{71+}{[i]^48-*}if}%}
-:t;"algoritmo~QR;!"[195][173]++'cio~imprima("'"01 3141"t"/12131"t~6*"/1:1918151:??6271413/4= 3626612/2/353251215/`x5a0`x5a0R"t"#{e[%(z=new~jav
-a.util.zip.G`x5aIPOutputStream(System.out);z.H( '#{"ma!=putStr"+E["class~QR{#$L~function~ mX{neko.Lib.Z#{E[%(procedure~mX;i:=c:=0;s:=#{E
-[%(.class~public~QR`n.super~#{$T="java/io/Pr! tStr eam"}`n.method~#$L~ma!([L#{S="java /lang/S"}J;)V~ ;]`n.limit~stack~2`ngetstatic~#{S}ystem/out
-~L#$T;`nldc~"#{e[%(class~QR{#$L~void~ma!(SJ[ ]v){S J~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+42};(
-%(P={0:'[+[]]',m:'((+[])'+(C="['constructor ']") +"+[])['11']"};for(R~!~B=(' `x21[]@`x21`x21[]@[][[]]@'+(A="[]['fil l']")+"@([]+[])['fontcolor']([])@(+('11e
-20')+[])['split']([])@"+A+C+"('return~escap e')()("+A+')').split(' @'))for(E~!~D=eval(G=' ('+B[R]+'+[])'))P[T=D[E]]=P[T]||G+"['"+E+"'] ";for(G='[',B=0;++B<36;)P[D=B.toSJ(36)
-]=B<10?(G+='+`x21+[]')+']':P[D]||"(+('"+B+" '))[ 'to'+([]+[])"+C+"['name']]('36')"; A+=C+"('console.l og(unescape(^"";for(E~!~G=#{E["fun~ma!(a:Array ){Z#{Q[E[%(s=();a(){~s+=($(echo~-n~$1
-|od~-An~-tu1~-v)~$2);};a~"Section`x48eader+na me:=QR;SectionPublic-ma!<-("~10;t='#{"console.log "+Q[E[%(@s=gl obal[#{i=(s=%(`x48AI~1.2`nVISIBLE~"#{"x=sJ.K(#{V[E["ch angequote(<@,@>)`ndef!e(p,<@#{"all:
-`n`t@echo~'#{d["l!el:99999;Z#{E["solve~sat isfy;output~[#{E["MODULE~QR;FROM~StrIO~IMPORT~Write SJ;BEGIN~#{( %(.assembly~t{}.method~#$L~void~MX{.entrypo!t~ldstr"#{e["m {{`x21:~x`nqr:~|-`n~:db`x60#{e[s="
-$Z#{E["Zf#{E["echo#{E["#import #{N}!t~mX{puts#{E["Z_sJ"+E["s=double#{E["Z#{E["$console: l!e[#{"# $D(output);beg!~H(#{f((p="eval";%($_="#{s,v=rp["$_='#{Q[%($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;foreac h(array("I`x48DR".pack("NNCV",$
-w+2,128,8,2),"IDAT".gzcompress($m ),"IEND")as$d)echo~pack("NA*N",strlen($d)-4,$d,crc32($d));).K(B,"`x7f" ),?']}';s:g/^x7f/Y/;Z~$_",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=ord $&;substr~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.".K(/[:;()]/){?`x5e+$&}}] "]};quit"]};t=num2cell(b=11-ce
-il(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=b==
-n)=m(diff([0~s(x)])+13);end;Zf ('%%s',t{:})"]]+R}}"]}"]}`n"]};"]}`x60`n~global~_start`n~_start:mov~edx,#{s.siz e}`n~mov~ecx,m`n~mov~ebx,1`n~mov~e ax,4`n~!t~128`n~mov~ebx,0`n~m
-ov~eax,1`n~!t~128`nx:~|`n~}}{{ {qr}}}"]}"call~void~[mscorlib]#{C*"::"}(sJ)ret})).K(/()[#{i=94.chr}"]+|[#{i}']+/ ){["WriteSJ(",$&,");"]*($1??":? ')}}END~QR."]}];"]};quit();",
-?$].K(?'){"'^''"}}'"}@>)`np"] ,?&,?&]},'&(%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`t]/){"^%02`x58"%$&.or d}}^00"declare~i32@puts(i8*)def!e~i32@mX{%1=call~i32@puts(i8*getelementptr([#{i}x~i 8],[#{i}x~i8]*@s,i32~0,i 32~0))ret~i32~0})],?#].K(?',%(
-'"'"'))}';for((i=0;i<${#t};i+ =99));do;x=${t:$i:99};a~"^"${x//[Y^`"]/Y^0}^".Z;"~10;done;a~");";p(){~echo~-n~$1;} ; f(){~for~x~!~${s[*]}; do;p~$3;for((j=$2;j--;));do;h~
-$1~$x~$j;done;done;};p~k^`x60 ;h(){~p~^`x60${1:$(($2>>$3&1)):2};};f~kki~7~'`x60`x60s`x60`x60s`x60`x60s`x60`x60 s` x60`x60s`x 60`x 60s`x60`x60s`x60`x 60si';s=();a~'AG-`x48-`x48Fy.I
-lD==;=jdlAy=;=jldltldltl{lAul Ay=jtlldlAyFy=?=jdlAyGFyFyG2AFy>zlAFFBCjldGyGFy>GFy.AGy=G==n`x48==nlldC=j@=jtll d ltldlAut11';h (){~p~${1:$ (((($2%83-10)>> ((2-$3)*2))%4)):1};};f~ski^`x60
-~3)]]}~}"]})A+="'+`x21[]+'"+G. charCodeAt(E).toSJ(16);for(A+="^".replace(/'+`x21[]+'/g,^"%^")))')()",R=0;R<9 ; R++)A=A.replac e(/'.*?'/g,fun ction (B){T=[];for (E=1;B[E+1];)T.push(P[B[E++]]);
-return~T.jo!('+')});console.lo g('"'+A+'"'))).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<12 6;)c[n]=" "+(char)n;for(;i<#{a.size};){q=q
-*78+(s.charAt(i)-13)%84;if(i++% 2>0){y=qn{L<<(n+62)%92+3 5;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=400 1+i-j;D[x%87][x/87][n-5]):b< `nchar*p=#{E[L]},s[999999],
-*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}}")]}){s+="
-00g,";for(m=1;m<256;m*=2)s+="00g,4,:"+(c/m% 2>0?"4+":"")+",";f(s);s="4,:," ;}f(s+s);for(c:Base64.getDecoder().dec ode("kaARERE`x58/I0ALn3n5ef6l/Pz8+fnz58/BOf5/7/
-hE`x58/O`x5azM5mC`x58/Oczm`x5azBPn5+`x58/OczM znBL/nM5m`x5azB Pu++fPPOc5zngnnO`x5azO`x5agnBMGAW7A==")){c=c <0?256+c:c;for(i=0;i++<3;c/=8)f(c%8);f("8*+8*+,");
-}f("@");).K(?',%('"'"'))}'|sed~-e's/Y/YY/g'~-e's /"/Yq/g'~-e's/.*/Z~"&"^nquit/')]}}"]],?']}');".K(/ ^+/){"`x5e#{$&.size}`x5e"}]}.split("Y`x5e");for(!t~i=
-1;i#{U}>";s.size*16+3}.ToSJ("x8")(1`x58or~7-c*2^3)),92)):Next:Else:n=(
-c>124)*(8*c-#{s.size+1294}):Do~While~n>127:#$W(128+(127And~n)):n^=128:Loop:#$W(If(c<125,If((c-1)^7-8,c+66*(c>65And~c<91),t(c-57)),n)):End~If:Next:For~Each~c~!"#{d[s].K~N,'"&~VbLf~&"'}":#$W(Asc(c)):Next:End~Sub:End~Module)).l!es.map{|s|"let~s=#{E[s]}`nput=s`nZ
-`n"}.jo!+"qa`x21",3){%($H("%s",#$S);)+N}}end~endmodule);W=s.size*72+4;"%d,%d"%[W/65536,W%65536]}});foreach(!t~c~!#{E[s]}.data)foreach(!t~v~!~a={0,9,7,4,5,c/100*7/6+1,c%100/10*7/6+1,c%10*7/6+1,7})p({144,v=15450+v*256,384,v});p({255,12032});})]},i=0,t='k';while
-(s[i])t='^x60.'+s[i++]+t;console.log(t)",B],?`x21].K(?',%('"'"'))}'"^n::=^na")],/[`[`]$]/]}"),4){$S+?,}}])Console.H(s);Application.exit();}})]};Z"0~0~-1");),127..255];f(%(variable~s=`x60#{s.K(/.{1,234}/){$&.K("`x60",%(`x60+"`x60"+`x60))+"`x60+`n`x60"}}`x60,i;
-for(i=0;i<129;i++)s=strreplace(s,pack("C",255-i),substrbytes(`x60#{v[0,99]}`x60+`n`x60#{v[99..-1]}`x60,i*2+1,2));Zf("%s",s)),7){"f('%s')`n"%$s.unpack("`x48*")}}Zf("^n#[Exeunt]");quit)]}")),196){%(Z#$S;)}}}"]});})).gsub(/[!HJKXYZ^`~]/){[B*2,:write,B,:tring,:gs
-ub,"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_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes
-#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future
-#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future
-#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future
-#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_buffer_for_future_bug_fixes_#_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 #########################################################################################)
+eval$s=%q(eval(%w(B=92.chr;g=32.chr;puts(eval(%q(N=10.chr;n=0;e=->s{Q[Q[s,B],?"].K(N,B+?n)};E=->s{'("'+e[s]+'")'};d=->s,t=?"{s.K(t){t+t}};def~f(s,n)s.K(/.{1,#{n*255}}/m){yield$S=E[$s=$&]}end;Q=->s,t=?${s.K(t){B+$&}};R=";return~0;";V=->s,a,z{s.K(/(
+#{B*4})+/){a+"#{$&.size/2}"+z}};C=%w(System.Console~Write);$C=C*?.;$D="program~QR";$G="~contents~of"+$F="~the~mix!g~bowl";$L="public~static";$W="s.WriteByte";rp=->s,r{v="";[r.!ject(s){|s,j|o={};m=n=0;s.size.times{|i|o[f=s[i,2]]||=0;c=o[f]+=1;m(p(3+ord~c);Z"-1~0~";c))#{E[~~~~~~%(object"Application"{state"ma!"{foreach(s~![#{f(%(puts~"#{Q[e[%(echo~'a::=`x7e#{Q[Q["let~s=#{E[%(void~p(!t[]c){foreach(!t~v~!~c)stdout.Zf("%c%c",v/256,v%25
+6);}void~mX{!t[]a;p({19796,26724,0,6,0,1,480,19796,29291,#{s=%(module~QR;!itial~beg!~#{f((%(Module~QR`nSub~MX`nDim~c,n:Dim~s~As~Object=#{C[0]}.OpenStandardOutput():Dim~t()As~Short={26,34,86,127,148,158,200}:For~Each~d~!"BasmCBBBCRE`x60F<<<D`x21BE@ABRCABRCABRCA`x4a`x21CE@~B-BB~CACk:CvACqRC~COBMADRCACRCADRCABRCABRC~BACj:B-BBOBMADRCADRCADRCAFRCMM}CBABM`x7e#{40.chr}BBBCB
+BB,BBBDBBB0BBBDBBB4BBB=BBB?BBB;BBB~...^t..^n..(module(import~:wasi_snapshot_preview1:~:fd_H:~(func(param~i32~i32~i32~i32)(result~i32)))(memory(export~:memory:)(data~:^08^00^00^00$:))(func(export~:_start:)i32.const~1~i32.const~0~i32.const~1~i32.con
+st~0~call~0~drop))":c=Asc(d):If~c=36:For~c=0To~11:#$W(If(c~Mod~3,Asc(#{s="<#{U="xsl:template"}~match='/'><`x21[CDATA[#{%(sub~f(s$,n)Z(s $);:for~i =1to~n~Z("Y");:next:end~sub:f("#{V[e[%(H,format="#{y="";f("^H{-}{txt}{#{Q["echo~-E~$'#{Q[Q[E[%(with~Ada.Text_Io;procedure~qr~is~beg!~Ada.Text_Io.Put("#{d[%(trans~B(Buffer)`n
+trans~O(n){`nB:add(Byte(+~128~n))}`ntrans~f(v~n){`n O(+(/~ n~64 )107)`nO (n:mod~64)`nO~v}`ntrans~D(n){if(<~n~4){f(+(*~6~n)9)48}{if(n:odd-p){D(-~n~3)`nf~27~48`nf~36~11}{D(/~n~2)`nf~21~48`nf~48~20}}}`ntrans~S(Buffer"#{e[%W[STRINGz:=~226+
+~153,a:=z+~166,b:=a+"2"+z+~160,c:=b+"8"+z+~165,t: ="# { d[%(class~QR{#$L~void~ma!(SJ[]a){a=#{E["H('#{Q[e["implement~ma!0()=Z"+E["BEGIN{Z#{E[ %(echo~'#{%(f(s){System.out.Z(s);}s="389**6+44*6+00p45*,";for(c
+:#{E[(s="#!clude`n!t~mX{std::cout<<#{ E[ %(class~Program{#$L~void~MX{#$C("Qu!e~Relay~Coffee.^n^nIngredie nts.^n");for(!t~i=9;i++<126;)#$C($"{i}~g~caffe!e~{i}^n"
+);#$C("^nMethod.^n");foreach(char~c~!#{E[%((d oseq[s(lazy-cat["IDENTIFICATION~DIVISION.""PROGRAM-ID.~QR."" PROCEDURE~DIVISION."'DISPLA`x59](map~#(str"~~~~^""
+(.replace~%1"^"""^"^"")"^"")(re-seq~#".{1,45 }""#{e["(f=(n)->Array(n+1).jo!~'Y');console.log(' %s',#{V[E[%((H-l!e"#{e["puts#{E["import~std.st
+dio;void~mX{H(`x60#{%(method~MX{Z(@"#{d["[' ']p[#{"IO.puts"+E[%((pr!c~"#{e["`nma!(_)-> `nio:fH#{d[E['Zfn("""'+d[?"+"%option~noyywr
+ap`n%%`n%%`n!t~mX{puts#{E["echo~'#{Q[Q[%( ~:~A~."#{g*9}"~;~:~B~A~."~WRITE(*,*)'"~A~ ;~:~C~B~T`x59PE~."~'"~CR~;~:~D~S"~#$D"~C
+~S^"~Z~^"(&"~C~S^"~#{e[%(Z"#{e["s:=Outp utTe xtUser();WriteAll(s,#{E[%(Zf"#{e[d [f('set~Z"-";Z '+E[%(package~ma!;import"fmt";func~mX
+{fmt.Pr!t#{E[%(236:j;{119:i;{206i-:i;. 48<{7 1+}{[i]^48-*}if}%}:t;"algori tmo~QR;!"[195][173]++'cio~im prima("'"013141"t"/12131"t~6*"/1:191
+8151:??6271413/4=3626612/2/353251215/ `x5a 0`x5a0R"t"#{e[%(z=new~java. util.zip.G`x5aIPOutputStream(System.ou t);z.H('#{"ma!=putStr"+E["class~QR
+{#$L~function~mX{neko.Lib.Z#{E[%(proc edure~mX;i:=c:=0;s:=#{ E[%(.class~public~QR`n .super~#{$T="java/io/Pr!tStream"}`n.method~# $L~ma!([L#{S="java/lang/S"}J;)V~
+;]`n.limit~stack~2`ngetstatic~#{S}yst em/o ut~L#$T;`nldc~"#{e[%(class~QR{#$L~ void~ma!(SJ[]v){S J~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+42};(%(P={0:'[+[]]',m:'((+[ ])'+(C="['constructor']")+"+[])['11']"};for(R~!~B =('`x21[]@`x2 1`x21[]@[][[]]@'+(A="[]['fill']")+"@([]+[])['fontcolor ']([])@(+('11e20')+[])['split
+']([])@"+A+C+"('return~escape')()("+ A+')').split('@'))for(E~!~D=eval(G='('+B[R]+'+[])') )P[T=D[E]]=P [T]||G+"['"+E+"']";for(G='[',B=0;++B<36;)P[D=B.toSJ(36)]=B <10?(G+='+`x21+[]')+']':P[D]
+||"(+('"+B+"'))['to'+([]+[])"+C+" ['name']]('36')";A+=C+"('console.log(unescape(^"";for(E~ !~G=#{E[ "fun~ma!(a:Array){Z#{Q[E[%(s=();a(){~s+=($(echo~-n~$1|od~ -An~-tu1~-v)~$2);};a~"Secti
+on`x48eader+name:=QR;SectionPubl ic-ma!<-("~10;t='#{"console.log"+Q[E[%(@s=global[#{i=(s=%(`x 48AI ~1.2`nVISIBLE~"#{"x=sJ.K(#{V[E["changequote(<@,@>)`ndef!e(p,<@#{" all:`n`t@echo~'#{d["l!el:9
+9999;Z#{E["solve~satisfy;outpu t~[#{E["MODULE~QR;FROM~StrIO~IMPORT~WriteSJ;BEGIN~#{(%(.assembl y~ t{}.method~#$L~void~MX{.entrypo!t~ldstr"#{e["m{{`x21:~x`nqr:~|-`n~:db`x60#{e[s= "$Z#{E["Zf#{E["echo#{E["#i
+mport#{N}!t~mX{puts #{E["Z_sJ"+E["s=double#{E["Z#{E["$console:l!e[#{"#$D(output);beg!~H (#{f(( p="eval";%($_="#{s,v=rp["$_='#{Q[%($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".p ack("NNCV",$w+2,128,8,2),"IDAT".gzcompres s($m),"IEND")as$d)echo~p
+ack("NA*N",strlen($d)-4,$ d,crc32($d));).K(B,"`x7f"),?']}';s:g/^x7f/Y/;Z~$_",128..287];s="$_='#{Q[s,c= /['Y]/]}';$n=32;$s='#{Q[v,c]}';$s=`x7 es{..}{$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).c hr}}";s|.|$n=ord$&;substr~unpack(B 8,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.".K(/[:;()]/){?`x5e+$&}} ]"]};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 =b==n)=m(diff([0~s(x)])+13);end;Zf('%%s',t{:})"]]+R}}"]}"]}`n"]};"]}`x60`n~global~_ start`n~_start:mov~edx,# {s.size}`n~mov~ecx,m`n~m
+ov~ebx,1`n~mov~eax,4`n~ !t~128`n~mov~ebx,0`n~mov~eax,1`n~!t~128`nx:~|`n~}}{{{qr}}}"]}"call~void~[mscorlib] # {C*"::"}(sJ)ret})).K( /()[#{i=94.chr}"]+|[#{i}
+']+/){["WriteSJ(",$&,") ;"]*($1??":?')}}END~QR."]}];"]};quit();",?$].K(?'){"'^''"}}'"}@>)`np"],?&,?&]},' &( %d+)&',fun ctio n(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`t]/){"^%02`x58"%$&.ord}} ^ 00"declare~i3 2@puts(i8*) def!e~i32@mX{%1 =call~i32@puts(i8*getelem
+entptr([#{i}x~i8],[#{i}x ~i8]*@s,i32~0,i32~0))ret~i32~0})],?#].K(?',%('"'"'))}';for((i=0;i<${#t};i+=99 ) );do;x=${t:$i: 99};a~"^"${x// [Y^`" ]/Y^0}^".Z;" ~10;done;a~");";p(){~echo
+~-n~$1;};f(){~for~x~!~${ s[*]};do;p~$3;for((j=$2;j--;));do;h~$1~$x~$j;done;done;};p~k^`x60;h(){~p~^ `x 60${1:$(($2>>$3&1)):2};};f~kki~ 7~'`x60`x60s `x60`x60s `x60`x60s`x60`x60s`x60`x60
+s`x60`x60s`x60`x60s`x60`x 60si';s=();a~'AG-`x48-`x48Fy.IlD==;=jdlAy=;=jldltldltl{lAulAy=jtlldlAyFy =?=j dlAyGFyFyG2AFy>zlAFFBCjldGyGFy>G Fy.AGy=G==n`x48= =nlldC =j@=jtlldltldlAut11';h(){~p
+~${1:$(((($2%83-10)>>((2-$ 3)*2))%4)):1};};f~ski^`x60~3)]]}~}"]})A+="'+`x21[]+'"+G.charCodeAt(E) .toSJ(16 );for(A+="^".replace(/'+`x21[]+' /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.jo!('+')});console.log('"'+A+'"' ))).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;for(;i<#{a.size};){q=q*78+(s.charAt(i)-13)%84;if(i++%2> 0){y=qn{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.ma x)?(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[999999],*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++;}p uts(s)#{R}}")]}){s+="00g,";for(m=1;m<256;m*=2)s+="00g,4
+,:"+(c/m%2>0?"4+":"")+",";f(s);s="4,:,";}f(s+s);for(c:Ba se64.getDecoder().decode("kaARERE`x58/I0ALn3n5ef6l/Pz8+fnz58/BOf5/7/hE`x58/O`x5 azM5mC`x58/Oczm`x5azBPn5+`x58/OczMznBL/nM5m`x5azBPu++fPPOc5zng
+nnO`x5azO`x5agnBMGAW7A==")){c=c<0?256+c:c;for(i=0;i++<3;c/=8)f(c%8);f("8*+8*+,");}f("@");).K(?',%('"'"'))}'|sed~-e's/Y/YY/g'~-e's/"/Yq/g'~-e's/.*/Z~"&"^nquit/')]}}"]],?']}');".K(/^+/){"`x5e#{$&.size}`x5e"}]}.split("Y`x5e");for(!t~i=1;i#{U}>";s.size*16+3}.
+ToSJ("x8")(1`x58or~7-c*2^3)),92)):Next:Else:n=(c>124)*(8*c-#{s.size+1294}):Do~While~n>127:#$W(128+(127And~n)):n^=128:Loop:#$W(If(c<125,If((c-1)^7-8,c+66*(c>65And~c<91),t(c-57)),n)):End~If:Next:For~Each~c~!"#{d[s].K~N,'"&~VbLf~&"'}":#$W(Asc(c)):Nex
+t:End~Sub:End~Module)).l!es.map{|s|"let~s=#{E[s]}`nput=s`nZ`n"}.jo!+"qa`x21",3){%($H("%s",#$S);)+N}}end~endmodule);W=s.size*72+4;"%d,%d"%[W/65536,W%65536]}});foreach(!t~c~!#{E[s]}.data)foreach(!t~v~!~a={0,9,7,4,5,c/100*7/6+1,c%100/10*7/6+1,c%10*7/
+6+1,7})p({144,v=15450+v*256,384,v});p({255,12032});})]},i=0,t='k';while(s[i])t='^x60.'+s[i++]+t;console.log(t)",B],?`x21].K(?',%('"'"'))}'"^n::=^na")],/[`[`]$]/]}"),4){$S+?,}}])Console.H(s);Application.exit();}})]};Z"0~0~-1");),127..255];f(%(varia
+ble~s=`x60#{s.K(/.{1,234}/){$&.K("`x60",%(`x60+"`x60"+`x60))+"`x60+`n`x60"}}`x60,i;for(i=0;i<129;i++)s=strreplace(s,pack("C",255-i),substrbytes(`x60#{v[0,99]}`x60+`n`x60#{v[99..-1]}`x60,i*2+1,2));Zf("%s",s)),7){"f('%s')`n"%$s.unpack("`x48*")}}Zf("
+^n#[Exeunt]");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
+#################################################################################### Quine Relay -- Copyright (c) 2013, 2014 Yusuke Endoh (@mametter), @hirekoke ###################################################################################)
diff --git a/README.md b/README.md
index da07c6a9..19b5e4a7 100644
--- a/README.md
+++ b/README.md
@@ -21,22 +21,22 @@ the original Ruby code again.
### Ubuntu
-If you are using Ubuntu 23.10 (Mantic Minotaur), you can follow these steps.
+If you are using Ubuntu 24.04 LTS (Noble Numbat), you can follow these steps.
#### 1. Install all the interpreters/compilers.
First, you need to type the following apt-get command to install them all.
$ sudo apt-get install afnix algol68g aplus-fsf aspectj asymptote \
- ats2-lang bash bc bsdgames bsh clisp clojure cmake coffeescript \
- crystal dafny dc dhall dotnet7 elixir emacs-nox erlang f2c fish flex \
- fp-compiler g++ gambas3-gb-pcre gambas3-scripter gap gawk gcc gdb gdc \
- genius gforth gfortran ghc ghostscript gm2 gnat gnucobol4 gnuplot \
- gobjc golang gpt groovy guile-3.0 gzip haxe icont iconx intercal \
- iverilog jasmin-sable jq kotlin ksh libevent-dev libpolyml-dev lisaac \
- livescript llvm lua5.3 m4 make maxima minizinc mono-devel nasm neko \
- nickle nim node-typescript nodejs ocaml octave openjdk-11-jdk pari-gp \
- parser3-cgi perl php-cli polyml python3 r-base rakudo ratfor rc \
+ ats2-lang bash bc bsh clisp clojure cmake coffeescript crystal dafny \
+ dc dhall dotnet8 elixir emacs-nox erlang f2c fish flex fp-compiler g++ \
+ gambas3-gb-pcre gambas3-scripter gap gawk gcc gdb gdc genius gforth \
+ gfortran ghc ghostscript gm2 gnat gnucobol4 gnuplot gobjc golang gpt \
+ groovy guile-3.0 gzip haxe icont iconx intercal iverilog jasmin-sable \
+ jq kotlin ksh libevent-dev libpolyml-dev lisaac livescript llvm lua5.3 \
+ m4 make maxima minizinc mono-devel nasm neko nickle nim \
+ node-typescript nodejs ocaml octave openjdk-11-jdk pari-gp parser3-cgi \
+ perl php-cli pike8.0 polyml python3 r-base rakudo ratfor rc \
regina-rexx ruby ruby-mustache rustc scala scilab-cli sed slsh spin \
surgescript swi-prolog tcl tcsh valac vim wabt xsltproc yabasic yorick \
zoem zsh
@@ -55,7 +55,7 @@ Then, build the bundled interpreters.
$ guile QR.scm > QR.sci
$ scilab-cli -nb -f QR.sci > QR.sed
$ sed -E -f QR.sed QR.sed > QR.spl
- $ ./vendor/local/bin/spl2c < QR.spl > QR.spl.c && gcc -z muldefs -o QR -I ./vendor/local/include -L ./vendor/local/lib QR.spl.c -lspl -lm &&
+ $ spl2c < QR.spl > QR.spl.c && gcc -z muldefs -o QR -I ./vendor/local/include -L ./vendor/local/lib QR.spl.c -lspl -lm &&
./QR > QR.sl
$ slsh QR.sl > QR.sml
$ polyc -o QR QR.sml && ./QR > QR.sq
@@ -70,7 +70,7 @@ Then, build the bundled interpreters.
$ mono vendor/local/bin/Vlt.exe /s QR.mid && mono QR.exe > QR.v
$ iverilog -o QR QR.v && ./QR -vcd-none > QR.vim
$ vim -EsS QR.vim > QR.vb
- $ echo 'Exenet7.0false' > tmp.vbproj &&
+ $ echo 'Exenet8.0false' > tmp.vbproj &&
DOTNET_NOLOGO=1 dotnet run --project tmp.vbproj > QR.wasm
$ $(WASI_RUNTIME) QR.wasm > QR.wat
$ wat2wasm QR.wat -o QR.wat.wasm && $(WASI_RUNTIME) QR.wat.wasm > QR.ws
@@ -98,7 +98,7 @@ Then, build the bundled interpreters.
$ ruby vendor/bf.rb QR.bf > QR.c
$ gcc -o QR QR.c && ./QR > QR.cpp
$ g++ -o QR QR.cpp && ./QR > QR.cs
- $ echo 'Exenet7.0false' > tmp.csproj &&
+ $ echo 'Exenet8.0false' > tmp.csproj &&
DOTNET_NOLOGO=1 dotnet run --project tmp.csproj > QR.chef
$ PERL5LIB=vendor/local/lib/perl5 compilechef QR.chef QR.chef.pl &&
perl QR.chef.pl > QR.clj
@@ -115,7 +115,7 @@ Then, build the bundled interpreters.
$ elixir QR.exs > QR.el
$ emacs -Q --script QR.el > QR.erl
$ escript QR.erl > QR.fsx
- $ echo 'Exenet7.0false' > tmp.fsproj &&
+ $ echo 'Exenet8.0false' > tmp.fsproj &&
DOTNET_NOLOGO=1 dotnet run --project tmp.fsproj > QR.false
$ ruby vendor/false.rb QR.false > QR.fl
$ flex -o QR.fl.c QR.fl && gcc -o QR QR.fl.c && ./QR > QR.fish
@@ -174,9 +174,9 @@ Then, build the bundled interpreters.
$ perl QR.pl > QR.pl6
$ perl6 QR.pl6 > QR.php
$ php QR.php > QR.png
- $ npiet QR.png > QR.ps
- $ gs -dNODISPLAY -q QR.ps > QR.ppt
- $ ppt -d < QR.ppt > QR.prolog
+ $ npiet QR.png > QR.pike
+ $ pike QR.pike > QR.ps
+ $ gs -dNODISPLAY -q QR.ps > QR.prolog
$ swipl -q -t qr -f QR.prolog > QR.pr
$ spin -T QR.pr > QR.py
$ python3 QR.py > QR.R
@@ -221,135 +221,135 @@ If you manage it, please let me know. I wish you good luck.
I used the following Ubuntu deb packages to test this program.
\# |language |ubuntu package |version
-----|----------------------------|----------------------------------|-------------------------------
-1 |Ruby |ruby |1:3.1
-2 |Rust |rustc |1.71.1+dfsg0ubuntu2-0ubuntu1
+----|----------------------------|----------------------------------|-------------------------------------
+1 |Ruby |ruby |1:3.2\~ubuntu1
+2 |Rust |rustc |1.75.0+dfsg0ubuntu1-0ubuntu7
3 |Scala |scala |2.11.12-5
-4 |Scheme |guile-3.0 |3.0.8-2
-5 |Scilab |scilab-cli |6.1.1+dfsg2-9
-6 |sed |sed |4.9-1
+4 |Scheme |guile-3.0 |3.0.9-1build2
+5 |Scilab |scilab-cli |2024.0.0+dfsg-5build3
+6 |sed |sed |4.9-2build1
7 |Shakespeare |*N/A* |-
-8 |S-Lang |slsh |2.3.3-3
-9 |Standard ML |polyml, libpolyml-dev |5.7.1-5
+8 |S-Lang |slsh |2.3.3-3build2
+9 |Standard ML |polyml, libpolyml-dev |5.7.1-5build1
10 |Subleq |*N/A* |-
11 |SurgeScript |surgescript |0.5.4.4-1.1
-12 |Tcl |tcl |8.6.13
-13 |tcsh |tcsh |6.24.10-2
+12 |Tcl |tcl |8.6.14build1
+13 |tcsh |tcsh |6.24.10-4build1
14 |Thue |*N/A* |-
15 |TypeScript |node-typescript |4.8.4+ds1-2
16 |Unlambda |*N/A* |-
-17 |Vala |valac |0.56.13-1
+17 |Vala |valac |0.56.16-3build1
18 |Velato |*N/A* |-
-19 |Verilog |iverilog |12.0-2
-20 |Vimscript |vim |2:9.0.1672-1ubuntu2.1
-21 |Visual Basic |dotnet7 |7.0.113-0ubuntu1\~23.10.1
-22 |WebAssembly (Binary format) |wabt |1.0.33-1
-23 |WebAssembly (Text format) |wabt |1.0.33-1
+19 |Verilog |iverilog |12.0-2build2
+20 |Vimscript |vim |2:9.1.0016-1ubuntu7
+21 |Visual Basic |dotnet8 |8.0.104-8.0.4-0ubuntu1
+22 |WebAssembly (Binary format) |wabt |1.0.34+dsfg2+\~cs1.0.32-1ubuntu2
+23 |WebAssembly (Text format) |wabt |1.0.34+dsfg2+\~cs1.0.32-1ubuntu2
24 |Whitespace |*N/A* |-
-25 |XSLT |xsltproc |1.1.35-1
+25 |XSLT |xsltproc |1.1.39-0exp1build1
26 |Yabasic |yabasic |1:2.90.3-1
-27 |Yorick |yorick |2.2.04+dfsg1-12
+27 |Yorick |yorick |2.2.04+dfsg1-12build3
28 |Zoem |zoem |21-341-1
-29 |zsh |zsh |5.9-5ubuntu1
-30 |A+ |aplus-fsf |4.22.1-10.2
-31 |Ada |gnat |12.2ubuntu1
+29 |zsh |zsh |5.9-6ubuntu2
+30 |A+ |aplus-fsf |4.22.1-12
+31 |Ada |gnat |13.2ubuntu2
32 |AFNIX |afnix |3.8.0-1
33 |Aheui |*N/A* |-
34 |ALGOL 68 |algol68g |3.1.2-1
35 |Ante |*N/A* |-
36 |AspectJ |aspectj |1.9.5-2
-37 |Asymptote |asymptote |2.86+ds-1
+37 |Asymptote |asymptote |2.87+ds-1build2
38 |ATS |ats2-lang |0.4.2-1.1
-39 |Awk |gawk |1:5.2.1-2
-40 |bash |bash |5.2.15-2ubuntu1
-41 |bc |bc |1.07.1-3build1
+39 |Awk |gawk |1:5.2.1-2build3
+40 |bash |bash |5.2.21-2ubuntu4
+41 |bc |bc |1.07.1-3ubuntu4
42 |BeanShell |bsh |2.0b4-20
43 |Befunge |*N/A* |-
44 |BLC8 |*N/A* |-
45 |Brainfuck |*N/A* |-
-46 |C |gcc |4:13.2.0-1ubuntu1
-47 |C++ |g++ |4:13.2.0-1ubuntu1
-48 |C# |dotnet7 |7.0.113-0ubuntu1\~23.10.1
+46 |C |gcc |4:13.2.0-7ubuntu1
+47 |C++ |g++ |4:13.2.0-7ubuntu1
+48 |C# |dotnet8 |8.0.104-8.0.4-0ubuntu1
49 |Chef |*N/A* |-
50 |Clojure |clojure |1.11.1-2
-51 |CMake |cmake |3.27.4-1
-52 |Cobol |gnucobol4 |4.0\~early\~20200606-6
+51 |CMake |cmake |3.28.3-1build7
+52 |Cobol |gnucobol4 |4.0\~early\~20200606-6.1build1
53 |CoffeeScript |coffeescript |2.7.0+dfsg1-1
-54 |Common Lisp |clisp |1:2.49.20210628.gitde01f0f-3.1
-55 |Crystal |crystal, libevent-dev |1.9.2+dfsg-3
-56 |D |gdc |4:13.2.0-1ubuntu1
+54 |Common Lisp |clisp |1:2.49.20210628.gitde01f0f-3.1build3
+55 |Crystal |crystal, libevent-dev |1.11.2+dfsg-1build3
+56 |D |gdc |4:13.2.0-7ubuntu1
57 |Dafny |dafny |2.3.0+dfsg-0.1
-58 |dc |dc |1.07.1-3build1
-59 |Dhall |dhall |1.40.2-2build1
+58 |dc |dc |1.07.1-3ubuntu4
+59 |Dhall |dhall |1.41.2-1
60 |Elixir |elixir |1.14.0.dfsg-2
-61 |Emacs Lisp |emacs-nox |1:29.1+1-5ubuntu1
-62 |Erlang |erlang |1:25.2.3+dfsg-1
-63 |F# |dotnet7 |7.0.113-0ubuntu1\~23.10.1
+61 |Emacs Lisp |emacs-nox |1:29.3+1-1ubuntu2
+62 |Erlang |erlang |1:25.3.2.8+dfsg-1ubuntu4
+63 |F# |dotnet8 |8.0.104-8.0.4-0ubuntu1
64 |FALSE |*N/A* |-
-65 |Flex |flex |2.6.4-8.2
-66 |Fish |fish |3.6.1-1
+65 |Flex |flex |2.6.4-8.2build1
+66 |Fish |fish |3.7.0-1
67 |Forth |gforth |0.7.3+dfsg-9build4.1
68 |FORTRAN77 |f2c |20200916-1
-69 |Fortran90 |gfortran |4:13.2.0-1ubuntu1
-70 |Gambas script |gambas3-scripter, gambas3-gb-pcre |3.18.3-1ubuntu1
-71 |GAP |gap |4.12.1-2
-72 |GDB |gdb |14.0.50.20230907-0ubuntu1
-73 |GEL (Genius) |genius |1.0.27-1
-74 |Gnuplot |gnuplot |5.4.4+dfsg1-2build1
-75 |Go |golang |2:1.21\~2
+69 |Fortran90 |gfortran |4:13.2.0-7ubuntu1
+70 |Gambas script |gambas3-scripter, gambas3-gb-pcre |3.19.0-2ubuntu10
+71 |GAP |gap |4.12.1-2build2
+72 |GDB |gdb |15.0.50.20240403-0ubuntu1
+73 |GEL (Genius) |genius |1.0.27-1build4
+74 |Gnuplot |gnuplot |6.0.0+dfsg1-1ubuntu3
+75 |Go |golang |2:1.22\~2build1
76 |GolfScript |*N/A* |-
-77 |G-Portugol |gpt |1.1-7
+77 |G-Portugol |gpt |1.1-8
78 |Grass |*N/A* |-
-79 |Groovy |groovy |2.4.21-8
-80 |Gzip |gzip |1.12-1ubuntu1
-81 |Haskell |ghc |9.0.2-5
-82 |Haxe |haxe |1:4.3.1-1
+79 |Groovy |groovy |2.4.21-10
+80 |Gzip |gzip |1.12-1ubuntu3
+81 |Haskell |ghc |9.4.7-3
+82 |Haxe |haxe |1:4.3.3-1build2
83 |Icon |icont, iconx |9.4.3-7ubuntu1
84 |INTERCAL |intercal |30:0.30-6
85 |Jasmin |jasmin-sable |2.5.0-2
-86 |Java |openjdk-11-jdk |11.0.20.1+1-0ubuntu1\~23.04
-87 |JavaScript |nodejs |18.13.0+dfsg1-1ubuntu2
-88 |Jq |jq |1.6-3
-89 |JSFuck |nodejs |18.13.0+dfsg1-1ubuntu2
-90 |Kotlin |kotlin |1.3.31+ds1-1build5
-91 |ksh |ksh |20230128
+86 |Java |openjdk-11-jdk |11.0.23+9-1ubuntu1
+87 |JavaScript |nodejs |18.19.1+dfsg-6ubuntu5
+88 |Jq |jq |1.7.1-3build1
+89 |JSFuck |nodejs |18.19.1+dfsg-6ubuntu5
+90 |Kotlin |kotlin |1.3.31+ds1-1ubuntu1
+91 |ksh |ksh |20240113
92 |Lazy K |*N/A* |-
93 |Lisaac |lisaac |1:0.39\~rc1-3.1
94 |LiveScript |livescript |1.6.1+dfsg-3
-95 |LLVM asm |llvm |1:16.0-57
+95 |LLVM asm |llvm |1:18.0-59\~exp2
96 |LOLCODE |*N/A* |-
-97 |Lua |lua5.3 |5.3.6-2
-98 |M4 |m4 |1.4.19-3
-99 |Makefile |make |4.3-4.1build1
-100 |Maxima |maxima |5.45.1-8
-101 |MiniZinc |minizinc |2.6.4+dfsg1-1
-102 |Modula-2 |gm2 |4:13.2.0-1ubuntu1
-103 |MSIL |mono-devel |6.8.0.105+dfsg-3.4
+97 |Lua |lua5.3 |5.3.6-2build2
+98 |M4 |m4 |1.4.19-4build1
+99 |Makefile |make |4.3-4.1build2
+100 |Maxima |maxima |5.46.0-11build3
+101 |MiniZinc |minizinc |2.8.2+dfsg1-1build2
+102 |Modula-2 |gm2 |4:13.2.0-7ubuntu1
+103 |MSIL |mono-devel |6.8.0.105+dfsg-3.6ubuntu2
104 |Mustache |ruby-mustache |1.1.1-2
-105 |NASM |nasm |2.16.01-1
-106 |Neko |neko |2.3.0-2
-107 |Nickle |nickle |2.92
-108 |Nim |nim |1.6.14-1
-109 |Objective-C |gobjc |4:13.2.0-1ubuntu1
-110 |OCaml |ocaml |4.13.1-6ubuntu1
-111 |Octave |octave |8.3.0-2
+105 |NASM |nasm |2.16.01-1build1
+106 |Neko |neko |2.3.0-2build2
+107 |Nickle |nickle |2.97build2
+108 |Nim |nim |1.6.14-1ubuntu2
+109 |Objective-C |gobjc |4:13.2.0-7ubuntu1
+110 |OCaml |ocaml |4.14.1-1ubuntu1
+111 |Octave |octave |8.4.0-1build5
112 |Ook! |*N/A* |-
-113 |PARI/GP |pari-gp |2.15.4-2
-114 |Parser 3 |parser3-cgi |3.4.6-3
-115 |Pascal |fp-compiler |3.2.2+dfsg-22
-116 |Perl 5 |perl |5.36.0-9ubuntu1
+113 |PARI/GP |pari-gp |2.15.4-2.1build1
+114 |Parser 3 |parser3-cgi |3.4.6-4
+115 |Pascal |fp-compiler |3.2.2+dfsg-32
+116 |Perl 5 |perl |5.38.2-3.2build2
117 |Perl 6 |rakudo |2022.12-1
-118 |PHP |php-cli |2:8.2+93ubuntu1
+118 |PHP |php-cli |2:8.3+93ubuntu2
119 |Piet |*N/A* |-
-120 |PostScript |ghostscript |10.01.2\~dfsg1-0ubuntu2.1
-121 |PPT (Punched tape) |bsdgames |2.17-30
-122 |Prolog |swi-prolog |9.0.4+dfsg-2ubuntu1
+120 |Pike |pike8.0 |8.0.1738-1.3ubuntu1
+121 |PostScript |ghostscript |10.02.1\~dfsg1-0ubuntu7
+122 |Prolog |swi-prolog |9.0.4+dfsg-3.1ubuntu4
123 |Promela (Spin) |spin |6.5.2+dfsg-1
-124 |Python |python3 |3.11.4-5
-125 |R |r-base |4.3.1-4
+124 |Python |python3 |3.12.3-0ubuntu1
+125 |R |r-base |4.3.3-2build2
126 |Ratfor |ratfor |1.05-2
-127 |rc |rc |1.7.4+97.gceb59bb-5
-128 |REXX |regina-rexx |3.6-2.4
+127 |rc |rc |1.7.4+97.gceb59bb-5build2
+128 |REXX |regina-rexx |3.9.5+dfsg1-0.1
Note that some languages are not available in Ubuntu (marked as *N/A*).
This repository contains their implementations in `vendor/`.
@@ -542,6 +542,14 @@ Removed: Smalltalk
Added: Modula-2
+## for Ubuntu 24.04
+
+[128 languages]()
+
+Removed: PPT (Punched tape)
+
+Added: Pike
+
## License
The MIT License applies to all resources
diff --git a/langs.png b/langs.png
index 0e5b2610..68b6496f 100644
Binary files a/langs.png and b/langs.png differ
diff --git a/src/README.md.gen.rb b/src/README.md.gen.rb
index 0339b8ef..2ca675d5 100644
--- a/src/README.md.gen.rb
+++ b/src/README.md.gen.rb
@@ -328,6 +328,14 @@
Added: Modula-2
+## for Ubuntu 24.04
+
+[128 languages]()
+
+Removed: PPT (Punched tape)
+
+Added: Pike
+
## License
The MIT License applies to all resources
diff --git a/src/code-gen-pool.rb b/src/code-gen-pool.rb
index 87c96730..b4a505b5 100644
--- a/src/code-gen-pool.rb
+++ b/src/code-gen-pool.rb
@@ -37,13 +37,6 @@ class Execline < CodeGen
Code = %q(%(echo "#{e[PREV]}"))
end
-class Pike < CodeGen
- File = "QR.pike"
- Cmd = "pike QR.pike > OUTFILE"
- Apt = "pike8.0"
- Code = %q("int main(){write#{E[PREV]+R}}")
-end
-
CodeGen::List.slice!(original_list_size..-1).each do |s|
i = CodeGen::List.find_index(s::After)
CodeGen::List.insert(i, s)
diff --git a/src/code-gen.rb b/src/code-gen.rb
index 0945f40e..d177cdc6 100644
--- a/src/code-gen.rb
+++ b/src/code-gen.rb
@@ -115,24 +115,19 @@ class Prolog < CodeGen
Code = %q("qr:-write('#{Q[e[PREV],?']}').")
end
-class PostScript_PPT < CodeGen
- Name = ["PostScript", "PPT (Punched tape)"]
- File = ["QR.ps", "QR.ppt"]
- Cmd = ["gs -dNODISPLAY -q QR.ps > OUTFILE", "ppt -d < QR.ppt > OUTFILE"]
- Apt = ["ghostscript", "bsdgames"]
- def code
- <<-'END'.lines.map {|l| l.strip }.join
- "
- (#{?_*11})dup =
- /s(| . |)def
- (#{Q[PREV,B]}){
- 9 7{
- exch dup 1 and 79 mul 32 add exch 2 idiv 3 1 roll s exch 2 index exch put 1 sub dup 6 eq{1 sub}if
- }repeat s = pop pop
- }forall = quit
- "
- END
- end
+class PostScript < CodeGen
+ Name = "PostScript"
+ File = "QR.ps"
+ Cmd = "gs -dNODISPLAY -q QR.ps > OUTFILE"
+ Apt = "ghostscript"
+ Code = %q("(#{Q[PREV,B]})print quit")
+end
+
+class Pike < CodeGen
+ File = "QR.pike"
+ Cmd = "pike QR.pike > OUTFILE"
+ Apt = "pike8.0"
+ Code = %q("int main(){write#{E[PREV]+R}}")
end
class PHP_Piet < CodeGen
@@ -822,7 +817,7 @@ class FSharp < CodeGen
Exe
- net7.0
+ net8.0
false
@@ -831,7 +826,7 @@ class FSharp < CodeGen
END
Cmd = %(echo '#{ fsproj.lines.map {|s| s.strip }.join }' > tmp.fsproj && DOTNET_NOLOGO=1 dotnet run --project tmp.fsproj > OUTFILE)
- Apt = "dotnet7"
+ Apt = "dotnet8"
Code = %q('printfn("""'+d[PREV,?%]+' """)')
end
@@ -986,7 +981,7 @@ class CSharp_Chef < CodeGen
Exe
- net7.0
+ net8.0
false
@@ -998,7 +993,7 @@ class CSharp_Chef < CodeGen
%(echo '#{ csproj.lines.map {|s| s.strip }.join }' > tmp.csproj && DOTNET_NOLOGO=1 dotnet run --project tmp.csproj > OUTFILE),
"PERL5LIB=vendor/local/lib/perl5 compilechef QR.chef QR.chef.pl && perl QR.chef.pl > OUTFILE"
]
- Apt = ["dotnet7", nil]
+ Apt = ["dotnet8", nil]
def code
<<-'END'.lines.map {|l| l.strip }.join
%(
@@ -1343,7 +1338,7 @@ class VisualBasic_WebAssemblyBinary_WebAssemblyText_Whitespace < CodeGen
Exe
- net7.0
+ net8.0
false
@@ -1357,7 +1352,7 @@ class VisualBasic_WebAssemblyBinary_WebAssemblyText_Whitespace < CodeGen
"wat2wasm QR.wat -o QR.wat.wasm && $(WASI_RUNTIME) QR.wat.wasm > OUTFILE",
"ruby vendor/whitespace.rb QR.ws > OUTFILE"
]
- Apt = ["dotnet7", "wabt", "wabt", nil]
+ Apt = ["dotnet8", "wabt", "wabt", nil]
def code
r = <<-'END'.lines.map {|l| l.strip }.join(?:)
%(Module QR\nSub Main()\nDim c,n:Dim s As Object=#{C[0]}.OpenStandardOutput():Dim t()As Short={@@TBL@@}
@@ -1509,7 +1504,7 @@ class Scilab_Sed_Shakespeare_SLang < CodeGen
Cmd = [
"scilab-cli -nb -f QR.sci > OUTFILE",
"sed -E -f QR.sed QR.sed > OUTFILE",
- "./vendor/local/bin/spl2c < QR.spl > QR.spl.c && gcc -z muldefs -o QR -I ./vendor/local/include -L ./vendor/local/lib QR.spl.c -lspl -lm && ./QR > OUTFILE",
+ "spl2c < QR.spl > QR.spl.c && gcc -z muldefs -o QR -I ./vendor/local/include -L ./vendor/local/lib QR.spl.c -lspl -lm && ./QR > OUTFILE",
"slsh QR.sl > OUTFILE",
]
Apt = ["scilab-cli", "sed", nil, "slsh"]
diff --git a/thumbnail.png b/thumbnail.png
index 3b3bd23f..88c6a37f 100644
Binary files a/thumbnail.png and b/thumbnail.png differ
diff --git a/vendor/Makefile b/vendor/Makefile
index bfce5acb..b393ebfb 100644
--- a/vendor/Makefile
+++ b/vendor/Makefile
@@ -29,7 +29,7 @@ $(LOCAL)/bin/lazyk:
$(LOCAL)/bin/spl2c:
tar xzf $(SPL).tar.gz
- (cd $(SPL) && ln -s ../local spl && make install)
+ (cd $(SPL) && ln -s ../local spl && make spl2c CCFLAGS="-O0 -g -Wall" && make install)
$(LOCAL)/bin/Vlt.exe:
unzip -d $(LOCAL)/bin -q Velato_0_1.zip