SlideShare a Scribd company logo
1 of 83
Download to read offline
TRICK 2022
"Returns"
― contest results
TRICK judges:
eto, shinh, yhara, matz, leonid, flagitious, mame
Transcendental
Ruby
Imbroglio
Contest
for RubyKaigi
TRICK-2022-opening.rb
eval(s=%w{extend(Math);t="-7AA2I:>4E;D0+C>D?7EE8I
56D=@ADI?:D;9C,FI@<ECFB>I%@GDCCBEBDFHFFEEIIHHG3@?HE<4
ABG3@-@3./1151=B/?H.&'9?D@&'9@88=B/@881513./=A4ABGG>E((('
3,,,>===A).A2<DI)E@<2&)6%E*E6E%*0=*-3EI$>7D4$G";s="eval(s=%w{
#{s}}*'')"+"#"*999;h="¥s"*108+(-5..17).map{s.slice!(0,69-_1.abs*4
).center(108)}*o="";(?$..?F).map{t=t[2..].gsub(_1,t[0,2])};g=(1..8).m
ap{[cos(a=Math::PI*k=_1/4.0)*k/6,k*sin(a)/3,k/2]};581.times{|i|f=
[x=y=0]*2592;t.bytes{|c|x+=c<72?(y+=1;-x):1.upto(c<73?17:0){q
=x+w=_1%6-2;f[(y+v=_1/7-1)*54+q]+=1/(hypot(w*2,v)*(i-400)
+1)}};2592.times{|j|u=8;g.map{u+=sin(j%108*_1-j/108*_
2+i*_3)/(_3+0.1)};v,w,x,y=[u/15,(j%108+i*6)/4e2-1
,f[j/2],i/2e2-1].map{_1.clamp(0,1)};c=((v*w*(
1-y)+x*y**3)*15).round;z=->c{c<6?16+c*36:
c<11?166+c*6:216+c};o<<"¥e[48;5;#{z[c
]}m¥e[38;5;#{z[i<250?15-(15-c)*i/
250:i<400?c:(c*(580-i)+(5+j/1
08*5/12)*(i-400))/180]}m"
+h[j];j%108>106&&o<<"
¥e[0m¥n"};$><<o;o
="¥e[A"*24;sl
eep(0.02)
}}*''
)
Transcendental
Ruby
Imbroglio
Contest
for RubyKaigi
What’s “TRICK”
• A contest for esoteric Ruby programming
– The "most esoteric" Ruby program wins
Transcendental /ˌtransɛnˈdɛnt(ə)l/
“relating to a spiritual realm” *
「霊的領域に関する」
「世俗を超越した」「超絶技巧」
Imbroglio /ɪmˈbrəʊlɪəʊ/
“an extremely confused, complicated, or
embarrassing situation” *
「極めて混乱した、恥ずかしい事態」
* Oxford Dictionaries
This talk
• TRICK 2022 (2021/09/09 – 2022/07/31)
– 1st: TRICK 2013
– 2nd: TRICK 2015
– 3rd: TRICK 2018 FINAL
– 4th: TRICK 2022 Returns
• This talk announces the winners of TRICK 2022
About TRICK 2022
TRICK 2022 Judges
Yusuke Endoh (@mametter)
Koichiro Eto (@eto)
Shinichiro Hamaji (@shinh)
Yutaka Hara (@yhara)
Yukihiro Matsumoto (@yukihiro_matz)
Sun Park (@sunleonid)
Darren Smith
TRICK 2022 Judges
eto
– Media Artist.
– Senior Researcher at AIST.
shinh
– The admin of anarchy golf.
– IOCCC winner.
yhara – The author of Japanese esolang book.
matz – The creator of Ruby.
leonid – The 1st super Ruby golfer.
flagitious
– The author of GolfScript.
– Yet another super Ruby golfer.
– Full-time Ruby committer at Cookpad.
– The world’s No.1 IOCCC player.
mame
Submission statistics / Judging process
• Submission statistics
– Thank you for all the submitters!
• Judging process
– Each judge gives each entry a score of 1..10
– Any information about the authors is not read
• Awards
– Three medals
– Seven judges' awards
JP
US
DE
UK
CAUTION
• This talk has a lot of spoilers!
– Get out here if you want to enjoy analyzing the winners
• The winning entries will be published at:
No k!
http://github.com/tric /trick2022/
Winners & Judges' Prizes
Winner »
eto shinh yhara matz leonid flagitious mame score
“Most calculating”
『最も計算高いで賞』
SAITOH Jinroq
mame award
6 3 2 6 3 4 7 4.43
jimlock.rb mame award
“Most calculating”
puts(
{
2*0-2-2 => 2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2,
2/2+0*2 => 2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2+2+2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0,
2+2/2+0 => 2*2*2+0+2-2/2+0+2*2*2+0+2*2*2+0-2+2+2+0+2*2*2+0+2+2+2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2,
0*2+2*2 => 0+2*2*2+0+2+2+2+0+2+2+2+0+2+2+2+0+2+2+2+0+2+2+2+0+2+2+2+0+2+2+2+0+2*2*2+0+2*2*2+0+2/2,
2*0*2*2 => 2+0+2*2*2+0+2*2*2+0+2*2+2+0+2-2/2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2,
2/2+0-2 => 2*2+0+2*2*2+0+2*2*2+0+2*2*2+0-2-2-2+0-2-2-2+0+2+2+2+0+2+2+2+0+2*2*2+0+2*2*2+0+2+2+2+0,
2*2*2+0 => 2*2*2+0-2*2*2+0+2-2*2+0+2*2*2+0-2-2-2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2,
0<2|2-2 => 0+2+2+2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0-2*2*2+0-2*2*2+0+2*2,
2<0|2-2 => 2+0-2*2*2+0-2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2+2+2+0+2,
}.map { _2.chr }.join)
2*0-2-2 => 2+0+2*2 * 2+0+2*2 * 2+0+2*2*…
map { _2.chr }
+2+0+2,
jimlock.rb
• Judges' comments
– mame: I like this kind of piece that would never have been written except for
TRICK.
– eto: Simple and nice.
mame award
“Most calculating”
Winner »
eto shinh yhara matz leonid flagitious mame score
“Most playable”
『最も遊べるで賞』
Don Yang
yhara award
7 4 7 6 4 7.5 5 5.79
omoikane.rb yhara award
“Most playable”
require'zlib';eval(Zlib::Inflate.inflate((%w$eF6VVdtym0gQfZ+vwKOSFoFAIPkiO245sp
2K8+B1lZ2KU4XZLIaRhCUBAiQ0F uTbtwd0201elgeY6enu6cvpQ 8zmC
z9m1A/bbhgk4ZRRcguWZb Q00 27
hR7zNloFvrfwcmTaJ4R Es+ s
IsY0ZtldZaf4x/yEy u
Tdik5g3bTY+1/5aH z a
Fee6N64jqB3Nb1d lO fO
dE6X+XCsrZe6WHs aSfFB
1xapi12xYwW6K4 mSZYtNz9 +fHio179/V9VD
J+QJqDOfzzn3Yv zyYSLeXowbXOOGsxg3fJTgRshxPSzXbsT5K9qxGMUoQxXOUj5a8
Lcln0R8vOQ+vjP ur/g05bMFd2PO3YRzBwOIpn4qt/k+ixUApdKVFEsXUgwr/ZWn
LKkOef5oce38zC4 USgsStebw5UHf1FfP/CDx3xnxh1J0aXbyfH7ZPSdR7AepR
DdKUhqGUjJzptOXg BK28lPCAm+rJGEBrzonU6pEypw8g/RTm7c75A4irUNc
MEkIY7Bs8goj6BAHe mQIDI5MEsHg8fM3y7D1NPwxJPcQ9cHQTczCbEeY
h6F3iO+DlcAMApiC68 IbTMCwlR6501N/xpJ1nuWhigg5sVUr6xuNR
nZ5pwkXp+jgxFbkZ63TV PHYLkhozeEG7tod24rguX1sw7mQ2daz
FtkY1jscEzYErS+vWry5xj Df66ftrnpGLEUzdR1hEcWht3BTeS
to6liUq3WORc19CC2uoruVGtk ffIBhjjI4LUiBDlAdQzn0gJI7
lDT1ZLwYDrEVVStbPBfNkLk2R++v Sd9sNGIn8C6xNI0GG+ouXl
lGiMFzvM2GIXlXsc6iJwWJRQZrkgGVau ukoGSJK4qFUDraqZbpot
tNcUPQN8ozqa7V1uK0tzktElqntXVQSO7Y8b Hj2INledIKFExh5gd
o+GgF/R4WWl7qi8h1Enb0wTxuYtXNrq0ucVZ9HMZ qKnHrtyoP9iFyys
m7U81i8BJT9cm aKR3V0c7QvLQ0Z7V1Vp QuXgKhEe7QvkX2
k8XRxq2gr dADXSqgWhA/ha/jmDm eHrAMqzL2Ec6
xyBt1q e4HHlvJGTx9vf3ypz 5iqTtuYk5HJ
uYh00 F2ndx4t85Or5nnvSZ iG6u3RGhaG
Wg/ 3+o9G5bkDbIytaoJl T/mjkMB9Lh
qG kkxGETtxUUQZrtQ0N es3/ldSWr
r J8vRTNXF/Hbya0pc 9y8cJHER2
k 6O4 I14cIuxYEATDGiCA dko8jARh
L fqIZ8h4v Fr2LbIC83NEgFe /6TR8C7P
c TSzbXC6k8pGs /S+DVusDyNHy1 RL08t7kk
w Zi3BODQxnmjDh IyVjFVKcSBwJ DKOcL5w
u 0yApzqkPY2tcAg GnUJz6ZXC+CA 1M8786x
7 /qdMpkX0WCIjnY ZgdlemVWR3Ba fgFcnN1
EF ZeLKte7/XLhAHh kJiZGSAG6JB CbKVjTV
oDw dlbCqKMoVoB/m V4JeMU0jKq/I k9HOECT
AH4j FIIR2u9yPycLFHf 3jPX/2cBatLbD DqcteaV
FFTd0 83xPFN3WITsgqzoTJh9rWUVShO U5lBQphx
ZypKA9E 7lDPTskkgVsuUZwCkMIG WKkK1gXe0
iIhHe97e7 khyi+qVBc rp+1XnFTTq
eEz+fB/Sfp 4dunR7GhLVp
OrHKDf/Ijc1/P ffkEKjZ4wlpU2
OiPCGYJuBn7w3SX wWmljEeVctneGbb
pEMy/UFAxoGq6r3gl5 cX1JvqV0iluxDRubqk
oZ6M0EMRD1a0nnM/tFeWE pvpbiHy5vd4B7DJxFMD2kx
HQ2zCVmJOymIpopwKg4CDDHO /Rsk/ZUeRMMfSuhu1BKkr6PsJS
9dtdgU4FAYvHXfzfCcc314MnamX2h pD+nTKSZPnPHr8EAyTHC2nDttU9wlvbKeo
bNn1yw5jtVJItId87q51wuvlVbI4+x463txhtLeghLabxgpF/ABGuDRE=$*'').unpack('m')[0]))
omoikane.rb
• A snake game whose code is snake-shaped
yhara award
“Most playable”
omoikane.rb
• Snake game
– Game over if you hit an obstacle or your own body
– The snake grows longer if it eats food
• Originality
– The snake can toggle between black and white
– The snake can eat an item of his color
– Inspired by Ikaruga(斑鳩)
• A famous shooter video game with this scoring rule
• It does not use curses but io/console
yhara award
“Most playable”
omoikane.rb
• Judges' comments
– yhara: At first it looked just like a simple snake game but actually it has some
tweaks and many features to make the game enjoyable.
– shinh: It was a snake, not Python.
yhara award
“Most playable”
Winner »
eto shinh yhara matz leonid flagitious mame score
“Most likely to be required”
『最も必要となりそうで賞』
Yutaka HARA
flagitious award
7 3 N/A 6 5 8 6 5.83
yhara.rb flagitious award
“Most likely to be required”
︙
using Kumimoji
a = 1.㌢㍍
b = 10.㍉㍍
p a == b #=> true
puts a + b #=> 0.02㍍
㌢㍍
㍉㍍
Japanese "kumimoji"
(composite characters)
centi meter
milli meter
yhara.rb
• A DSL using "kumimoji" (composite characters)
– like 100.days of ActiveSupport
flagitious award
“Most likely to be required”
︙
a = 1.㌋
b = 1.㍄
printf "1㌋ ≒ %f㍄¥n", a/b
#=> 1㌋ ≒ 1.150779㍄
nautical mile
mile
yhara.rb
• Dare not obfuscate, but cleanly implement with meta-programming
• Attention to detail
flagitious award
“Most likely to be required”
%w(
1 ㌅ = 2.54 ㌢㍍
1 ㌳ = 30.48 ㌢㍍
...
).each_slice(5) do |_, name, _, amount, unit|
define_method name do
amount.to_r.send(unit)
end
end
alias ㌖ ㌔㍍
meter
kilo
kilometer
(in a character)
yhara.rb
• Judges' comments
– flagitious: I'd like to encourage non-obfuscated entries in the future that none
the less become confusing for high complexity or other oddities. And I
thought it was well done.
– eto: Practical, even! Attempting to use Unicode characters in a practical
way is fun, just like APL.
– shinh: Is this just normal code?
– yhara (camouflage comment): It's interesting that 1 Kairi is so close to 1 Mile
flagitious award
“Most likely to be required”
Winner »
eto shinh yhara matz leonid flagitious mame score
“Most reactive and diffusive”
『最も反応的かつ拡散的で賞』
Sergey Kruk (lonelyelk)
matz award
9 6 5 8 7 7 6 6.86
lonelyelk.rb matz award
“Most reactive and diffusive”
$q=%w[$w&&!$s&&exit;W=130;H=80;HS=40;puts(q="$q=%w[#$q].join;at_exit{eval($q)}".chars.each_slice(W).map(&:join).join("¥n"));$s&&$w
&&(puts('$w="'+$w+?"+";at_exit{$s=#$s}¥n#{q}")||exit);srand($s||=Random.new_seed);f=0.03+0.03*rand;k=0.057+0.006*rand;g=32.chr+".:
-=+*#%@";mc=800+400*rand;spt=(1..(3+5*rand)).map{{x:(W*rand).floor,y:(H*rand).floor,r2:(10+10*rand)**2}};z=(0...H).map{|y|(0...W).
map{|x|{a:1.0,b:spt.any?{|s|s[:r2]>=(x-s[:x])**2+(y-s[:y])**2}&&1.0||0.0}}};n=(1..H).map{(1..W).to_a};$l=->(v,x,y,s){(l=x-1)<0&&l=
W-1;(r=x+1)>=W&&r=0;(t=y-1)<0&&t=H-1;(b=y+1)>=H&&b=0;0.2*(v[y][r][s]+v[y][l][s]+v[t][x][s]+v[b][x][s])+0.05*(v[t][r][s]+v[t][l][s]
+v[b][r][s]+v[b][l][s])-v[y][x][s]};print('$w="');pc=4;mc.to_i.times{|c|(0...W).map{|x|(0...H).map{|y|la=$l.call(z,x,y,:a);lb=$l.c
all(z,x,y,:b);a=z[y][x][:a];b=z[y][x][:b];n[y][x]={a:(a+1.0*la-a*b*b+f*(1-a)).clamp(0,1),b:(b+0.5*lb+a*b*b-(k+f)*b).clamp(0,1)}}};
z,n=[n,z];((c+=1)/mc*W).floor>pc&&(pc+=1)&&print(?.)};puts(?.*(W-pc));dmi,dma=z.map{|l|l.map{|v|v[:a]-v[:b]}.minmax}.flatten.minma
x;z.each_slice(H/HS){|l|W.times{|x|sum=l.inject(0.0){|a,l|l[x,1].inject(a){|s,v|s+((v[:a]-v[:b]-dmi)/dma)}};print(g.chars[(sum*W*H
S*g.size/(W*H)).clamp(0,g.size-1).floor])};puts};ft=?"+";at_exit{$s=#$s}";puts(?.*(W-ft.size)+ft+10.chr+q)].join;at_exit{eval($q)}
lonelyelk.rb matz award
“Most reactive and diffusive”
$q=%w[$w&&!$s&&exit;W=130;H=80;HS=40;puts(q="$q=%w[#$q].join;at_exit{eval($q)}".chars.each_slice(W).map(&:join).join("¥n"));$s&&$w
&&(puts('$w="'+$w+?"+";at_exit{$s=#$s}¥n#{q}")||exit);srand($s||=Random.new_seed);f=0.03+0.03*rand;k=0.057+0.006*rand;g=32.chr+".:
-=+*#%@";mc=800+400*rand;spt=(1..(3+5*rand)).map{{x:(W*rand).floor,y:(H*rand).floor,r2:(10+10*rand)**2}};z=(0...H).map{|y|(0...W).
map{|x|{a:1.0,b:spt.any?{|s|s[:r2]>=(x-s[:x])**2+(y-s[:y])**2}&&1.0||0.0}}};n=(1..H).map{(1..W).to_a};$l=->(v,x,y,s){(l=x-1)<0&&l=
W-1;(r=x+1)>=W&&r=0;(t=y-1)<0&&t=H-1;(b=y+1)>=H&&b=0;0.2*(v[y][r][s]+v[y][l][s]+v[t][x][s]+v[b][x][s])+0.05*(v[t][r][s]+v[t][l][s]
+v[b][r][s]+v[b][l][s])-v[y][x][s]};print('$w="');pc=4;mc.to_i.times{|c|(0...W).map{|x|(0...H).map{|y|la=$l.call(z,x,y,:a);lb=$l.c
all(z,x,y,:b);a=z[y][x][:a];b=z[y][x][:b];n[y][x]={a:(a+1.0*la-a*b*b+f*(1-a)).clamp(0,1),b:(b+0.5*lb+a*b*b-(k+f)*b).clamp(0,1)}}};
z,n=[n,z];((c+=1)/mc*W).floor>pc&&(pc+=1)&&print(?.)};puts(?.*(W-pc));dmi,dma=z.map{|l|l.map{|v|v[:a]-v[:b]}.minmax}.flatten.minma
x;z.each_slice(H/HS){|l|W.times{|x|sum=l.inject(0.0){|a,l|l[x,1].inject(a){|s,v|s+((v[:a]-v[:b]-dmi)/dma)}};print(g.chars[(sum*W*H
S*g.size/(W*H)).clamp(0,g.size-1).floor])};puts};ft=?"+";at_exit{$s=#$s}";puts(?.*(W-ft.size)+ft+10.chr+q)].join;at_exit{eval($q)}
$w="..............................................................................................................................
%@@@%#*+-:. .:-+*#%%%#*+=:.. .-+*%@@@@@@@@@%%%%%%%%###*+=====+****+=:.. ..:-=+*#%@@@@@@@%#*+=::.... ..-=*##%%%#*+-:.....:-+*#
#%%@@%#*+-:. ..:-=++*++=-:... ..:=*#%@@@@@@%##********++=--:....:-=+++=-:. ..:-=+*##%%%%##*=-:...........:-=+***+=--:......:-=+
=*#%%%%#*=-:. ...::---:::......:=+#%@@@@%#*+=-::::-----:::.. .:=+**+=-:. ...:--=+++++=-:......::::....::-----::::........:-
:-+*#%%%#*=:. .............:-+*#%%%%#+=:.. .............:-+*###*+-:.. ...::---::......:--===-::.........:::::::... ..
.:=+#%%%#*=:. ..........::-=+*##**=-:. ............:-=*#%%%%#*+=-:.........:::......:-=+****+=-:.......::-=====-:..
.:=+#%%%#*+-:....::---=---::::--=+++==-:. ....::------::...::-+*#%@@@@%%#*+=--::::::::::....:-+*#%%%%#*=-:.....:-=+**##*+=:..
.:=*#%@@%#**+===++******+=--::::----::....::-==++****+=-::...::=+*#%@@@@@@%%#*+=--:::::::::::=+*%@@@@@%#+-:.....:-+*#%%%%#*=-..
.-+#%@@@@@%%####%%%%%%#*+=-::..::::::.:::-=+*#%%%%%%#*=-......:-=*#%%@@@@@@%%#+=-:::::::::-=+*%@@@@@@%#+=:. .:=*#%@@@@%#+=:.
.-+#%@@@@@%%%##%%%%%%%#*+=-:.....:::::::-=+##%@@@@@@%#+-. ...:-=+*#%%@@@@%#+=::..::::::-=+#%@@@@@@@#*=:. .:=*#@@@@@%#*=:.
.:-+#%@@%%#*+++++**###**+=-::..::::::::::-=+*#%@@@@@@@%*=:. ...::-=+*#%%%#*=:.. ....:::--=*#%@@@@@%#*=:. .:=*%@@@@@%#+=:.
.:=*#%%%#+=::...::-====--::::::-----::...::-=+*#%@@@@@@%*=:.. .....:-=**#*+=:. ....::::-=+*#%%%%%#+=:.. .:=*%@@@@@%*=-..
.:=+##%#*+-. ...::::...::-=+++++=-:......:-=+*#%@@@@%#*=-:::.........:-++*++-:....:::::::::-=++****+=-:....:-+*%@@@@%#+-:.
.:-+*#%##+-:. ............:-=+*####*=-:. ..:-+*%@@@@@%%#*+=--:... .:-+*##*++=====---:::.:::-------::....:-+*#%%%%#+-:.
.:-+*#%%#*=-.. ...::---:::....:-=*#%%%%#*+-:.. .:=*%@@@@@@@%%#*=-:... .:-+#%%%%%###**+=--::........::.......:-=*####*+-:.
:-+#%%%%#+-:....:--=+++=--:....:-+*%%@@@%#+=:... ..-+#%@@@@@@@%%*+-:.. .:=*#%@@@@%%##*+=-::...................:-=++++=-:. .
=+#%%%%#*=:.. ..:=+*###*+=:.....:-+#%@@@@%#*=-:.. ..:=*#%@@@@@@%#*=-:. .:-+#%@@@%%##*+=--::......::-----::......::----:.. ..:
*#%%%%#*=-.. ..-+*%%%%%*+-:. .:-+#%@@@@@%*=-:.. ...:-+*#%%@@%%#*=-:. .:-+*%%%%#*+==-::.......:--=+*****+==-::....:::......:-+
%%@@%#*=-.. .:=*#%@@@%#*=:. .:-+#%@@@@@%*=-.. ...:-=+*****++=::.. ..-=*#%%%#*+-:... ...:-=+*##%%%%%%##*+=--::.......:-=+#
@@%%#*=-.. .-+#%@@@@@%#+-.. .:=*%@@@@@@%*=:. ...::------::.....:-+*#%%%#*=-. ..:-=+*##%%%%%%%%%%%%##*+=-:.....:-=*#%
@%%#+=:.. ..-+*%@@@@@@@#*=:.. .:=*#@@@@@@@%*=-.. .............:=+#%%@@%#+-. .:-=+*##%%%%#*****##%%@%%#*+=:.....-=*#%@
%#*+-:. ..:-+*%@@@@@@@@%*+-:.....:-+#%@@@@@@@%#+=:... ..........:-=*#%@@%%*+-. .:-=+*#%%@@%#*+-:..:-+*#%%%%#+=:.. .:-+#%%%
#*=-.. ..:-=+*#%%@@@@@@%#*+-::....:-=+*#%%@@@@@%##*+=--:::::::::.....:-=*#%%%%#*=-:...:-=*#%%@@@%#*=:. .:=*####*+-:. ..:=*#%%%
*=-.. ..:-=++******####**+=-::....:::-==+**##%%%%%%###******+++=--:..::-=+*##**+-::..:-=+*#%%%%%#*=-.. .:-=+**++-:.. .:-+##%%#
=-.. .:-==+++=--::---===--:::..........:::-==+*##%%%%%%%%%%%%%##*+-::.::--=====-::..::-=+**###**+=-:.......::--==--:.. ..-=*####*
-.. .:-=+**+=-.. ................... ...:-=++*##%%%@@@@@@%%#*=-::...::::::.......::--=====-::.........:::::::... .:=+*###*=
:. .:-=*###*=:. ........:::::::.... ...::-==+**##%%%%%##*=-:............................ ...:::::::.... .:-+*###*=-
. ..-=*#%%%#+-:......::::--===++++==--::... ....::--=+*****+=-:.........:::::::..... ..:-==+++=-::. .:-+*###*+-:
.:=+#%@@%%*+-:...::--=++*###%%%%###*++=-::.. ..:------::.....::--=++++++==--::........:-=+*######*+=-::::-=+*#%%%#+=:.
.-=*%%@@@%#*=-:.::--=+*#%%@@@@@@@@@@%%#**+=-::.... ....:::......:-=+*##%%%%%%##**++=======+**#%%%@@@%%%##*+++**#%%@@@%#+-.
..-+*%@@@@%#*=::..::-=+##%@@@@@@@@@@@@@@%%%#**+==---::::::.........:-=+##%@@@@@@@@%%%%%########%%%%@@@@%%%%%######%%@@@@@@%*=:.
.:=*#%@@@%*+-:....::-=+*#%%%%%%%%%%%%%@@@@@@%%%###**++==--::....:-=+*#%@@@@@%%%#######%%%%%%%%%%%%%###****+++++**#%%@@@@@%#+-.
.:-+#%%%%#*=:. ....::-==++*+++=====+**#%%@@@@@@@@%%%#*+=-::....:=+#%%@@%%#**+=======++***#####**++=---::::::::--=+*#%%@@%#+=:.
. .:=+##%##+-:. ....:::::::......:-=+*##%%%@@@%%%#*+=-:....:-+*#%%%%#*=-:........:::--=====--::... ..:-=+#%%%#*+-:
:. .:-+*##*+=:. ........... ..:--=+***###**++=-:.. .:=+#%%##*=-.. ............. ...... .:-=*#%%#*+-
-:. .:-=+***+=--::::-----::............. ....::---==---::.. .:-+*###*+-:. ....... .........:::-----::... .:=*##%#*+
+=:. ..:-=+*************+=-::...::::::.... ......... ..:=+##%#*+-:. ..::------:::........::--=++****++=-:. .:=*#%%#*
#*=:.. .::=+*#%%%@@@@@%%#*=-:...::------::.. ....:-=+*#%%%#+=:. ..:-=+**###**++==--:::::--=+*#%%%%%#*+=:.. ..-+*#%%%
%#*+-:. .:-+*%%@@@@@@@%#*=:....::-=+***+=--:.......:::--==+*#%%@@%%#+-.. .:-=*#%%@@@@@%%##*+=-::::-=+*#%@@@@@%#*=-.. .:-+#%%%
@%%#+=:.. .:-+*%@@@@@@@%*+-:. ..-=*#%%%%##**++====++++***##%%%@@@%%*=-.. ..:=+#%@@@@@@@@@@%#*+-::..::-=*#%@@@@@%#*=:.. .:=*#%@
@@@%#*=-.. .:-+#%@@@@@%#+-:. .:-+#%@@@@@@@%%%################%%%%#*=:.. ..:=+#%@@@@@@@@@@%#*+-:......:-+*#%@@@%#*+-:....:-+*#%
.............................................................................";at_exit{$s=242772018625937582781958127315352038949}
$q=%w[$w&&!$s&&exit;W=130;H=80;HS=40;puts(q="$q=%w[#$q].join;at_exit{eval($q)}".chars.each_slice(W).map(&:join).join("¥n"));$s&&$w
&&(puts('$w="'+$w+?"+";at_exit{$s=#$s}¥n#{q}")||exit);srand($s||=Random.new_seed);f=0.03+0.03*rand;k=0.057+0.006*rand;g=32.chr+".:
-=+*#%@";mc=800+400*rand;spt=(1..(3+5*rand)).map{{x:(W*rand).floor,y:(H*rand).floor,r2:(10+10*rand)**2}};z=(0...H).map{|y|(0...W).
map{|x|{a:1.0,b:spt.any?{|s|s[:r2]>=(x-s[:x])**2+(y-s[:y])**2}&&1.0||0.0}}};n=(1..H).map{(1..W).to_a};$l=->(v,x,y,s){(l=x-1)<0&&l=
W-1;(r=x+1)>=W&&r=0;(t=y-1)<0&&t=H-1;(b=y+1)>=H&&b=0;0.2*(v[y][r][s]+v[y][l][s]+v[t][x][s]+v[b][x][s])+0.05*(v[t][r][s]+v[t][l][s]
+v[b][r][s]+v[b][l][s])-v[y][x][s]};print('$w="');pc=4;mc.to_i.times{|c|(0...W).map{|x|(0...H).map{|y|la=$l.call(z,x,y,:a);lb=$l.c
all(z,x,y,:b);a=z[y][x][:a];b=z[y][x][:b];n[y][x]={a:(a+1.0*la-a*b*b+f*(1-a)).clamp(0,1),b:(b+0.5*lb+a*b*b-(k+f)*b).clamp(0,1)}}};
z,n=[n,z];((c+=1)/mc*W).floor>pc&&(pc+=1)&&print(?.)};puts(?.*(W-pc));dmi,dma=z.map{|l|l.map{|v|v[:a]-v[:b]}.minmax}.flatten.minma
x;z.each_slice(H/HS){|l|W.times{|x|sum=l.inject(0.0){|a,l|l[x,1].inject(a){|s,v|s+((v[:a]-v[:b]-dmi)/dma)}};print(g.chars[(sum*W*H
S*g.size/(W*H)).clamp(0,g.size-1).floor])};puts};ft=?"+";at_exit{$s=#$s}";puts(?.*(W-ft.size)+ft+10.chr+q)].join;at_exit{eval($q)}
lonelyelk.rb matz award
“Most reactive and diffusive”
$q=%w[$w&&!$s&&exit;W=130;H=80;HS=40;puts(q="$q=%w[#$q].join;at_exit{eval($q)}".chars.each_slice(W).map(&:join).join("¥n"));$s&&$w
&&(puts('$w="'+$w+?"+";at_exit{$s=#$s}¥n#{q}")||exit);srand($s||=Random.new_seed);f=0.03+0.03*rand;k=0.057+0.006*rand;g=32.chr+".:
-=+*#%@";mc=800+400*rand;spt=(1..(3+5*rand)).map{{x:(W*rand).floor,y:(H*rand).floor,r2:(10+10*rand)**2}};z=(0...H).map{|y|(0...W).
map{|x|{a:1.0,b:spt.any?{|s|s[:r2]>=(x-s[:x])**2+(y-s[:y])**2}&&1.0||0.0}}};n=(1..H).map{(1..W).to_a};$l=->(v,x,y,s){(l=x-1)<0&&l=
W-1;(r=x+1)>=W&&r=0;(t=y-1)<0&&t=H-1;(b=y+1)>=H&&b=0;0.2*(v[y][r][s]+v[y][l][s]+v[t][x][s]+v[b][x][s])+0.05*(v[t][r][s]+v[t][l][s]
+v[b][r][s]+v[b][l][s])-v[y][x][s]};print('$w="');pc=4;mc.to_i.times{|c|(0...W).map{|x|(0...H).map{|y|la=$l.call(z,x,y,:a);lb=$l.c
all(z,x,y,:b);a=z[y][x][:a];b=z[y][x][:b];n[y][x]={a:(a+1.0*la-a*b*b+f*(1-a)).clamp(0,1),b:(b+0.5*lb+a*b*b-(k+f)*b).clamp(0,1)}}};
z,n=[n,z];((c+=1)/mc*W).floor>pc&&(pc+=1)&&print(?.)};puts(?.*(W-pc));dmi,dma=z.map{|l|l.map{|v|v[:a]-v[:b]}.minmax}.flatten.minma
x;z.each_slice(H/HS){|l|W.times{|x|sum=l.inject(0.0){|a,l|l[x,1].inject(a){|s,v|s+((v[:a]-v[:b]-dmi)/dma)}};print(g.chars[(sum*W*H
S*g.size/(W*H)).clamp(0,g.size-1).floor])};puts};ft=?"+";at_exit{$s=#$s}";puts(?.*(W-ft.size)+ft+10.chr+q)].join;at_exit{eval($q)}
$w="..............................................................................................................................
.::--=+*#%@@@@@@@%*=:....:=*%@@@@%*=-.. ......... ...::-----::..:-=+#%%%%%#*+-:...:=*#%%%%#+=::::-=++*++=-::......::::::........
=++*##%@@@@@@@@@@#+-:. ..:=*#%@@@@%#+=::...........::--=++**++=-::.::-=+****+=-:...:-+#%%%%#+=:...:-+*#%%%#*+=-:..............::--
#%%%%@@@@@@@@@@@@#+-:. ..:-+#%@@@@@@%#*+==========++**##%%%%%#*+-:...::--==--::....:=*#%%%#*=:....:=*#%@@@@%%#*+=-:.......::--=+*#
@@@%%%%%%%%@@@@@@%*=:.....:=+#%@@@@@@@@%%%#######%%%%%@@@@@@@%#*+-:......::.... .:=+#%%%%#+-:. ..-+#%@@@@@@@@%#*+==-----==+*##%%%
%%##*+====+*#%@@@%#+=:.....:=+*#%@@@@@@@@@@@@@@@@@@@@@%%%%%%@%%#*+=:.............:=*#%@@%#*=:....:=*%@@@@@@@@@%%###****###%%%@@@@@
#*+=-:.....-=*#%@@%#*=-:....:-=+*##%%%%%%%@@@@@@@@%%##**+++*#%%%%#*+==--::::::--=*#%@@@@%#+-:...:-+#%@@@@@@%%#****#%%%@@@@@@@@@%%#
=-::... ..:=*#%@@%#*+-:......:--=+++++*****#####*++=-:...:=+#%@@%%%##*******##%%@@@@@@#*=-:..:-=+#%@@@@%#*=-::-=+#%@@@@@@@@%#*+=
............:-=*#%@@@%#*+-:........::::::::---====--:.. :=*%@@@@@@@%%%%%%@@@@@@@@@@%*+-:...::=+*#%%%#*=-.. .-+#%@@@@@%#+=-::
..::----::...:-=*#%@@@@%#*+-::................::::::... .:=*%@@@@@@%%%%%%%@@@@@@@@@%#+-:.....:-=+****+=-.. .:+#%@@@%#*=:....
:-=++**+=-:....:=+#%@@@@@%%#*=--::.........:::::::::::::::--+*#%%%%##***+*****###%%%%%#*=:. ..:-=++++=-:......:=*#%@@%#+-:. ..
=+*#%%%#*+=:....:=+#%@@@@@@@%##*++===========---:::--==++**##%%%#*+=-:::::::----==+****+=-:.....:-=++++=--:...::-+*#%@@%#*=:.....:
+#%@@@@@%#+=:....:=+*#%@@@@@@@@%%%%%%%%%%###*+=--:--=+*#%%@@@@%#*=:...............:--=++++======+**##**=-:::::-=*#%@@@@%*=-.....:=
#%@@@@@@@%#+-:...::-=+**###%%%%@@@@@@@@@@@@%#*=-:::-=*#%@@@@@@%*=:.. ...::::::......:-+*###%%%%%%@@%%#*=-:..:-=*#%@@@@%#+-:....:-+
%@@@@@@@@@#*=-::..:::---====++*##%@@@@@@@@@%#+-:...:=+#%@@@@@%#+-:....:-==++==-:....:-+*%%@@@@@@@@@@%#*=:....-=*%@@@@@%*=:.. ..:=*
@@@@@@@@@%#+=-::::::::.......::-=+*#%@@@@@@%#+-. ..:=+#%%@@%#*+-:..:-=+*####*+=::..:-+*%@@@@@@@@@@@%#+-.. ..-+#%@@@@%#+-:. .:-+#
@@@@@@@%#*+=-:::::---:::... ...:-=*#%@@@@%#+-. ..:-+*####*+=::.:-=*#%%@@%#*+-:..:-=*%@@@@@@@@@@@%*=:. ..-+#%@@@@%*=:. ..-=*%
@@@@@@%*=-:...::-==+++==--:.... ..:-+*%@@@@%#+-:. ..::-=+++==-:::-=+#%@@@@@%#+-::.:-=+#%%@@@@@@@@%#*=:....:=*%@@@@%#+-:. ..:=*%@
@@@@@%*=:. ..:-=+*##%###*+=-::... ..:=*#%@@@%#+=-:......::---:::::-+*%@@@@@@%*=-:...:-=++*###%%%%%#*+-:...:=+#%@@@@%#+-:...:=+#%@
@@@@@%*-. ..:-+*#%@@@@@@%#*+=-:.....-=*#%@@@%%#*+=-::....::::::::-=*#%@@@@@#*=:.....:::----===++++==-::::-+*%%@@@%#*=-:..:-=*#@@
@@@@@%*=-.....:-=*#%@@@@@@@@@%#+=-:...:-+*#%@@@@@%##*++==----:::::::-=*#%@@@@#*-:. ............:::---::::-=+*#%@@%#*+-::.::-=*#%@
%%@@@%%*+-:....:-+#%@@@@@@@@@@%#+=-:::::-=+*#%%%@@@%%%%###*++=-::...::=+#%@@@%#+-:....:::..........::::::::-=+*#%%#*=-:...::--=+*#
+*#%%%%%#+=-:...:=+#%@@@@@@@@@%#+=-:::::::-==+**#%%%@@@@@@%%#*=-:.. ..-+#%@@@%%*++========---:::::::::.....:-=****=-:. ....:::--=
:-=+#%%%%#*=-:...:-+#%@@@@@@%%*+=-::::::::..:::-=++*#%@@@@@@%#*=:. :=*%@@@@@@%%%%%######****+++==-:.. :-+***+-:. ..........
..:-+*#%%%#*=:....:-+*#%%%%##+=-::.:::--:::......::-=+#%%@@@@%#*=:. .:=*%%@@@@@@@@@@@@@@@@@@@%%%%#*+=-:. ..-=*#%##*=--::--:::...
...:-+*%%%%#+=:....:-=+****+=-:....:-=+++=--:.. ..::=+*#%@@@%%#*==--=+**###########%%%%@@@@@@@@@@@%%#*+===+*#%@@@@%%##****++=-:.
:...:-+#%%%%#+-:.....:-----::.....-=+*####**+=-:.......:-+*#%%@@@%%###****++==========++**##%%%@@@@@@@%%%%#%%%@@@@@@@@@@@@@%%#*+=-
-:...:=*#%@@%#+=:...............:-+*#%@@@@@%%#*+=--::...::-+*#%@@@@@@%##+=-::.........:::--=++**##%%%%%%%%%%@@@@@@@@@@@@@@@@@@%#+=
-:....-+#%@@@%#*=-:...........:-=+#%@@@@@@@@@@%%#*+==-::..::-+*%@@@@@%#*=::.................:::-==+++*****#####%%%@@@@@@@@@@@@%#+=
:.. ..-+#%@@@@@%#*+=--:::::--=+*#%%@@@@@@@@@@@@%%##*+=-::....-=*%@@@%#*=-:...::------::... .....::::-------====++*##%%%%%%%##*=-
.....:=*%@@@@@@@@%%##*******##%%%%%%%#############**+=-::.. ..-+#%@%%*+-:..::-=+*****++=-::......................::--==++***++=-::
...:-=*%@@@@@@@@@@@%%%%%%@@@@@@@%%#+==-----=========--::... .:-+#%%%#*=:...:-=+*#%%%%%%##*+==--:::::..................::::-::::...
:-=+*#%@@@@@%%#######%%@@@@@@@@@#*=:.............:::........:-+#%@@%#+-:...:-=+##%@@@@@@@@%%##**++++====----::::..................
+*##%%@%%%#*+==----==+*#%@@@@@@%*=:. ...............::::-=+*#%@@@%#+-:. ..:-=+*#%%@@@@@@@@@@@@%%%%######***++==--::.... ....:-=
%%@@@%%#*+=-:........:-+*#@@@@@%*=:.....:------------==++**#%%@@@@@@%#+-......:-==+*#%@@@@@@@@@@@@%%%%@@@@@@@%%%##*++=--:::--==+*#
@@@%%#*+=::............:=+#%@@@%*=:...::-=+**##########%%%%%@@@@@@@@@%#+=::......::--+*%@@@@@@@%#***##%%@@@@@@@@@@@%%%###**###%%@@
@%%#*+-::....:::::::....:=*#%@%%*+-:..:-=*#%%@@@@@@@@@@@@%%%#####%%@@@%%#*+=-::......:=*#@@@@%*+-:::-=+*##%%@@@@@@@@@@@@@@@@@@@@@@
#*+=-:.....:-==++==-:...:-+#%%%%#+-:..:-=*#%@@@@@@@@@@@%%#*+=----=*#%@@@@%##+=-:.. .-+#%%%%*=:. ..:-==+**#%%@@@@@@@@@@@@@@@@%%
=--:.....:-=+*###*+=-:...-=*%%@%#*=:...:-+*#%%%@%%%%##**+=-:.. ..-+#%@@@@@%%*+=:.....-+*%%%#*=:. .....::::--=+*#%@@@@@@@@@%%##*+
:... ..:-+*#%%%%#*+-:...:=*#%@%%*=:....:-=++****+++=---::.... .:=*#@@@@@@%#*=-:...:=*#%%%#*=-:...::::.......:-=+*#%%%%%##*+=--:
......:-+*#%@@@@@%*=-....:=*#%@@%#+-.. ...::----:::...............:-+#%@@@@@%#*=-:..:-+*%%%%#*=-::::-----::... ..::-=+++++=-::....
.............................................................................";at_exit{$s=317871915447465570974410760196813665823}
$q=%w[$w&&!$s&&exit;W=130;H=80;HS=40;puts(q="$q=%w[#$q].join;at_exit{eval($q)}".chars.each_slice(W).map(&:join).join("¥n"));$s&&$w
&&(puts('$w="'+$w+?"+";at_exit{$s=#$s}¥n#{q}")||exit);srand($s||=Random.new_seed);f=0.03+0.03*rand;k=0.057+0.006*rand;g=32.chr+".:
-=+*#%@";mc=800+400*rand;spt=(1..(3+5*rand)).map{{x:(W*rand).floor,y:(H*rand).floor,r2:(10+10*rand)**2}};z=(0...H).map{|y|(0...W).
map{|x|{a:1.0,b:spt.any?{|s|s[:r2]>=(x-s[:x])**2+(y-s[:y])**2}&&1.0||0.0}}};n=(1..H).map{(1..W).to_a};$l=->(v,x,y,s){(l=x-1)<0&&l=
W-1;(r=x+1)>=W&&r=0;(t=y-1)<0&&t=H-1;(b=y+1)>=H&&b=0;0.2*(v[y][r][s]+v[y][l][s]+v[t][x][s]+v[b][x][s])+0.05*(v[t][r][s]+v[t][l][s]
+v[b][r][s]+v[b][l][s])-v[y][x][s]};print('$w="');pc=4;mc.to_i.times{|c|(0...W).map{|x|(0...H).map{|y|la=$l.call(z,x,y,:a);lb=$l.c
all(z,x,y,:b);a=z[y][x][:a];b=z[y][x][:b];n[y][x]={a:(a+1.0*la-a*b*b+f*(1-a)).clamp(0,1),b:(b+0.5*lb+a*b*b-(k+f)*b).clamp(0,1)}}};
z,n=[n,z];((c+=1)/mc*W).floor>pc&&(pc+=1)&&print(?.)};puts(?.*(W-pc));dmi,dma=z.map{|l|l.map{|v|v[:a]-v[:b]}.minmax}.flatten.minma
x;z.each_slice(H/HS){|l|W.times{|x|sum=l.inject(0.0){|a,l|l[x,1].inject(a){|s,v|s+((v[:a]-v[:b]-dmi)/dma)}};print(g.chars[(sum*W*H
S*g.size/(W*H)).clamp(0,g.size-1).floor])};puts};ft=?"+";at_exit{$s=#$s}";puts(?.*(W-ft.size)+ft+10.chr+q)].join;at_exit{eval($q)}
lonelyelk.rb matz award
“Most reactive and diffusive”
$q=%w[$w&&!$s&&exit;W=130;H=80;HS=40;puts(q="$q=%w[#$q].join;at_exit{eval($q)}".chars.each_slice(W).map(&:join).join("¥n"));$s&&$w
&&(puts('$w="'+$w+?"+";at_exit{$s=#$s}¥n#{q}")||exit);srand($s||=Random.new_seed);f=0.03+0.03*rand;k=0.057+0.006*rand;g=32.chr+".:
-=+*#%@";mc=800+400*rand;spt=(1..(3+5*rand)).map{{x:(W*rand).floor,y:(H*rand).floor,r2:(10+10*rand)**2}};z=(0...H).map{|y|(0...W).
map{|x|{a:1.0,b:spt.any?{|s|s[:r2]>=(x-s[:x])**2+(y-s[:y])**2}&&1.0||0.0}}};n=(1..H).map{(1..W).to_a};$l=->(v,x,y,s){(l=x-1)<0&&l=
W-1;(r=x+1)>=W&&r=0;(t=y-1)<0&&t=H-1;(b=y+1)>=H&&b=0;0.2*(v[y][r][s]+v[y][l][s]+v[t][x][s]+v[b][x][s])+0.05*(v[t][r][s]+v[t][l][s]
+v[b][r][s]+v[b][l][s])-v[y][x][s]};print('$w="');pc=4;mc.to_i.times{|c|(0...W).map{|x|(0...H).map{|y|la=$l.call(z,x,y,:a);lb=$l.c
all(z,x,y,:b);a=z[y][x][:a];b=z[y][x][:b];n[y][x]={a:(a+1.0*la-a*b*b+f*(1-a)).clamp(0,1),b:(b+0.5*lb+a*b*b-(k+f)*b).clamp(0,1)}}};
z,n=[n,z];((c+=1)/mc*W).floor>pc&&(pc+=1)&&print(?.)};puts(?.*(W-pc));dmi,dma=z.map{|l|l.map{|v|v[:a]-v[:b]}.minmax}.flatten.minma
x;z.each_slice(H/HS){|l|W.times{|x|sum=l.inject(0.0){|a,l|l[x,1].inject(a){|s,v|s+((v[:a]-v[:b]-dmi)/dma)}};print(g.chars[(sum*W*H
S*g.size/(W*H)).clamp(0,g.size-1).floor])};puts};ft=?"+";at_exit{$s=#$s}";puts(?.*(W-ft.size)+ft+10.chr+q)].join;at_exit{eval($q)}
$w="..............................................................................................................................
::..... ................:-+*#%@@@@@@@%#*+=-:.. ..:-=+**######**++++==++++***##%%%@@@@@@@@@@@@@@@@%%#+=-:....:-=*##%#*+=:......:
.......::::::::::........:=+*%%@@@@@%%#*+=-:.. ..:-+*#%%%@@@@@%%%%%############%%%%@@@@@@%%%####%%%%##*=-:....:-=*####*=-.......
::---=============------=+*#%@@@@@%%#*+-::.. ..:-=+##%%@@@@@@@@@@@@@%%%%###********#####*++=---=+*#####*=-:....:-=*###*+=:......
=++***############*****##%%@@@@%%#*+=-:... ...:-=+*#%%%%%#####%%%%%%%%##**++=--::---=====-::. .:-+*####*=-:....:-+*#%##*+=-----
*##%%%%%%%%@@@@@@@@@@@@@@@@@@%%#*+=-:.. ...:-=+*#%%%%#*+==-==++*****++==--::.......::::::.. .:-+*###*+=:.. ..-=*#%%%%##*****
##%%%%%%%%%%%%%%@@@@@@@@@@%%#*+=-:... ..::-+*##%%%%%#+-:.....::-----:::............:::::..... .-=*###*+=-.. ..:=*#%@@@%%%####
***************###%%%%%%%##*+=-:.. ...:-=+*#%%@@@%%#+=:. ..............:::::::::::::::::... ..-=*###*+=:.. ..-=*#%@@%%%##***
----------:::---==++*****+=-:... ...:-=+*#%%@@@@%%#*=-:........... ..:--=====-----------::....:=+*###*=-:....:-+*%%%%#*+==---
.......... ....::-----::... ...:-=+*##%%@@@%%%#*+=-:....::::::::::::-==+***++==-----==+++======+*####*+=::....:=*#%%#*+=:.....
.......... .....:::......::-==+*#%%%%%%%##*++=-::...::--======+++**######*+=-::::-=+*#######%%%%%%#*=-:....:-+*#%#*+-:. ..
::------:::::..............:::-=+**#%%%%%%##*++=-::......::-=+**#####%%%%@@@%%*+=:....:-=*#%@@@@@@@@@@%#*+-:.....-=*#%%#*=:. ..:
-==++****++++====---:::::::--=+*#%%%%%%##*+=-::... ..:-=+*##%%%%%@@@@@@@@%#*=:. ..-=*#%@@@@@@@@@@%#+=:.. ..:-+#%%%%*+-:....::
-=+*##%%%%%%%%###*++=--:::-=+*#%%%@%%##*=-:... ...:-=+**########%%@@@@@@%#*=:. .:=*#@@@@@@@@@@@%*=-.. ..:=*#%@@%#*=-:..::-
--=*#%%@@@@@@@@%%%#*+=-:::-=+*#%%%%%#*=-:........:::-=++*####*++====+*#%@@@@@%*=-.. ..:=+#%@@@@@@@@@%#+-:. .:-+#%@@@@%#*+-:::::
::-=*#%@@@@@@@@@%%#*+=-:..:-=*#%%%#*+=:......::-==+**##%%%##*+-:. .:-+*%%@@@%#*=-:....:-+*#%@@@@@@@%#*=:.. .:=*#%@@@@@%#*=-:::.
...-=*#%@@@@@@%%#**+=-:....:-+*###*+-:.....:-=++*##%%%@@%%#*+-:. ..-+*#%%%%#*+=-::.:::-+*#%%@@@%%#*=-:. .:-+#%@@@@@@%#*+-::..
...:=+#%%%%%##*++=--:... ..-=*##*+=:.....:-=+*#%%@@@@@@%#*+=:........:-+**###**+=--::::::--=+*####*+=-:.. ..:=*#@@@@@@%#*+=-:...
..:-=+*###*+==-:::.... .:-+*##*+=:.....:-=+*##%%@@@%%#*+-::........::-===+++==--::::....::--======-:.. ..:=*#%@@@@@%#*+--:....
:--=++**+=-::........ ..:-+*#%%#*+-:.....:-==+*######*+=-:....:::::....:::::::::::::........::::-:::.....:-=*#%@@@@%#*+=-:.....:
=++**++=-::.. .....::::-=+*#%%@%%#*+-:......::-==++++=--:....::----::............::::::::::...::::::....:-=+#%%@@@%%*+=-:.....:--
*****+=-:......::--==++*##%%@@@@@%%#*+=-::......::::::::....::-=++++=-::.. ...::--===++====---:::::..::-=+*#%@@@@%#*=-:......:-=+
###*+=-:...::--=+*###%%%@@@@@@%%%##**++==---::............::-=+*#####*+=------==++**#######**++=-:::.::-=+#%%@@@@%#*=-:.. ...:=+*#
%#*+=::...:-=+*##%%@@@@@@@@@%#**+======++++++=--::.......:-=+*#%@@@@@%%##******###%%%%%@@@%%%#*+=-:..::-+*%%@@@@%#*=-... ...-=+##%
%#*=:....:-=+*#%%@@@@@@@@%%#*+-::...::-+**####*++=-::...:-=+#%%@@@@@@@@@%%%%%######%%%%%@@@@%%#+=-:...:=+#%@@@@%#*=-... ..:-=+#%%%
%*+-.. ..:-=*#%%@@@@@@%%#*+=-:.. ..-=*#%%%%%##*+-::.::-=*#%@@@@@@@@@%%%###****+++++**#%%%%#*+-:....:-+#%@@@%#*=-:.....:-=*#%%@%
%*=:. ..:-=+*#%%%%%##*+=--:..........:-+#%%@@@%%#*=-::::-=+*#%%%%%%%##**+++==---::::::-=+*##*+=-:. .:-+#%%@%%*+-:.....:-=+#%@@@@
%*=:. ..:-==+******+=-::.............:-+*#%@@@%%#*+=-::::-=++*****++==--::::..... .:-++*+=-:.. .:-+#%%%%#*=:......:-+*%@@@@@
%#+:. ..::-======-::.......::::::::::-=+*#%%%%#*+=-::..:::-------::............ ..-=+++=-:. .:=*#%@%%#+-:.....:-=+#%@@@@@
@%*=: ..:::::::.......::-==++==--::--=+*****+==-::.............. .....:::.....::-=+**+=-:.. .:-+#%@@@%#+-:.....::-=*#%@@@@
@%#*=:. ..........::-=+**####*++=------==---::......::...... ...::--========+++*####*+-:...:-=*#%@@@%#*=-......::-=+*#%@@
@@@%*+-. ...:-=+*##%%%%%%##*+=-::::::.......::------:::....:::-==+**##########%%%%##*+=::.::=+#%@@@@@%#*=::.......:-=+#%%
%@@@%#*+-:.. ..::-=+*##%%%@@@%%%#**+--:.........::-=++*****++++==+++**##%%%@@@@@%%%%%%%%##*+=-::::-=+*#%@@@@@%#*=-::........:=*#
%@@@@@@%#*++====++**##%%%%%%%%###**+=-::......::--=+**##%%%%%%%####%%%%@@@@@@@@@@%%%###***++==-::::::-=+*#%@@@@@%#*+=-::... :=*
#%@@@@@@@@@@%%%%%%%%%%%##**+++++==--::.....::-=++*##%%%%%%%%%%%%%%%@@@@@@@@@@%%##**++===---::::::....::-=+*#%@@@@%%#*=-::.. .:+
#%@@@@@@@@@@@@@@@@@@%#*+=--:::::::.......:-=+**##%%%%%####*****###%%%%%%%%%##*++=--:::..........:.......:-=+*%%@@@@%#*+-::.. .:=
#%@@@@@@@@@@@@@@@@%%#+=-:..............:-=+*#%%%%%##**+==------===++******++=--:..... ...:::::::......:-=*#%@@@@%#*=-:... ..-+
#%@@@@@@%%%%%%%%###*+-:.............::-=*##%%%%%##*+=-::.........:::------:::.... ....:--==++==-::.. ..-=*#%@@@%%#+=::....:=+
*#####**++====++++==-::......::::--=++*#%%%%%%#*+=-:........... ...................::--=+**#####*+=-:.. ..-=*#%@@@%#*=-:...:-=+
++++==-::.....::::::::.....::--=+**##%%@@@%%#*+=-:........::::..... .......:::--==++*##%%@@@@@@%#*+-:.. ..-=*#%%%%#*+-::..::-=
---::.. .............::-=+*#%%@@@@@%%#*+=-:.. ..::-=======--:::..:::::--==+**##%%%@@@@@@@@@@@%%*+=:.. .:-=*#%%%#*+=::..:::-
.............................................................................";at_exit{$s=154129094866360313063042721822912717326}
$q=%w[$w&&!$s&&exit;W=130;H=80;HS=40;puts(q="$q=%w[#$q].join;at_exit{eval($q)}".chars.each_slice(W).map(&:join).join("¥n"));$s&&$w
&&(puts('$w="'+$w+?"+";at_exit{$s=#$s}¥n#{q}")||exit);srand($s||=Random.new_seed);f=0.03+0.03*rand;k=0.057+0.006*rand;g=32.chr+".:
-=+*#%@";mc=800+400*rand;spt=(1..(3+5*rand)).map{{x:(W*rand).floor,y:(H*rand).floor,r2:(10+10*rand)**2}};z=(0...H).map{|y|(0...W).
map{|x|{a:1.0,b:spt.any?{|s|s[:r2]>=(x-s[:x])**2+(y-s[:y])**2}&&1.0||0.0}}};n=(1..H).map{(1..W).to_a};$l=->(v,x,y,s){(l=x-1)<0&&l=
W-1;(r=x+1)>=W&&r=0;(t=y-1)<0&&t=H-1;(b=y+1)>=H&&b=0;0.2*(v[y][r][s]+v[y][l][s]+v[t][x][s]+v[b][x][s])+0.05*(v[t][r][s]+v[t][l][s]
+v[b][r][s]+v[b][l][s])-v[y][x][s]};print('$w="');pc=4;mc.to_i.times{|c|(0...W).map{|x|(0...H).map{|y|la=$l.call(z,x,y,:a);lb=$l.c
all(z,x,y,:b);a=z[y][x][:a];b=z[y][x][:b];n[y][x]={a:(a+1.0*la-a*b*b+f*(1-a)).clamp(0,1),b:(b+0.5*lb+a*b*b-(k+f)*b).clamp(0,1)}}};
z,n=[n,z];((c+=1)/mc*W).floor>pc&&(pc+=1)&&print(?.)};puts(?.*(W-pc));dmi,dma=z.map{|l|l.map{|v|v[:a]-v[:b]}.minmax}.flatten.minma
x;z.each_slice(H/HS){|l|W.times{|x|sum=l.inject(0.0){|a,l|l[x,1].inject(a){|s,v|s+((v[:a]-v[:b]-dmi)/dma)}};print(g.chars[(sum*W*H
S*g.size/(W*H)).clamp(0,g.size-1).floor])};puts};ft=?"+";at_exit{$s=#$s}";puts(?.*(W-ft.size)+ft+10.chr+q)].join;at_exit{eval($q)}
lonelyelk.rb matz award
“Most reactive and diffusive”
$q=%w[$w&&!$s&&exit;W=130;H=80;HS=40;puts(q="$q=%w[#$q].join;at_exit{eval($q)}".chars.each_slice(W).map(&:join).join("¥n"));$s&&$w
&&(puts('$w="'+$w+?"+";at_exit{$s=#$s}¥n#{q}")||exit);srand($s||=Random.new_seed);f=0.03+0.03*rand;k=0.057+0.006*rand;g=32.chr+".:
-=+*#%@";mc=800+400*rand;spt=(1..(3+5*rand)).map{{x:(W*rand).floor,y:(H*rand).floor,r2:(10+10*rand)**2}};z=(0...H).map{|y|(0...W).
map{|x|{a:1.0,b:spt.any?{|s|s[:r2]>=(x-s[:x])**2+(y-s[:y])**2}&&1.0||0.0}}};n=(1..H).map{(1..W).to_a};$l=->(v,x,y,s){(l=x-1)<0&&l=
W-1;(r=x+1)>=W&&r=0;(t=y-1)<0&&t=H-1;(b=y+1)>=H&&b=0;0.2*(v[y][r][s]+v[y][l][s]+v[t][x][s]+v[b][x][s])+0.05*(v[t][r][s]+v[t][l][s]
+v[b][r][s]+v[b][l][s])-v[y][x][s]};print('$w="');pc=4;mc.to_i.times{|c|(0...W).map{|x|(0...H).map{|y|la=$l.call(z,x,y,:a);lb=$l.c
all(z,x,y,:b);a=z[y][x][:a];b=z[y][x][:b];n[y][x]={a:(a+1.0*la-a*b*b+f*(1-a)).clamp(0,1),b:(b+0.5*lb+a*b*b-(k+f)*b).clamp(0,1)}}};
z,n=[n,z];((c+=1)/mc*W).floor>pc&&(pc+=1)&&print(?.)};puts(?.*(W-pc));dmi,dma=z.map{|l|l.map{|v|v[:a]-v[:b]}.minmax}.flatten.minma
x;z.each_slice(H/HS){|l|W.times{|x|sum=l.inject(0.0){|a,l|l[x,1].inject(a){|s,v|s+((v[:a]-v[:b]-dmi)/dma)}};print(g.chars[(sum*W*H
S*g.size/(W*H)).clamp(0,g.size-1).floor])};puts};ft=?"+";at_exit{$s=#$s}";puts(?.*(W-ft.size)+ft+10.chr+q)].join;at_exit{eval($q)}
$w="..............................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
......... ............................................................. ....................................................
...... ...... ......::---::...................::---::............ ..................................................
.... ...::::::.. ..::-===--:.................:-=++==-:....... ......................................................
.... ..:-=+++=-:.. ..::-===--:................:-=++++=-:.. .:--===-:... ............................................
... ..:-+*###*+-:. ...:::-:::..................:-====-::. ..:-=+*###*=-:. ...........................................
... ..:-=**#*+=-:. ..............................:::::.. .:-=+*#%@@@%#*=-.. .......................::::................
.... ..:--===-::.. ...................................... ..:=+#%@@@@@%#+=:. .......................::::::...............
..... ......... ......................................... .:-=*#%%%%#*+-:. ........................:::::...............
....... ............................................ ..:-=++++=-:. ..............................................
............................................................... ....::... ................................................
................................................................ ..................................................
................................................................... .......................................................
..................................................................................................................................
..................................................................................................................................
................................ ............................................................................................
............................ . .........................................................................................
.....::::.................. ...::::.. ....................................................................... .............
...:::--:::............... .:-=+++=-:.. .................................................................... ................
...:::---::.............. ..-=*#%##+=:. ................................................................... ...:--==--:... ..
....::::::............... .:-+*#%%#*=:. ................................................................. ..:-=+**+=-:.. ..
.......................... ..:=+***+=-:. ............................................ ................. ..:-+***+=-:... ..
.......................... ..::----:.. ......................................... ..... .............. ...:-====-:.......
........................... ...... ......................................... ...:::::... .............. ....::::.........
............................ ........................................... ..:-=+++=-:.. ............... ...... ......
.............................. ............................................. ..:-+*##*+=-:. ...............................
.................................................................................. ..:-=+***+=:.. ...............................
..........................::----:................................................. ..::-===-:... ...............................
.........................:-==+==-:................................................. ......... ................................
.........................:-==++=-:.................................:................. ...................................
..........................:-----::................................................................................................
.............................:....................................................................................................
..................................................................................................................................
.................................................................................................................:::..............
...............................................................................................................:::::::............
...............................................................................................................:::::::............
.................................................................................................................:::..............
.............................................................................";at_exit{$s=207048293170487523485800825757960625670}
$q=%w[$w&&!$s&&exit;W=130;H=80;HS=40;puts(q="$q=%w[#$q].join;at_exit{eval($q)}".chars.each_slice(W).map(&:join).join("¥n"));$s&&$w
&&(puts('$w="'+$w+?"+";at_exit{$s=#$s}¥n#{q}")||exit);srand($s||=Random.new_seed);f=0.03+0.03*rand;k=0.057+0.006*rand;g=32.chr+".:
-=+*#%@";mc=800+400*rand;spt=(1..(3+5*rand)).map{{x:(W*rand).floor,y:(H*rand).floor,r2:(10+10*rand)**2}};z=(0...H).map{|y|(0...W).
map{|x|{a:1.0,b:spt.any?{|s|s[:r2]>=(x-s[:x])**2+(y-s[:y])**2}&&1.0||0.0}}};n=(1..H).map{(1..W).to_a};$l=->(v,x,y,s){(l=x-1)<0&&l=
W-1;(r=x+1)>=W&&r=0;(t=y-1)<0&&t=H-1;(b=y+1)>=H&&b=0;0.2*(v[y][r][s]+v[y][l][s]+v[t][x][s]+v[b][x][s])+0.05*(v[t][r][s]+v[t][l][s]
+v[b][r][s]+v[b][l][s])-v[y][x][s]};print('$w="');pc=4;mc.to_i.times{|c|(0...W).map{|x|(0...H).map{|y|la=$l.call(z,x,y,:a);lb=$l.c
all(z,x,y,:b);a=z[y][x][:a];b=z[y][x][:b];n[y][x]={a:(a+1.0*la-a*b*b+f*(1-a)).clamp(0,1),b:(b+0.5*lb+a*b*b-(k+f)*b).clamp(0,1)}}};
z,n=[n,z];((c+=1)/mc*W).floor>pc&&(pc+=1)&&print(?.)};puts(?.*(W-pc));dmi,dma=z.map{|l|l.map{|v|v[:a]-v[:b]}.minmax}.flatten.minma
x;z.each_slice(H/HS){|l|W.times{|x|sum=l.inject(0.0){|a,l|l[x,1].inject(a){|s,v|s+((v[:a]-v[:b]-dmi)/dma)}};print(g.chars[(sum*W*H
S*g.size/(W*H)).clamp(0,g.size-1).floor])};puts};ft=?"+";at_exit{$s=#$s}";puts(?.*(W-ft.size)+ft+10.chr+q)].join;at_exit{eval($q)}
lonelyelk.rb
• Reaction-Diffusion System
– A mathematical model of patterns like giraffes, cheetahs, fishes, etc.
– Simulates reaction and diffusion of chemical substances
• … and Quine
– It shows itself twice, at the top and at the bottom
– All the following commands work well
matz award
“Most reactive and diffusive”
$ ruby entry.rb
$ ruby entry.rb | ruby
$ ruby entry.rb | head | ruby
$ ruby entry.rb | tail | ruby
lonelyelk.rb
• Judges' comments
– matz: I love this kind of thing.
– eto: Very beautiful.
– flagitious: Impressive evolving rendering quine.
matz award
“Most reactive and diffusive”
Winner »
eto shinh yhara matz leonid flagitious mame score
“Most global”
『最もグローバルで賞』
Yusuke Endoh
eto award
9 8 8 5 8 9 N/A 7.83
mame.rb eto award
“Most global”
a=0132;eval$s=%q!eval(%q~d,h,Y ___---------___ ,X=*$*.map(&:to_i),45;b=(a+d)%
R=360;s=[v=[include(Math)]] _--- ---_ ;T=PI*2;n=x=0;f=->{(n/=2)%2
>0?1:f[]*2+(n/=2)%2};g=- _- v@v ,,,,,, -_ >{z=f[];z/2*(3-z%2*6)};"
8'8f'y;I;asr1mY?Sr$6r _- ,vv@@@@@@@^''@v,-_ {+Gi{03G3=ZbpUo3l'}Yw
C<Sl;J'x4aQbMAAD}c_@ / ^^^^^^@@@@@@vvv@@@@¥ hG],qDu/[eKyo/rD919e
TPva4BX7FC%#AuzChg / ,v@@vvv,, ^@ ^@@@@@@@@@¥ uS)EmfeV+.m:*k@q)Z
=VxSFP>qxJfHIWd'R /v ,@@@@@@@@@@@v ^^^'''^@@@@¥ MUS4&$r3D>GqL((/C
ea&e'|PS@3aQ@-hL /@@ ,v@@@@@@@@@@@@@@v, '*v, '^@¥ ja+/Lru>]96]d_4W
9o][*A;J&..;a?@ /@@@ @@@@@@@@@@@@@@@@@@@v,,,@@@@@ @@¥ O'x.RmTPRK+Pol#
U;o_wP`}6.g#?y |@@@@v, '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| 0`.lHNxLXjI^#S
5F-XcldGh_BZDc |@@@@@^ '^^@@@@@@@@@@@@@@@@@'@@@@ '@@@@| JTLKD)#e*CUo$.
{c&a46;+AaGW*M |@@@@' '^@@@@@@@@@@@@@ @@@@@v '@@| R5".bytes{n=n*
90+-_1%91};190 |@@^ @@@@@@@@@@@@@ ^^^''' '@| .times{x+=e=(g
[]+g[].i)*T/R; |^' @@@@@@@@@@@@@vv, @| e==0?s<<v=[]:v
<<v[0]=x.rect} | @@@@@@@@@@@@@^' @ | ;$><<(1..(d==0
?h*w=h*4:25*w= | ,@@@@@@@@@@@^' | 80)).map{|i|q=
i/w*6+3;r=i%w;" ¥ v@@@@@@@@@@@ / ¥s'*^,:v@¥nXa=#
{"%04o"%b};eval$ ¥ @@@@@@@@@@@@ / s=%q¥x21#$s¥x21"
[r>0?X&&r==(X+168 ¥ @@@@@@@@^' ,v* / )%R*w/R&&q/6==(90
-Y)*h/180?9:(0..2) ¥ ^^^^^^' ,^ / .all?{e=d==0?cos(q*
T/w/3):(r*3i-120i-q+ ¥ / 73)/Complex.polar(72
,2/4.9);q-=2;y,x=e.re -_, _- ct;e.abs<1&&n+=n-s.ma
p{|s|z=sqrt(1-y*y);c=d== -_v,, _- 0?r*T/(1-w):b*T/R+acos(x
);g=0;s.sum{(g-g=atan2(sin( --__v, __-- o=_1+c),z/tan(_2)+y*cos(o))
/T).round}}.min/9}?n%8:i+9:8]} ```---------``` *""~.gsub(/¥x20.*¥x20|¥n/){})!
mame.rb
• It prints itself with a globe rotated 45 degrees
– Eight execution will return the original code
• The rotation angle can be specified freely
eto award
“Most global”
a=0132;eval$s=%q!eval(%q~d,h,Y ___---------___ ,X=*$*.map(&:to_i),45;b=(a+d)%
R=360;s=[v=[include(Math)]] _--- ---_ ;T=PI*2;n=x=0;f=->{(n/=2)%2
>0?1:f[]*2+(n/=2)%2};g=- _- v@v ,,,,,, -_ >{z=f[];z/2*(3-z%2*6)};"
8'8f'y;I;asr1mY?Sr$6r _- ,vv@@@@@@@^''@v,-_ {+Gi{03G3=ZbpUo3l'}Yw
C<Sl;J'x4aQbMAAD}c_@ / ^^^^^^@@@@@@vvv@@@@¥ hG],qDu/[eKyo/rD919e
TPva4BX7FC%#AuzChg / ,v@@vvv,, ^@ ^@@@@@@@@@¥ uS)EmfeV+.m:*k@q)Z
=VxSFP>qxJfHIWd'R /v ,@@@@@@@@@@@v ^^^'''^@@@@¥ MUS4&$r3D>GqL((/C
ea&e'|PS@3aQ@-hL /@@ ,v@@@@@@@@@@@@@@v, '*v, '^@¥ ja+/Lru>]96]d_4W
9o][*A;J&..;a?@ /@@@ @@@@@@@@@@@@@@@@@@@v,,,@@@@@ @@¥ O'x.RmTPRK+Pol#
U;o_wP`}6.g#?y |@@@@v, '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| 0`.lHNxLXjI^#S
5F-XcldGh_BZDc |@@@@@^ '^^@@@@@@@@@@@@@@@@@'@@@@ '@@@@| JTLKD)#e*CUo$.
{c&a46;+AaGW*M |@@@@' '^@@@@@@@@@@@@@ @@@@@v '@@| R5".bytes{n=n*
90+-_1%91};190 |@@^ @@@@@@@@@@@@@ ^^^''' '@| .times{x+=e=(g
[]+g[].i)*T/R; |^' @@@@@@@@@@@@@vv, @| e==0?s<<v=[]:v
<<v[0]=x.rect} | @@@@@@@@@@@@@^' @ | ;$><<(1..(d==0
?h*w=h*4:25*w= | ,@@@@@@@@@@@^' | 80)).map{|i|q=
i/w*6+3;r=i%w;" ¥ v@@@@@@@@@@@ / ¥s'*^,:v@¥nXa=#
{"%04o"%b};eval$ ¥ @@@@@@@@@@@@ / s=%q¥x21#$s¥x21"
[r>0?X&&r==(X+168 ¥ @@@@@@@@^' ,v* / )%R*w/R&&q/6==(90
-Y)*h/180?9:(0..2) ¥ ^^^^^^' ,^ / .all?{e=d==0?cos(q*
T/w/3):(r*3i-120i-q+ ¥ / 73)/Complex.polar(72
,2/4.9);q-=2;y,x=e.re -_, _- ct;e.abs<1&&n+=n-s.ma
p{|s|z=sqrt(1-y*y);c=d== -_v,, _- 0?r*T/(1-w):b*T/R+acos(x
);g=0;s.sum{(g-g=atan2(sin( --__v, __-- o=_1+c),z/tan(_2)+y*cos(o))
/T).round}}.min/9}?n%8:i+9:8]} ```---------``` *""~.gsub(/¥x20.*¥x20|¥n/){})!
a=0207;eval$s=%q!eval(%q~d,h,Y ___---------___ ,X=*$*.map(&:to_i),45;b=(a+d)%
R=360;s=[v=[include(Math)]] _---@^^@@, ^@@@@---_ ;T=PI*2;n=x=0;f=->{(n/=2)%2
>0?1:f[]*2+(n/=2)%2};g=- _-@@@''''' *^ ''^^^v-_ >{z=f[];z/2*(3-z%2*6)};"
8'8f'y;I;asr1mY?Sr$6r _-^''@^ -_ {+Gi{03G3=ZbpUo3l'}Yw
C<Sl;J'x4aQbMAAD}c_@ /@^, ¥ hG],qDu/[eKyo/rD919e
TPva4BX7FC%#AuzChg / '@ ¥ uS)EmfeV+.m:*k@q)Z
=VxSFP>qxJfHIWd'R / ^@ ^@v¥ MUS4&$r3D>GqL((/C
ea&e'|PS@3aQ@-hL / ,,v@@@@¥ ja+/Lru>]96]d_4W
9o][*A;J&..;a?@ / v@@@vv, ,:'''''@¥ O'x.RmTPRK+Pol#
U;o_wP`}6.g#?y | @@@@@@@@v ,v@@@@@@vv^ | 0`.lHNxLXjI^#S
5F-XcldGh_BZDc | @@@@@@@@@@, v@@@@@@@@@@@, | JTLKD)#e*CUo$.
{c&a46;+AaGW*M | @@@@@@@@@@@ v@@@@@@@@@@@@@@@| R5".bytes{n=n*
90+-_1%91};190 | ^@@@@@@@@@@@v, @@@@@@@@@@@@@@@| .times{x+=e=(g
[]+g[].i)*T/R; | @@@@@@@@@@@@@@ '@@@@@@@@@@@@@@| e==0?s<<v=[]:v
<<v[0]=x.rect} | @@@@@@@@@@@@@' ''^@@@@@@@@@@| ;$><<(1..(d==0
?h*w=h*4:25*w= | ,@@@@@@@@@@@@^ @@@@@@@v| 80)).map{|i|q=
i/w*6+3;r=i%w;" ¥ v@@@@@@@@^^'' @@@@@@^/ ¥s'*^,:v@¥nXa=#
{"%04o"%b};eval$ ¥@@@@@^' @@@@@@'/ s=%q¥x21#$s¥x21"
[r>0?X&&r==(X+168 ¥^' v@@@@@ / )%R*w/R&&q/6==(90
-Y)*h/180?9:(0..2) ¥ v@@@@@/ .all?{e=d==0?cos(q*
T/w/3):(r*3i-120i-q+ ¥ @@@@@/ 73)/Complex.polar(72
,2/4.9);q-=2;y,x=e.re -_ @@@_- ct;e.abs<1&&n+=n-s.ma
p{|s|z=sqrt(1-y*y);c=d== -_ _- 0?r*T/(1-w):b*T/R+acos(x
);g=0;s.sum{(g-g=atan2(sin( --__ __-- o=_1+c),z/tan(_2)+y*cos(o))
/T).round}}.min/9}?n%8:i+9:8]} ```---------``` *""~.gsub(/¥x20.*¥x20|¥n/){})!
45-degree
rotation
mame.rb
• Q. "Didn't you create the same thing?"
• A. Yeah, @mame have created "Qlobe"
eto award
“Most global”
v=0000;eval$s=%q~d=%!^Lcf<LK8, _@7gj*LJ=c5nM)Tp1g0%Xv.,S[<>YoP
4ZojjV)O>qIH1/n[|2yE[>:ieC "%.#% :::##" 97N-A&Kj_K_><wS5rtWk@*a+Y5
yH?b[F^e7C/56j|pmRe+:)B "##% ::##########" O98(Zh)'Iof*nm.,$C5Nyt=
PPu01Avw^<IiQ=5$'D-y? "##: ###############" g6`YT+qLw9k^ch|K'),tc
6ygIL8xI#LNz3v}T=4W "# #. .####:#######" lL27FZ0ij)7TQCI)P7u
}RT5-iJbbG5P-DHB<. " ##### # :############" R,YvZ_rnv6ky-G+4U'
$*are@b4U351Q-ug5 " #######################" 00x8RR%`Om7VDp4M5
PFixrPvl&<p[]1IJ " ############:#### %#####" EGgDt8Lm#;bc4zS^
y]0`_PstfUxOC(q " .#############:##% .## ." /,}.YOIFj(k&q_V
zcaAi?]^lCVYp!; " %% .################. #. " ;s="v=%04o;ev"%
(;v=(v-($*+[45, ":####: :##############% : " ])[n=0].to_i;)%
360)+"al$s=%q#{ "%######. ######### " ;;"%c"%126+$s<<
126}";d.gsub!(/ "##########. #######% " |¥s|".*"/,"");;
require"zlib"|| "########### :######. " ;d=d.unpack"C*"
d.map{|c|n=(n|| ":#########: .######: . " )*90+(c-2)%91};
e=["%x"%n].pack " :#######% :###### #: " &&"H*";e=Zlib::
Inflate.inflate( " ######% .####% :: " &&e).unpack("b*"
)[0];22.times{|y| " ####% %### " ;w=(Math.sqrt(1-(
(y*2.0-21)/22)**(; " .###: .#% " ;2))*23).floor;(w*
2-1).times{|x|u=(e+ " %## " )[y*z=360,z]*2;u=u[
90*x/w+v+90,90/w];s[( " #. " ;y*80)+120-w+x]=(""<<
32<<".:%#")[4*u.count(( " . " ;"0"))/u.size]}};;puts¥
s+";_ The Qlobe#{" "*18+ ( "# :#######" ;"Copyright(C).Yusuke End¥
oh, 2010")}";exit~;_ The Qlobe Copyright(C).Yusuke Endoh, 2010
"Qlobe" in 2010 by @mame
mame.rb
• Q. What is the difference from Endoh's work?
• A. Many new features and improvements!
– The tilted rotational axis (23.4 degrees!)
– Very compressed polygon map data (only 286 letters!)
– Robust spherical trigonometry
– Map dump with a mark of specified lat/long
eto award
“Most global”
mame.rb eto award
“Most global”
$ ruby entry.rb dump
,,,,,,,,,,,
,,vvv@@@@@@@@@@@@@@@@@
''^^@@@@@@@@@@@@@@@@@@@@ ,,,vvvv@@@vvvv,,,
,,,,,, ,,,,,,,,,,''^vvv,, '^@@@@@@@@@@@@@@^^* ,,,,, @ ,vv@@@@@@@@@@@@@@@@@@@@@@vv,,vvvvvvvvvv@vvvvvvvvvv,,
vv@@@@@@@@@@@@@@@@@@@@@vvvv@@@@@@@@@@@@' ,v@@@@@* '^@@@@@^^'' ,v@@@@@@@@@@@*,,,,,vvvvvvvvv@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@v,,
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@' '''^^^ '^^' ,v@@@^ ^^^^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^''
''' '''^^@@@@@@@@@@@@@@@@@@@@, ,@@@vv,, , *@@@@' ,v@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^^^''' v^^'''
'^@@@@@@@@@@@@@@@@@@@@vv, @@@@@@@@@@v, @@, v@@@@@@vv@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ '
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^^''v ^^'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@v
^@@@@@@@@@@@@@@@@@@@@@@@@@@:,,, *^^ ,@@@@@@@@^@@@@@@@^^''''''^^^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^'
'@@@@@@@@@@@@@@@@@@@@@@@@^'' v@@@@^^'^@ '@@@^ ,v @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'
@@@@@@@@@@@@@@@@@@@@@' ^^^^' ' ^' ''^^@@@@@@@,:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ v
@@@@@@@@@@@@@@@@@@@' ,vvv@@@@@@, @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ' *^^
@@@@@@@@@@@@^'^@@^ ,@@@@@@@@@@@@@vvvvvvvvv@@@@@@'^^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
^'^@@@@@^' '^ ,@@@@@@@@@@@@@@@@@@@@@@^@@@@@@@,,, ''^^@@@@@@@@@@@@@@@@@@@@@@@@@@@
'@@@@@ , v@@@@@@@@@@@@@@@@@@@@@@@@'@@@@@@@@@@* '^@@@@@@@@@^^@@@@@@@^^''
'^^@@@@ v@@@@@@@@@@@@@@@@@@@@@@@@@@ ^@@@@@^' '@@@@^'' ^@@@@:
'^^@@v v@@@@@@@@@@@@@@@@@@@@@@@@@@@@ '^' ^@@ '@@@@v
'^ ,,,,, ^@@@@@@@@@@@@@@@@@@@@@@@@@@@@,,,, @' ''@@@^ ,
v@@@@@@@@@v, ^@@@@@@@@@@@@@@@@@@@@@@@@@@@@^ ' ' @
@@@@@@@@@@@@v, @@@@@@@@@@@@@@@@@' ,,vv',,,
v@@@@@@@@@@@@@@v,, @@@@@@@@@@@@@@^ @@@@ @@ ,,
@@@@@@@@@@@@@@@@@@@@@v @@@@@@@@@@@@@ * ''' ^@@vv,
'@@@@@@@@@@@@@@@@@@@@' @@@@@@@@@@@@@ '''^*
^@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@ , ,v@@v, @,
^@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@ v@^ ,v@@@@@@@@@@@
,@@@@@@@@@@@@@' ^@@@@@@@@@@@^ @^ ,v@@@@@@@@@@@@@@@
@@@@@@@@@@@@^ '@@@@@@@@@^ ' @@@@@@@@@@@@@@@@@@,
@@@@@@@@@@', '@@@@@@^' ^@@@@@@@@@@@@@@@@@@
v@@@@@@@^' ^^' ^^^^''' '^@@@@@@@
@@@@@@@ '^@@@ ^v
,@@@@@@ '
@@@@@^
^@@@'
''
'
,,vv,,, ,,,vvvvvv,,,,,,,,vvvvv,,
,,,,,,vvv@@@@@@@@@@@@@ ,vv@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@vvvv,,,,,,,,
,,,,,,, ,,,,*' ,v@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@,vv@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^'
vvvv@@@@@@@@@@@@@@@@@@@@@@@@v@@@@@@@@@@@@@^' ,,vv@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^^'
^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@vvvv,,,,,,,,,,,,,,,vvvvv@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@vv,,,
vvv,,,,::@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@vvvvvvv
mame.rb eto award
“Most global”
$ ruby entry.rb dump 40 36 140
,,,,,vvvvvvvvv,
vv@@@@@@@@@@@@@@@@@@, ,,,,,,
**,,,, ''^@@@@@@@@@@@@@@@@ , ,,vvv@@@@@@@@@@@@vvv,, ,,,,,,,,,,,,,,,,
,,vvvvvvvvvvvvvvvvvv,,,,vvvvv@@@@@@' '@@@vv, '@@@@@@@@^''' ,v@@@@@vvvv, ,,,,,,,,@,v@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@,
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@' '^^@@' '^^^' v@@@^v@@@@@@v@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^^
'''' '''^@@@@@@@@@@@@@@@@@@@ @@vv,, , @@@@' ,v@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^^^'''' v^^'''
'^@@@@@@@@@@@@@@@@@@v, @@@@@@@@@v, @v,,@@@@@@v@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ *'
'@@@@@@@@@@@@@@@@@@@@@@@@@@^^'',@ ^':@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*
^@@@@@@@@@@@@@@@@@@@@@@@v** ''' v@@@@@@@'@@@@@^'''''''''^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'
'@@@@@@@@@@@@@@@@@@@^'' ,@@@^'' '@ '@@' ,,,,,,v@, @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'
'@@@@@@@@@@@@@@@@@@ '':,,,vvv, '@@@@@@v@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'^@ vX
'@@@@@@@@@@@@^@@@ v@@@@@@@@@@,,,,,,,,,@@@@@^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'
'@^@@@@@@^' '^' v@@@@@@@@@@@@@@@@@@:@@@@@@v ''^^@@@@@@@@@@@@@@@@@@@@@@@@@
^@@@v @@@@@@@@@@@@@@@@@@@@@v^@@@@@@@@v ''^@@@@@@@@^@@@@@@@^^''
'^^@v@' @@@@@@@@@@@@@@@@@@@@@@@v'@@@@^' @@@@^'' '@@@@:
''^@@ @@@@@@@@@@@@@@@@@@@@@@@@@, ^' @@ @@@@v
'* ,,,,,vvv ^@@@@@@@@@@@@@@@@@@@@@@@@vvv* ' :^@^' ,
@@@@@@@@@@v ^^^^^^^^^@@@@@@@@@@@@@@@@' , '
@@@@@@@@@@@@v ^@@@@@@@@@@@@@^ v@@ vv
@@@@@@@@@@@@@@@@vv,, ^@@@@@@@@@@@' , ^^' '' '*vv,,
^@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@, ''^^*,
'^@@@@@@@@@@@@@@@^ @@@@@@@@@@@@ ,vv, ,v
'^@@@@@@@@@@@@@ @@@@@@@@@@@@' @' ,v@@@@@@v@@v
@@@@@@@@@@@@' '@@@@@@@@@@' ' ,v@@@@@@@@@@@@@v
@@@@@@@@@@' '@@@@@@@@ ^@@@@@@@@@@@@@@@v
@@@@@@@@^'^ '@@@^'' @@@@@@^@@@@@@@@@
@@@@@@' ' ''' '^@@@@@ ,
v@@@@@' '^ ''
@@@@@'
@@@^
'' ,
,,vvv@@vvv,, ,,,,vvv@@@@@@vvvvvv@@@@@vvv,,,
, ,vvvvvvvvvvvvvvvv@@@@@@@@@@@@@@@@@ ,,vv@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@vvvv*
,,,,vvvv@@@@vvvvvvvvvv,,,,,,vvvvvvvvv@^' ,vv@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^'
^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@v,,,, ,,,,,,vvv@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@,,
,,,,,,:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@vvvvvvvv,
36°N
140°E
Here!
This feature is an homage to IOCCC 1992 "Best Small Program"
mame.rb
• Judges' comments
– eto: Earth! High artistic point. It contains polygon data of the world map. Very
interesting.
– shinh: The compression ratio looks amazing. I think there is enough
difference from "Qlobe".
– mame (camouflage comment): It is almost the same as my "Qlobe", but there
seems to be enough novelty in the technical aspect.
eto award
“Most global”
Winner »
eto shinh yhara matz leonid flagitious mame score
“Most accessible”
『最もアクセシビリティがある賞』
Yutaka HARA
leonid award
8 6 N/A 9 10 8 8 8.00
yhara.rb leonid award
“Most accesible”
%;;;;Symbol.define_method(:method_missing){|n|t="#{self}#{n[..-2]}"; n[-1]=="⠠" &&
eval(t.unpack("U*").map{((_1&64)/8+(_1&56)*2+(_1&135)).chr}*""+t)||:"#{self}#{n}"}
:⠥⠥⠥⠐⡝⠐⠒⡬⠽⠚⡘⠚⠘⠒⡂⡦⠐⡝⠐⡘⠙⡂⠴⠵⠶⠐⠶⠼⡐⠻⡑⠐⠓⡕⡞⠐⠫⠼⠺⡱⡶⠷⡂⠼⡝⡫⡭⡂⡴⡝⠻⡖⠳⡰⠱⠺⠻⡂⠶⡔⠺⡝⡴⡫⠘⡔⡦⡕⠙⡭⡔⡴⡫⡦⡕⠙⡖⡖⡭⡂.
⠼⡜⡜⠒⡚⠓⡻⠶⡖⡲⡷⡱⡶⡽⡖⠒⡂⡒⠱⡔⡺⡝⠺⡖⠵⠱⠳⡰⡯⠻⡴⡱⠳⠵⡐⡦⡑⡖⡵⠱⠸⡐⠖⡚⡲⡷⡱⡶⡑⡂⠱⡖⠵⠱⠳⡰⡻⡼⡴⡼⠐⠼⡜⡜⠒⠓⡻⡴⡽⡖⠒⡽⡂⠼⡜⡜⠒⠓⡻⡺⡽.
⠓⡻⠥⠥⠥⡽⠒⡂⠼⡖⡲⡷⡱⡶⡐⠒⡬⡶⠒⡑⡂⠵⡶⠴⡂⡠⠐⡝⠐⠕⠹⡻⠕⡛⡛⡛⡛⠫⡹⡵⠲⡷⡴⡖⠴⠵⠶⡱⡶⠵⡯⡵⠵⠼⡰⡷⠴⡐⡚⡵⠵⠼⡰⡷⠴⡯⡵⡱⠻⠻⡱⡶⠷⡑⡻⡼⡶⡼⠼⡝⠒.
⠓⡻⠻⠵⡴⠶⡽⠓⡻⡶⡫⡖⡖⡕⠚⡭⡽⠒⡛⠐⡶⡫⡕⠙⡭⡝⡝⠒⡬⠽⠚⡘⠚⠘⠒⠐⠖⠖⡂⠵⠾⠱⡴⡐⠼⡖⠽⡶⠸⠱⠳⡳⡐⠒⠭⡒⠒⡑⡖⡵⠱⠸⡻⡐⡐⡯⠙⠖⠞⠜⡑⡗⡘⡓⡐⡯⠙⠖⠝⠞⡑.
⡒⠚⡓⡐⡯⠙⠖⠙⠛⠝⡑⡑⡖⠳⡰⠺⡽⡒⠒⠒⡓⠼⡑⡼⡼⡚⠒⠓⡻⠻⠵⡴⠶⡽⠓⡻⡶⡽⠒⡽⡂⡽⡖⠷⠻⠽⠲⠐⠒⡬⡬⠽⠚⡘⠚⠘⠒⡔⠒⡬⠽⠚⡘⠚⠘⠒⡂⡠⡠⠐⡝⠐⡠⡖⠷⠻⠽⠲⠐⡗⡖.
⡗⡔⠒⠐⠒⡂⠴⠵⠶⠐⠴⠵⠳⡐⠳⡑⡂⠺⠵⠼⠽⠺⡶⠐⠳⠐⡱⠶⠐⠳⡝⡝⠒⡚⠒⡼⡼⠳⡝⡝⠒⡖⠒⡂⠽⠐⡝⠐⠳⡖⠽⡶⠸⠱⠳⡳⡐⠒⠭⡒⠒⡑⡫⠘⡭⡂⡐⠽⠖⠞⠜⡑⡗⡘⡓⡐⠽⠖⠝⠞⡑.
⡒⠚⡓⡐⠽⠖⠙⠛⠝⡑⡂⠵⡶⠴⡂⠴⠵⠶⠐⠺⠴⡐⠸⡸⡔⠐⠿⡔⠐⡰⡑⡂⡐⠘⡖⡖⡖⡰⡗⠜⡑⡖⠵⠱⠳⡰⡻⡼⠾⡼⡂⡐⠘⡖⡖⡖⠿⡗⠚⡑⡖⠵⠱⠳⡰⡻⡼⠽⡼⡂⡸⡝⠽⡒⠚⡛⡹⡝⠾⡒⠜.
⡂⡳⡝⠸⡸⡫⡹⡭⡫⡸⡭⡂⡱⠶⠐⠫⠼⠺⡱⡶⠷⡝⡝⡝⡳⠐⡂⠸⠺⡱⡶⠼⠐⡳⡂⠵⡴⠻⡱⠶⠐⡳⡂⡶⡝⠸⡸⡫⡹⡭⡫⡸⡭⡼⠸⡸⡫⡹⡭⡫⡸⡓⠙⡭⡜⡜⠛⡼⡂⠸⡸⡫⡹⡓⠙⡭⡫⡸⡭⡜⡜.
⠙⡼⠸⡸⡫⡹⡓⠙⡭⡫⡸⡓⠙⡭⡜⡜⠜⡼⡂⠸⡸⡫⡹⡓⠚⡭⡫⡸⡭⡜⡜⠚⡼⠸⡸⡫⡹⡓⠚⡭⡫⡸⡓⠙⡭⡜⡜⠝⡼⡂⠸⡸⡫⡹⡓⠛⡭⡫⡸⡭⡜⡜⠞⡼⠸⡸⡫⡹⡓⠛⡭⡫⡸⡓⠙⡭⡜⡜⠟⡂⠸.
⠺⡱⡶⠼⠐⡫⠘⡸⠚⡘⠘⠘⡓⡶⡭⡖⠸⠱⠳⡳⡐⠒⠭⠒⡑⡂⠵⡶⠴⡂⡽⡂⠸⠽⠼⠻⡂⡽⡂⠵⡶⠴⡂⠴⠵⠶⠐⠺⠽⡶⡐⡸⡑⡂⠸⠺⡱⡶⠼⠐⠒⠕⠕⡬⡶⡬⠵⡫⠚⡢⠒⡂⠳⠳⡝⠶⠼⡐⡸⡖⠼.
⡷⡯⠻⡑⡖⡴⡱⡶⠵⠻⡖⡵⠱⠸⡻⡯⠙⡖⠳⡰⡷⡵⠸⡖⠳⡰⠱⠺⠻⡽⡂⡵⠻⡝⠳⠳⡖⠶⡴⠱⠼⡯⡵⠱⠸⡻⡼⠺⡷⠿⡼⡂⡐⠘⡖⡖⠛⡑⡖⡵⠱⠸⡻⡼⡹⡹⡼⡂⠺⡷⠿⡖⠶⡴⠱⠼⡯⡵⠱⠸⡻.
⡼⠳⡼⡂⡶⡝⠴⠵⠳⡐⠳⡑⡂⡱⠶⠐⡡⡶⠼⠵⠷⠵⠺⡝⡝⡝⡶⡂⡫⡶⡫⡹⡹⡓⠘⡭⡔⡶⡫⡹⡹⡓⠜⡭⡭⡂⠵⡴⠻⡱⠶⠐⡹⡹⡝⡝⠘⡂⡫⡶⡔⠘⡭⡂⠵⡴⠻⠵⡂⡫⠘⡔⠘⡭⡂⠵⡶⠴⡂⡽⡂.
⡽⡂⡽⡂⠳⠺⡝⡵⠻⡖⡵⠱⠸⡻⡯⠙⡖⡵⠱⠸⡻⠘⡽⡽⡂⡰⡝⠳⠺⡖⠻⡱⡺⠵⡂⠿⡝⠳⠺⡫⠘⡭⡖⠻⡱⡺⠵⡂⠾⡝⡐⠘⡖⡖⡖⠿⡑⡖⠶⡴⠱⠼⡯⡵⠱⠸⡻⡼⡸⡼⡐⠘⡖⡖⡖⡰⡑⡖⡵⠱⠸.
⡻⡼⡹⡼⡫⡸⡔⠐⡹⡭⡽⡽⡖⠻⡰⠽⠶⠶⡴⠵⡂⡶⡝⠙⡂⠴⡶⡝⠙⡖⠘⠚⠘⡂⡴⡷⡷⠸⠐⠴⡷⡂⠸⠺⡱⡶⠼⠐⠒⡬⠵⡫⠙⡛⠙⡠⠒⡂⡶⡖⠶⡴⡷⡷⠺⡖⠼⡱⡵⠵⠻⠐⠴⡷⡂⡸⡔⡹⡝⠾⡖.
⠻⡰⡱⠶⠼⡂⠳⡝⡵⠻⡫⡹⡭⡫⡸⡭⡂⠳⠺⡫⡹⡭⡫⡸⡭⡝⠳⠐⡱⠶⠐⠳⡂⠾⡖⠵⡵⠸⠼⡹⡟⠖⠖⠲⠺⠵⠱⡳⡂⠵⡶⠴⡂⡶⡒⡝⠴⡶⡂⠸⠽⠼⠻⠐⡠⡠⡂⠺⠴⠐⠳⠺⡔⠿⡔⡰⡂⠻⡴⠵⠵.
⠸⠐⠘⡖⠘⠙⡂⠲⠺⠵⠱⡳⠐⡱⠶⠐⠾⡖⠵⡵⠸⠼⡹⡟⡂⠵⡶⠴⡂⠸⠺⡱⡶⠼⠐⠒⡬⠵⡫⠙⡛⠙⡠⠒⡂⠸⠽⠼⠻⠐⡠⡂⠸⠽⠼⠻⠐⠳⠳⡖⡵⠱⠸⡐⠖⡚⡲⡷⡱⡶⡑⡂⠵⡶⠴⡂⠺⠽⡶⠐⡚⠠
yhara.rb
• The braille part is a symbol and method chain
• This braille part represents the main code
– Eight-dot braille represents a byte (8-bit) sequence
leonid award
“Most accesible”
:⠥⠥⠥ … ⡖⡭⡂.
⠼⡜⡜⠒ … ⡻⡺⡽.
⠓⡻⠥⠥ … ⠼⡝⠒.
︙ ︙
⠸⠐⠘⡖ … ⡶⠐⡚⠠
Symbol's colon Symbol's body method call's period
method
name
yhara.rb
• Judges' comments
– eto: Cool animation that the dots appear slowly. It's unprecedented as the
beauty of the source code.
– shinh: Very impressive.
– mame: Abuse of Braille!
leonid award
“Most accesible”
Winner »
eto shinh yhara matz leonid flagitious mame score
“Most orderly code”
『最も整然としたコードで賞』
Tomoya Ishida (tompng)
shinh award
7 10 10 7 8 9.5 9 8.64
tompng.rb shinh award
“Most orderly code”
rule = $*[00]&.to_i || 30
h ||= $*[01]&.to_i || 32
[ % if % TRICK-2022 %% %]
# ] if a /%{(?<a>)/ =~ %} if + %} - %[
# } if b /%<(?<b>)/ =~ %> if - %> + %{
# > if c /%+(?<c>)/ =~ %+ if + %+ - %<
# + if d /%-(?<d>)/ =~ %- if - %- + %+
# - if e f, g, h, / =~ %/ if def e(f, g, h, *) =
# + if d /%-(?<d>)/ =~ %- if g.map! do rule.[] _1.join.to_i 2 end.!
# > if c /%+(?<c>)/ =~ %+ if !(g = *[g[-1], *g, g[0]].each_cons(3))
# } if b /%<(?<b>)/ =~ %> if puts(g.join.tr '01', ' #') || h > 0 &&
# ] if a /%{(?<a>)/ =~ %} if !g ||= [*g = [0] * h, 1] + g if h -= 1
eval(File.read f ||= __FILE__)
tompng.rb
• One-dimensional cellular automaton
shinh award
“Most orderly code”
$ ruby tompng3/entry.rb
#
###
## #
## ####
## # #
## #### ###
## # # #
## #### ######
## # ### #
## #### ## # ###
## # # #### ## #
## #### ## # # ####
## # ### ## ## # #
## #### ## ### ### ## ###
## # # ### # ### # #
## #### ## # # ##### #######
## # ### #### # ### #
## #### ## ### ## ## # ###
## # # ### # ## ### #### ## #
## #### ## # ###### # # ### ####
## # ### #### #### ### ## # #
## #### ## ### # ## # # # ### ###
## # # ### # ### ## # ### ## # # # #
## #### ## # ### # # #### # # ## ######
## # ### #### ## ##### # ##### # # #
## #### ## ### # ## # # ## # ##### ###
## # # ### # ## # #### ## # ## ## # ## #
## #### ## # ### # # # ### #### # ## # ## # ####
## # ### #### #### ## ## ### # # #### # # #
## #### ## ### # ## # # ### # ## #### ### ## ###
## # # ### # ## # # ##### # ###### # # ## # # #
## #### ## # ### # # #### #### #### ## # # #########
$ ruby tompng3/entry.rb 90
#
# #
# #
# # # #
# #
# # # #
# # # #
# # # # # # # #
# #
# # # #
# # # #
# # # # # # # #
# # # #
# # # # # # # #
# # # # # # # #
# # # # # # # # # # # # # # # #
# #
# # # #
# # # #
# # # # # # # #
# # # #
# # # # # # # #
# # # # # # # #
# # # # # # # # # # # # # # # #
# # # #
# # # # # # # #
# # # # # # # #
# # # # # # # # # # # # # # # #
# # # # # # # #
# # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
tompng.rb
• It is very difficult to read this piece
• The main TRICK:
– If a local variable x is defined, it is a division
– If a local variable x is not defined, it is a method call
shinh award
“Most orderly code”
x /y #/
x(/ y #/)
x / y #/
tompng.rb
• A simplified version
shinh award
“Most orderly code”
a /%!(?<a>)/ =~ %! if + %! - %[
#! if (code2; exit)
#] if (code1; false)
eval(File.read($0))
a /%!(?<a>)/ =~ %! if + %! - %[
#! if (code2; exit)
#] if (code1; false)
eval(File.read($0))
a /%!(?<a>)/ =~ %! if + %! - %[
#! if (code2; exit)
#] if (code1; false)
eval(File.read($0))
a /%!(?<a>)/ =~ %! if + %! - %[
#! if (code2; exit)
#] if (code1; false)
eval(File.read($0))
method call
regexp
(and defines a) string literal string literal
tompng.rb
• A simplified version
– This executes "code1" and reloads itself
– Note that a local variable "a" is now defined!
shinh award
“Most orderly code”
a /%!(?<a>)/ =~ %! if + %! - %[
#! if (code2; exit)
#] if (code1; false)
eval(File.read($0))
tompng.rb
• With a local variable "a" defined
shinh award
“Most orderly code”
a /%!(?<a>)/ =~ %! if + %! - %[
#! if (code2; exit)
#] if (code1; false)
eval(File.read($0))
a /%!(?<a>)/ =~ %! if + %! - %[
#! if (code2; exit)
#] if (code1; false)
eval(File.read($0))
a /%!(?<a>)/ =~ %! if + %! - %[
#! if (code2; exit)
#] if (code1; false)
eval(File.read($0))
a /%!(?<a>)/ =~ %! if + %! - %[
#! if (code2; exit)
#] if (code1; false)
eval(File.read($0))
string literal string literal
comment
division
tompng.rb
• When a local variable "a" defined
– Execute "code2"
• This code executes "code1" and then "code2" as a whole
shinh award
“Most orderly code”
a /%!(?<a>)/ =~ %! if + %! - %[
#! if (code2; exit)
#] if (code1; false)
eval(File.read($0))
tompng.rb shinh award
“Most orderly code”
rule = $*[00]&.to_i || 30
h ||= $*[01]&.to_i || 32
[ % if % TRICK-2022 %% %]
# ] if a /%{(?<a>)/ =~ %} if + %} - %[
# } if b /%<(?<b>)/ =~ %> if - %> + %{
# > if c /%+(?<c>)/ =~ %+ if + %+ - %<
# + if d /%-(?<d>)/ =~ %- if - %- + %+
# - if e f, g, h, / =~ %/ if def e(f, g, h, *) =
# + if d /%-(?<d>)/ =~ %- if g.map! do rule.[] _1.join.to_i 2 end.!
# > if c /%+(?<c>)/ =~ %+ if !(g = *[g[-1], *g, g[0]].each_cons(3))
# } if b /%<(?<b>)/ =~ %> if puts(g.join.tr '01', ' #') || h > 0 &&
# ] if a /%{(?<a>)/ =~ %} if !g ||= [*g = [0] * h, 1] + g if h -= 1
eval(File.read f ||= __FILE__)
rule = $*[00]&.to_i || 30
h ||= $*[01]&.to_i || 32
[ % if % TRICK-2022 %% %]
# ] if a /%{(?<a>)/ =~ %} if + %} - %[
# } if b /%<(?<b>)/ =~ %> if - %> + %{
# > if c /%+(?<c>)/ =~ %+ if + %+ - %<
# + if d /%-(?<d>)/ =~ %- if - %- + %+
# - if e f, g, h, / =~ %/ if def e(f, g, h, *) =
# + if d /%-(?<d>)/ =~ %- if g.map! do rule.[] _1.join.to_i 2 end.!
# > if c /%+(?<c>)/ =~ %+ if !(g = *[g[-1], *g, g[0]].each_cons(3))
# } if b /%<(?<b>)/ =~ %> if puts(g.join.tr '01', ' #') || h > 0 &&
# ] if a /%{(?<a>)/ =~ %} if !g ||= [*g = [0] * h, 1] + g if h -= 1
eval(File.read f ||= __FILE__)
main part
executed in
reverse order
tompng.rb
• Judges' comments
– shinh: Ruby is Lisp-2 but not Lisp. This piece makes good use of this fact.
I like it.
– yhara: Definitely the hardest to read.
– flagitious: Cool cellular automaton based on parsing trick, no eval abuse,
short.
– mame: Amazing obfuscation unique to Ruby!
shinh award
“Most orderly code”
Top three awards
Winner »
eto shinh yhara matz leonid flagitious mame score
“Most anti-gravity”
『最も反重力で賞』
Yusuke Endoh
8 10 9 8 9 9 N/A 8.83
“Most anti-gravity”
mame2.rb
2022;"#
.chars} {puts'TRICK+2022'
¥ { ;
#';$><< b
?!
};#{s=' ' # 0
! s[0]? ( b=$<.read ;'
} ub( ,''}
';a= ''<<32
b.lines {puts( ?.. *(
b.size) .gsub(/./) {
b.sub!( /^#$`¥K(¥S)
/x,a)?$1:a }
.rstrip)}):
( [ 12,1,12,11].
cycle { | i | t = ( s *
10<<
10)*
10+ %(¥e[A)*
10
10. times{t[i*
_1 ] = 'TRICK+2022'[
_1 ] };$><<t
sleep 1})
}"
Ticker of
"TRICK+2022"
“Most anti-gravity”
mame2.rb
2022;"#
.chars} {puts'TRICK+2022'
¥ { ;
#';$><< b
?!
};#{s=' ' # 0
! s[0]? ( b=$<.read ;'
} ub( ,''}
';a= ''<<32
b.lines {puts( ?.. *(
b.size) .gsub(/./) {
b.sub!( /^#$`¥K(¥S)
/x,a)?$1:a }
.rstrip)}):
( [ 12,1,12,11].
cycle { | i | t = ( s *
10<<
10)*
10+ %(¥e[A)*
10
10. times{t[i*
_1 ] = 'TRICK+2022'[
_1 ] };$><<t
sleep 1})
}"
2022;"#
.chars}{puts'TRICK+2022'
¥{;
#';$><<b
?!
};#{s=''#0
!s[0]?(b=$<.read;'
}ub(,''}
';a=''<<32
b.lines{puts(?..*(
b.size).gsub(/./){
b.sub!(/^#$`¥K(¥S)
/x,a)?$1:a}
.rstrip)}):
([12,1,12,11].
cycle{|i|t=(s*
10<<
10)*
10+%(¥e[A)*
10
10.times{t[i*
_1]='TRICK+2022'[
_1]};$><<t
sleep1})
}"
left
gravity
"Upward gravity"
program
“Most anti-gravity”
mame2.rb
2022;"#
.chars} {puts'TRICK+2022'
¥ { ;
#';$><< b
?!
};#{s=' ' # 0
! s[0]? ( b=$<.read ;'
} ub( ,''}
';a= ''<<32
b.lines {puts( ?.. *(
b.size) .gsub(/./) {
b.sub!( /^#$`¥K(¥S)
/x,a)?$1:a }
.rstrip)}):
( [ 12,1,12,11].
cycle { | i | t = ( s *
10<<
10)*
10+ %(¥e[A)*
10
10. times{t[i*
_1 ] = 'TRICK+2022'[
_1 ] };$><<t
sleep 1})
}"
2022;"# {puts'TRICK+2022'}
.chars} ¥ #{b=$<.read;0;'(
#';$><< b .gsub(''<<32,'')
};#?!=' ' 12,{puts()?..¥*:
!;s{s]? ( i |ub(/./`¥{(}S*
}.a[0es [ = s/x/^#$$1Ka[}[
'.l=ne) | 1,,a)?ri:)2)
b.siz!( ] 't.rst1]p* i
bysib1( ] lT12,1[s.* '
b0cue1{ }%=¥(eA)t
c0<l_ eR(ie+s{2
10)<_ ;tCm<20
10+* eI>K}t
10. }$ < )
1 p 1
1 "
upward
gravity
"Left gravity"
program
“Most anti-gravity”
mame2.rb
2022;"#
.chars} {puts'TRICK+2022'
¥ { ;
#';$><< b
?!
};#{s=' ' # 0
! s[0]? ( b=$<.read ;'
} ub( ,''}
';a= ''<<32
b.lines {puts( ?.. *(
b.size) .gsub(/./) {
b.sub!( /^#$`¥K(¥S)
/x,a)?$1:a }
.rstrip)}):
( [ 12,1,12,11].
cycle { | i | t = ( s *
10<<
10)*
10+ %(¥e[A)*
10
10. times{t[i*
_1 ] = 'TRICK+2022'[
_1 ] };$><<t
sleep 1})
}"
2022;"# {puts'TRICK+2022'}
.chars} ¥ #{b=$<.read;0;'(
#';$><< b .gsub(''<<32,'')
};#?!=' ' 12,{puts()?..¥*:
!;s{s]? ( i |ub(/./`¥{(}S*
}.a[0es [ = s/x/^#$$1Ka[}[
'.l=ne) | 1,,a)?ri:)2)
b.siz!( ] 't.rst1]p* i
bysib1( ] lT12,1[s.* '
b0cue1{ }%=¥(eA)t
c0<l_ eR(ie+s{2
10)<_ ;tCm<20
10+* eI>K}t
10. }$ < )
1 p 1
1 "
2022;"#{puts'TRICK+2022'}
.chars}¥#{b=$<.read;0;'(
#';$><<b.gsub(''<<32,'')
};#?!=''12,{puts()?..¥*:
!;s{s]?(i|ub(/./`¥{(}S*
}.a[0es[=s/x/^#$$1Ka[}[
'.l=ne)|1,,a)?ri:)2)
b.siz!(]'t.rst1]p*i
bysib1(]lT12,1[s.*'
b0cue1{}%=¥(eA)t
c0<l_eR(ie+s{2
10)<_;tCm<20
10+*eI>K}t
10.}$<)
1p1
1"
Prints
"TRICK+2022"
up and then
left
“Most anti-gravity”
mame2.rb
2022;"#
.chars} {puts'TRICK+2022'
¥ { ;
#';$><< b
?!
};#{s=' ' # 0
! s[0]? ( b=$<.read ;'
} ub( ,''}
';a= ''<<32
b.lines {puts( ?.. *(
b.size) .gsub(/./) {
b.sub!( /^#$`¥K(¥S)
/x,a)?$1:a }
.rstrip)}):
( [ 12,1,12,11].
cycle { | i | t = ( s *
10<<
10)*
10+ %(¥e[A)*
10
10. times{t[i*
_1 ] = 'TRICK+2022'[
_1 ] };$><<t
sleep 1})
}"
Prints
"TRICK+2022"
vertically
left and
then up
2022;"#
.chars}{puts'TRICK+2022'
¥{;
#';$><<b
?!
};#{s=''#0
!s[0]?(b=$<.read;'
}ub(,''}
';a=''<<32
b.lines{puts(?..*(
b.size).gsub(/./){
b.sub!(/^#$`¥K(¥S)
/x,a)?$1:a}
.rstrip)}):
([12,1,12,11].
cycle{|i|t=(s*
10<<
10)*
10+%(¥e[A)*
10
10.times{t[i*
_1]='TRICK+2022'[
_1]};$><<t
sleep1})
}"
2022;"#{puts'TRICK+2022'
.chars}b#0<.read;'
¥{;$><<'=$ts(?..*(
#';{s='b32ub(/./){
?!#0]?(}pu$`¥K(¥S)
};[(,''<gs}1].2'[
!sb=''<{^#:(s*
}uaines.:a1i*2
';lize)/})=20
b.sub!(12,*
b.sa)?$)|t[
b.,trip1A)+
/xs2,1,i{t
.r1le{|[CK
([c<(¥es<t
cy<*imeI
10)%'TR<
10+t;$>)
10.=p1}
10]}
10]e
_1e
_1
sl
}"
• The TRICK for left gravity
• The TRICK for upward gravity
“Most anti-gravity”
mame2.rb
"¥ #{code1}
# {code2}"
"¥#{code1}
#{code2}"
left
gravity
"x
x#{code1}
xx{code2}
"
"x{code1}
x#{code2}
xx
"
upward
gravity
• Judges' comments
– shinh: Various things by gravity. Wow, it's so fun!
– yhara: Very tricky - essentially five programs are condensed into one.
– flagitious: My brain hurts, horizontal/vertical is a bit of a gimmic (not generic,
but still)
– mame (camouflage comment): I think this piece would be the most difficult to
implement in TRICK 2022
“Most anti-gravity”
mame2.rb
Winner »
eto shinh yhara matz leonid flagitious mame score
“Most interactive code”
『最もインタラクティブなコードで賞』
Tomoya Ishida
(tompng)
10 7 10 10 9 8 8 8.86
“Most interactive code”
tompng2.rb
q=->{!sleep _1/1e2};p=(
c=0..2).map{[_1/9r ,0,5**_1.i/3,1,0]}
require'socket';puts'op' "en http://localhost:#{(
w=TCPServer.new$*[0]||0).addr[1]}";Thread.new{q[2];f=[-1
]*s=3;t=Time.now.to_f;p.select!{0<_1[3]=[_1[3]+_1[4]/8.0,1
].min};9.times{h=p.map{[2**(_1*t.i)/_4**0.5/(1+Math.sin(2*t-
9*_1%2)**32/16),_2+_4*( _3-_2)]};r=[s*3/2,84].min;g=->{x,y=
(s*(1+_1+1i)/2).rect;x<0 ||x>=s-1||y<0||y>=s-1?0:((l=f[y+1])[
x+1]*(a=x%1)+(1-a)*l[x] )*(b=y%1)+(1-b)*((l=f[y])[x+1]*a+(1-
a)*l[x])};f=(1..r).map {|y|(1..r).map{|x|z=1.5+1.5i-3.0*(y
.i+x)/r;[h.sum{g[_1.*z +_2]}*0.9,1].min}};s=r};c=f.flatten
redo};loop{s=w.accept ; Thread.new{r=s.gets;h='HTTP/1.1 '+
"200 OK¥r¥nContent-" 'T' "ype:text/html¥r¥n¥r¥n";r['/ ']?s.
<<(h+'<style>ifram' 'e{' 'opacity:0;height:0;}input{wid'+
'th:252px;}</styl' 'e>' '<form target="i"><input src="'+
"g#{rand}¥" type" '="im' 'age"><iframe name="i"></ifra'+
'me></form>'):r ['/g'] ?(h[/:.+l/]=?:'image/gif';s<<
h+'GIF8' '7a'+[84,
84,246,0,*(0..383).map {15*_1. /(383r)**(3-_1%
3)*17}].pack('v3c*'); loop{ s<<[67434785,5,
44,84,84,7,c.map{_1* 127} .each_slice(126
).map{[127,128,*_1 ] .pack'c*'}*'',
1,129].pack('V3x' 'v2na*c2x');q[
5];q.[]1while(r ==r=c)}):(x,y,
z=r.scan(/¥d+/).map{_1.to_f/
126-1};z&&p<<[rand-0.5,(
z=x+y.i)*1.5,z/(z.
abs+0.9),0,-p[
-3][4]=-1]
s.<<h);s
.close
}}
“Most interactive code”
tompng2.rb
“Most interactive code”
tompng2.rb
• A fractal organism with a pulse
– You can tweak it with a mouse click
• No JavaScript, no canvas, no HTML5!
• Pre-HTML5 technologies
– Endless streaming of an animated GIF
– <input type="image">
• This element tells the click position to the server
with a GET request like /?x=50&y=100
“Most interactive code”
tompng2.rb
“Most interactive code”
tompng2.rb
q=->{!sleep _1/1e2};p=(
c=0..2).map{[_1/9r ,0,5**_1.i/3,1,0]}
require'socket';puts'op' "en http://localhost:#{(
w=TCPServer.new$*[0]||0).addr[1]}";Thread.new{q[2];f=[-1
]*s=3;t=Time.now.to_f;p.select!{0<_1[3]=[_1[3]+_1[4]/8.0,1
].min};9.times{h=p.map{[2**(_1*t.i)/_4**0.5/(1+Math.sin(2*t-
9*_1%2)**32/16),_2+_4*( _3-_2)]};r=[s*3/2,84].min;g=->{x,y=
(s*(1+_1+1i)/2).rect;x<0 ||x>=s-1||y<0||y>=s-1?0:((l=f[y+1])[
x+1]*(a=x%1)+(1-a)*l[x] )*(b=y%1)+(1-b)*((l=f[y])[x+1]*a+(1-
a)*l[x])};f=(1..r).map {|y|(1..r).map{|x|z=1.5+1.5i-3.0*(y
.i+x)/r;[h.sum{g[_1.*z +_2]}*0.9,1].min}};s=r};c=f.flatten
redo};loop{s=w.accept ; Thread.new{r=s.gets;h='HTTP/1.1 '+
"200 OK¥r¥nContent-" 'T' "ype:text/html¥r¥n¥r¥n";r['/ ']?s.
<<(h+'<style>ifram' 'e{' 'opacity:0;height:0;}input{wid'+
'th:252px;}</styl' 'e>' '<form target="i"><input src="'+
"g#{rand}¥" type" '="im' 'age"><iframe name="i"></ifra'+
'me></form>'):r ['/g'] ?(h[/:.+l/]=?:'image/gif';s<<
h+'GIF8' '7a'+[84,
84,246,0,*(0..383).map {15*_1. /(383r)**(3-_1%
3)*17}].pack('v3c*'); loop{ s<<[67434785,5,
44,84,84,7,c.map{_1* 127} .each_slice(126
).map{[127,128,*_1 ] .pack'c*'}*'',
1,129].pack('V3x' 'v2na*c2x');q[
5];q.[]1while(r ==r=c)}):(x,y,
z=r.scan(/¥d+/).map{_1.to_f/
126-1};z&&p<<[rand-0.5,(
z=x+y.i)*1.5,z/(z.
abs+0.9),0,-p[
-3][4]=-1]
s.<<h);s
.close
}}
fractal
web server
GIF
encoding
• Judges' comments
– eto: Heart-shaped code. It is very beautiful.
– shinh: Sending GIF stream is interesting. The author should advocate ARAG
(Async Ruby and Gif) instead of AJAX (Async JS and XML).
– yhara: Good example of how Ruby is good at network programming. It reacts
to mouse click, wow!
– flagitious: Cool that it is interactive.
“Most interactive code”
tompng2.rb
Winner »
eto shinh yhara matz leonid flagitious mame score
“Best fishbowl”
『最高の金魚鉢で賞』
Tomoya Ishida
(tompng)
9 9 9 9 N/A 9.5 9 9.08
“Best fishbowl”
tompng3.rb
eval((s=%~c=(0..35
).map{s[2*_1+1]}*'';class$Inte
ger;def$quXinclude(Math ;spXo(a)=self*
a.pow(87X=h=32.chr;g=PI/480;ls=(sp*31X,89)%89;
def$abX+'eval((s=%'+(n=? .next)+s*88.chr+[nXs()=[a
=self%X+'.split(',sp*25+'?'+88.chr+');(0..36).mapX89,89-
a].miX{s[2*_1].split}',sp*31+".join.tr('$',$/)))"]*$/)Xn;end
;reqX.split$/;trap(:INT){puts;exit};q=->t,i{a,y=((t+i*99)Xuire
'matrX%960). ivmod(80);[(a*(7+i)+i*23)%79+(y+a)/(5+i%4)%2,39Xix';1
5.tiX-y/2]};p=->t,u{a=->b,c{(0..5).sum{(u%2-1)*E**(t*(b+c*_1)*gXmes{
|i,*X.i+ i*u+=5+sin(u*u))}};x,z=a[5,3]. 5,3].rect;x+=y.Xv|z=
*?!Xi a[19,4];z+=w;r=(4+(x.abs+z.i).ab };t=(0..959).fX..?
W,?Xind{|t|(0..29).all?{x,y=q[t,_1];(x 2||h=ls[y][x]X[,*
?]..X[/[^!-}]/]}};h=($**h+h).chr;eval( []} ->(x,yX?};a
=(0X,a,b){x=x*36+39.5;y=19.5-y*18;b*=1 |i|((yX..1
34)X-b).ceil..y+b).map{|j|((x-i)/a+(y j)/ .times{X.ma
p{zXx,z=p[t,_1];l=u```=0;while``````(l<1)``; u+```=0 ;d=x-y;X.in
dex(Xl+=(d.abs+(z-w``)``.i).ab``s*1.``1 ;x``,z=y``,w;o[v``=``x.r d.imag/Xc[i+
15*Xd.abs*l*sin(2*``l-t``*g*80``-_1) l*(``1-l)/``6,a``=l*( -l)**2*0.X_1]
)};X7,a*2]&&o[v,z,``0.0``3,l**`` ``times``{|i``|(8+i).times{|Xw=*
MatXj|o[sin(i)/2+````` ```sin( `/2.0`````````)*j/200,j*0.0Xrix
[*(X5-1,0.02,0.1]``}} ``. q[t,``_1];m``[y][x]= };i=-X0..
44).X1;$><<(['%%','[H .map{|j|(0..79).map{|k|x=(Xmap{
|i,X -39.5)/35.8;y=( i+=1;m[j][k]?h:c[i]):ls[j]X*b|
v<<X[k];}*''}*$/<<0) 1)%9 te"`")#iJw6$Dcc1]r*G"eDXa.z
ip(X%P<M^Az!7?f*yxM `d"qi77UD*T!: .^B][T ?%:"w82/s3A[M]V %KbeX0..
).suX5,G_=6D65#,zMaW $lsR=!Uvhio zb : dE:50obh|RgCTFfy*+)Xm{-(
p=(XH0},JA>;rxRht+ ADjV;e&'/h Qg cO?,C%J a0mE+Qy2a9'X(i+
_2)X^):t|am}b`k>e zxd[HJ9 ony JC gucaew/gcoWRy_X**9
.1).X*]u+DL(&hH wc 8531x'b bd= } < z Say vJ@{?+$Xto_i
%88+XV-GE'5^Va <9 *`?9b1 >_ } 8g 3 4 l zH_/o@j*2vX1)*(
_1||(Xp]h"u=4- U. 0nz2- E9U #"pl=^ e E(=+x6s/pXb<<p;
0))}X3t_@K?C C& ^6(BE > K 2DA B8jDlS b* WpM(|t(2X;b}]
.lup.X5R(B71 la u?5V? M(2 dP <S<,fo Qv >Fj4<?KXsolve
(v);13X"$; wL b,l^f$ f,5 z R,PhV# pM w^7UX5.time
s{c[i+X (8 NfbKS) 2*` I RW7zgh!P j6 tX15*_1]
=z[a[_1]X enuc,T= Oi. > 5D=#(;(% ?X||w.shif
t]}};eval(X9P lRQ S dq4M(Xc)~.split(
?X);(0..36).map{s[2*_1].split}
.join.tr('$',$/)))
• 960-frame fishbowl animation
– Each frame is an executable Ruby code (Quine)
• The animation does not insert whitespaces
• But it replaces some characters with whitespace
– Not trivial to restore the original code
“Best fishbowl”
tompng3.rb
• Error-correcting codes with linear algebra
• By using Matrix library
– with monkey-patching Integer for modular arithmetic
• Wait! May this error-correcting code be corrupted?
“Best fishbowl”
tompng3.rb
require 'matrix'
matrix = Matrix[[3, 1, 4], [1, 5, 9], [2, 6, 5]]
class Integer
def quo(x) = self * x.pow(87, 89) % 89
def abs() = [self % 89, 89 - self % 89].min
end
answer = matrix.lup.solve([1, 2, 3])
(matrix * answer).map { _1 % 89 }
“Best fishbowl”
tompng3.rb
eval((s=%~c=(0..35
).map{s[2*_1+1]}*'';class$Inte
ger;def$quXinclude(Math ;spXo(a)=self*
a.pow(87X=h=32.chr;g=PI/480;ls=(sp*31X,89)%89;
def$abX+'eval((s=%'+(n=? .next)+s*88.chr+[nXs()=[a
=self%X+'.split(',sp*25+'?'+88.chr+');(0..36).mapX89,89-
a].miX{s[2*_1].split}',sp*31+".join.tr('$',$/)))"]*$/)Xn;end
;reqX.split$/;trap(:INT){puts;exit};q=->t,i{a,y=((t+i*99)Xuire
'matrX%960). ivmod(80);[(a*(7+i)+i*23)%79+(y+a)/(5+i%4)%2,39Xix';1
5.tiX-y/2]};p=->t,u{a=->b,c{(0..5).sum{(u%2-1)*E**(t*(b+c*_1)*gXmes{
|i,*X.i+ i*u+=5+sin(u*u))}};x,z=a[5,3]. 5,3].rect;x+=y.Xv|z=
*?!Xi a[19,4];z+=w;r=(4+(x.abs+z.i).ab };t=(0..959).fX..?
W,?Xind{|t|(0..29).all?{x,y=q[t,_1];(x 2||h=ls[y][x]X[,*
?]..X[/[^!-}]/]}};h=($**h+h).chr;eval( []} ->(x,yX?};a
=(0X,a,b){x=x*36+39.5;y=19.5-y*18;b*=1 |i|((yX..1
34)X-b).ceil..y+b).map{|j|((x-i)/a+(y j)/ .times{X.ma
p{zXx,z=p[t,_1];l=u```=0;while``````(l<1)``; u+```=0 ;d=x-y;X.in
dex(Xl+=(d.abs+(z-w``)``.i).ab``s*1.``1 ;x``,z=y``,w;o[v``=``x.r d.imag/Xc[i+
15*Xd.abs*l*sin(2*``l-t``*g*80``-_1) l*(``1-l)/``6,a``=l*( -l)**2*0.X_1]
)};X7,a*2]&&o[v,z,``0.0``3,l**`` ``times``{|i``|(8+i).times{|Xw=*
MatXj|o[sin(i)/2+````` ```sin( `/2.0`````````)*j/200,j*0.0Xrix
[*(X5-1,0.02,0.1]``}} ``. q[t,``_1];m``[y][x]= };i=-X0..
44).X1;$><<(['%%','[H .map{|j|(0..79).map{|k|x=(Xmap{
|i,X -39.5)/35.8;y=( i+=1;m[j][k]?h:c[i]):ls[j]X*b|
v<<X[k];}*''}*$/<<0) 1)%9 te"`")#iJw6$Dcc1]r*G"eDXa.z
ip(X%P<M^Az!7?f*yxM `d"qi77UD*T!: .^B][T ?%:"w82/s3A[M]V %KbeX0..
).suX5,G_=6D65#,zMaW $lsR=!Uvhio zb : dE:50obh|RgCTFfy*+)Xm{-(
p=(XH0},JA>;rxRht+ ADjV;e&'/h Qg cO?,C%J a0mE+Qy2a9'X(i+
_2)X^):t|am}b`k>e zxd[HJ9 ony JC gucaew/gcoWRy_X**9
.1).X*]u+DL(&hH wc 8531x'b bd= } < z Say vJ@{?+$Xto_i
%88+XV-GE'5^Va <9 *`?9b1 >_ } 8g 3 4 l zH_/o@j*2vX1)*(
_1||(Xp]h"u=4- U. 0nz2- E9U #"pl=^ e E(=+x6s/pXb<<p;
0))}X3t_@K?C C& ^6(BE > K 2DA B8jDlS b* WpM(|t(2X;b}]
.lup.X5R(B71 la u?5V? M(2 dP <S<,fo Qv >Fj4<?KXsolve
(v);13X"$; wL b,l^f$ f,5 z R,PhV# pM w^7UX5.time
s{c[i+X (8 NfbKS) 2*` I RW7zgh!P j6 tX15*_1]
=z[a[_1]X enuc,T= Oi. > 5D=#(;(% ?X||w.shif
t]}};eval(X9P lRQ S dq4M(Xc)~.split(
?X);(0..36).map{s[2*_1].split}
.join.tr('$',$/)))
“Best fishbowl”
tompng3.rb
eval((s=%~c=(0..35
).map{s[2*_1+1]}*'';class$Inte
ger;def$quXinclude(Math ;spXo(a)=self*
a.pow(87X=h=32.chr;g=PI/480;ls=(sp*31X,89)%89;
def$abX+'eval((s=%'+(n=? .next)+s*88.chr+[nXs()=[a
=self%X+'.split(',sp*25+'?'+88.chr+');(0..36).mapX89,89-
a].miX{s[2*_1].split}',sp*31+".join.tr('$',$/)))"]*$/)Xn;end
;reqX.split$/;trap(:INT){puts;exit};q=->t,i{a,y=((t+i*99)Xuire
'matrX%960). ivmod(80);[(a*(7+i)+i*23)%79+(y+a)/(5+i%4)%2,39Xix';1
5.tiX-y/2]};p=->t,u{a=->b,c{(0..5).sum{(u%2-1)*E**(t*(b+c*_1)*gXmes{
|i,*X.i+ i*u+=5+sin(u*u))}};x,z=a[5,3]. 5,3].rect;x+=y.Xv|z=
*?!Xi a[19,4];z+=w;r=(4+(x.abs+z.i).ab };t=(0..959).fX..?
W,?Xind{|t|(0..29).all?{x,y=q[t,_1];(x 2||h=ls[y][x]X[,*
?]..X[/[^!-}]/]}};h=($**h+h).chr;eval( []} ->(x,yX?};a
=(0X,a,b){x=x*36+39.5;y=19.5-y*18;b*=1 |i|((yX..1
34)X-b).ceil..y+b).map{|j|((x-i)/a+(y j)/ .times{X.ma
p{zXx,z=p[t,_1];l=u```=0;while``````(l<1)``; u+```=0 ;d=x-y;X.in
dex(Xl+=(d.abs+(z-w``)``.i).ab``s*1.``1 ;x``,z=y``,w;o[v``=``x.r d.imag/Xc[i+
15*Xd.abs*l*sin(2*``l-t``*g*80``-_1) l*(``1-l)/``6,a``=l*( -l)**2*0.X_1]
)};X7,a*2]&&o[v,z,``0.0``3,l**`` ``times``{|i``|(8+i).times{|Xw=*
MatXj|o[sin(i)/2+````` ```sin( `/2.0`````````)*j/200,j*0.0Xrix
[*(X5-1,0.02,0.1]``}} ``. q[t,``_1];m``[y][x]= };i=-X0..
44).X1;$><<(['%%','[H .map{|j|(0..79).map{|k|x=(Xmap{
|i,X -39.5)/35.8;y=( i+=1;m[j][k]?h:c[i]):ls[j]X*b|
v<<X[k];}*''}*$/<<0) 1)%9 te"`")#iJw6$Dcc1]r*G"eDXa.z
ip(X%P<M^Az!7?f*yxM `d"qi77UD*T!: .^B][T ?%:"w82/s3A[M]V %KbeX0..
).suX5,G_=6D65#,zMaW $lsR=!Uvhio zb : dE:50obh|RgCTFfy*+)Xm{-(
p=(XH0},JA>;rxRht+ ADjV;e&'/h Qg cO?,C%J a0mE+Qy2a9'X(i+
_2)X^):t|am}b`k>e zxd[HJ9 ony JC gucaew/gcoWRy_X**9
.1).X*]u+DL(&hH wc 8531x'b bd= } < z Say vJ@{?+$Xto_i
%88+XV-GE'5^Va <9 *`?9b1 >_ } 8g 3 4 l zH_/o@j*2vX1)*(
_1||(Xp]h"u=4- U. 0nz2- E9U #"pl=^ e E(=+x6s/pXb<<p;
0))}X3t_@K?C C& ^6(BE > K 2DA B8jDlS b* WpM(|t(2X;b}]
.lup.X5R(B71 la u?5V? M(2 dP <S<,fo Qv >Fj4<?KXsolve
(v);13X"$; wL b,l^f$ f,5 z R,PhV# pM w^7UX5.time
s{c[i+X (8 NfbKS) 2*` I RW7zgh!P j6 tX15*_1]
=z[a[_1]X enuc,T= Oi. > 5D=#(;(% ?X||w.shif
t]}};eval(X9P lRQ S dq4M(Xc)~.split(
?X);(0..36).map{s[2*_1].split}
.join.tr('$',$/)))
Xis
highlighted
“Best fishbowl”
tompng3.rb
eval((s=%~c=(0..35
).map{s[2*_1+1]}*'';class$Inte
ger;def$quXinclude(Math ;spXo(a)=self*
a.pow(87X=h=32.chr;g=PI/480;ls=(sp*31X,89)%89;
def$abX+'eval((s=%'+(n=? .next)+s*88.chr+[nXs()=[a
=self%X+'.split(',sp*25+'?'+88.chr+');(0..36).mapX89,89-
a].miX{s[2*_1].split}',sp*31+".join.tr('$',$/)))"]*$/)Xn;end
;reqX.split$/;trap(:INT){puts;exit};q=->t,i{a,y=((t+i*99)Xuire
'matrX%960). ivmod(80);[(a*(7+i)+i*23)%79+(y+a)/(5+i%4)%2,39Xix';1
5.tiX-y/2]};p=->t,u{a=->b,c{(0..5).sum{(u%2-1)*E**(t*(b+c*_1)*gXmes{
|i,*X.i+ i*u+=5+sin(u*u))}};x,z=a[5,3]. 5,3].rect;x+=y.Xv|z=
*?!Xi a[19,4];z+=w;r=(4+(x.abs+z.i).ab };t=(0..959).fX..?
W,?Xind{|t|(0..29).all?{x,y=q[t,_1];(x 2||h=ls[y][x]X[,*
?]..X[/[^!-}]/]}};h=($**h+h).chr;eval( []} ->(x,yX?};a
=(0X,a,b){x=x*36+39.5;y=19.5-y*18;b*=1 |i|((yX..1
34)X-b).ceil..y+b).map{|j|((x-i)/a+(y j)/ .times{X.ma
p{zXx,z=p[t,_1];l=u```=0;while``````(l<1)``; u+```=0 ;d=x-y;X.in
dex(Xl+=(d.abs+(z-w``)``.i).ab``s*1.``1 ;x``,z=y``,w;o[v``=``x.r d.imag/Xc[i+
15*Xd.abs*l*sin(2*``l-t``*g*80``-_1) l*(``1-l)/``6,a``=l*( -l)**2*0.X_1]
)};X7,a*2]&&o[v,z,``0.0``3,l**`` ``times``{|i``|(8+i).times{|Xw=*
MatXj|o[sin(i)/2+````` ```sin( `/2.0`````````)*j/200,j*0.0Xrix
[*(X5-1,0.02,0.1]``}} ``. q[t,``_1];m``[y][x]= };i=-X0..
44).X1;$><<(['%%','[H .map{|j|(0..79).map{|k|x=(Xmap{
|i,X -39.5)/35.8;y=( i+=1;m[j][k]?h:c[i]):ls[j]X*b|
v<<X[k];}*''}*$/<<0) 1)%9 te"`")#iJw6$Dcc1]r*G"eDXa.z
ip(X%P<M^Az!7?f*yxM `d"qi77UD*T!: .^B][T ?%:"w82/s3A[M]V %KbeX0..
).suX5,G_=6D65#,zMaW $lsR=!Uvhio zb : dE:50obh|RgCTFfy*+)Xm{-(
p=(XH0},JA>;rxRht+ ADjV;e&'/h Qg cO?,C%J a0mE+Qy2a9'X(i+
_2)X^):t|am}b`k>e zxd[HJ9 ony JC gucaew/gcoWRy_X**9
.1).X*]u+DL(&hH wc 8531x'b bd= } < z Say vJ@{?+$Xto_i
%88+XV-GE'5^Va <9 *`?9b1 >_ } 8g 3 4 l zH_/o@j*2vX1)*(
_1||(Xp]h"u=4- U. 0nz2- E9U #"pl=^ e E(=+x6s/pXb<<p;
0))}X3t_@K?C C& ^6(BE > K 2DA B8jDlS b* WpM(|t(2X;b}]
.lup.X5R(B71 la u?5V? M(2 dP <S<,fo Qv >Fj4<?KXsolve
(v);13X"$; wL b,l^f$ f,5 z R,PhV# pM w^7UX5.time
s{c[i+X (8 NfbKS) 2*` I RW7zgh!P j6 tX15*_1]
=z[a[_1]X enuc,T= Oi. > 5D=#(;(% ?X||w.shif
t]}};eval(X9P lRQ S dq4M(Xc)~.split(
?X);(0..36).map{s[2*_1].split}
.join.tr('$',$/)))
Error-correcting code is here!
(Fish don't come to this area)
The main code is inside
with redundancy for
error recovery
• Judges' comments
– eto: Beautiful! The "AQUA" Logo is also good!
– shinh: Self-repairing Quine is not new, but this one is moving and catchy!
– flagitious: Extremely aquatic and beautiful, I haven't figured out how fishes
are calculated yet.
– mame: Beautiful animation. Error correction makes the animation more
beautiful. I love that the technical side supports the artistic side.
“Best fishbowl”
tompng3.rb
Conclusion
Judges’ awards
mame award:
“Most calculating” - SAITOH Jinroq
yhara award:
“Most playable” – Don Yang
fragitious award:
“Most likely to be required” – Yutaka HARA
matz award:
“Most reactive and diffusive” – Sergey Kruk
eto award:
“Most global” – Yusuke Endoh
leonid award:
“Most accessible” – Yutaka HARA
shinh award:
“Most orderly code” – Tomoya Ishida
Dishonorable Top 3
“Best fishbowl”
– Tomoya Ishida
“Most interactive code”
– Tomoya Ishida
“Most anti-gravity”
– Yusuke Endoh
Prize?
• Dishonor: the title of “insane”
• Top three entries will be checked into
the Ruby official repository in “sample” directory
– Ruby 3.2.0 will have them
Conclusion
• The winning entries will be published soon at:
• Thank you for all participants!
No k!
http://github.com/tric /trick2022/
Next contest?
• No plan!
– TRICK 2013
– TRICK 2015
– TRICK 2018
– TRICK 2022
– TRICK ?
See you again!
+2
+3
+4
+?

More Related Content

What's hot

コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みMasahiro Sakai
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14Ryo Suzuki
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法Takuya Akiba
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?Yoshitaka Kawashima
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかAtsushi Nakada
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugItsuki Kuroda
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようShuto Suzuki
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxpsMITSUNARI Shigeo
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装infinite_loop
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールMITSUNARI Shigeo
 
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法kazkiti
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 TipsTakaaki Suzuki
 

What's hot (20)

コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 

Similar to TRICK 2022 Results

Functional Gradient Boosting based on Residual Network Perception
Functional Gradient Boosting based on Residual Network PerceptionFunctional Gradient Boosting based on Residual Network Perception
Functional Gradient Boosting based on Residual Network PerceptionAtsushi Nitanda
 
Наибольшая общая мера: 2500 лет
Наибольшая общая мера: 2500 летНаибольшая общая мера: 2500 лет
Наибольшая общая мера: 2500 летsixtyone
 
Why there is 15% unnecesary co2 emissions in road transport
Why there is 15% unnecesary co2 emissions in road transportWhy there is 15% unnecesary co2 emissions in road transport
Why there is 15% unnecesary co2 emissions in road transportCarl-Ivar Ahlqvist
 
Why there is 15% unnecessary co2 emissions in road transport
Why there is 15% unnecessary co2 emissions in road transportWhy there is 15% unnecessary co2 emissions in road transport
Why there is 15% unnecessary co2 emissions in road transportCarl-Ivar Ahlqvist
 
Czym zabłysnę gdy przyjdzie konkurencja, i jak trzymać wydatki na obsługę Kli...
Czym zabłysnę gdy przyjdzie konkurencja, i jak trzymać wydatki na obsługę Kli...Czym zabłysnę gdy przyjdzie konkurencja, i jak trzymać wydatki na obsługę Kli...
Czym zabłysnę gdy przyjdzie konkurencja, i jak trzymać wydatki na obsługę Kli...Cendoo
 
Czym zabłysnę gdy przyjdzie konkurencja, i jak trzymać wydatki na obsługę Kli...
Czym zabłysnę gdy przyjdzie konkurencja, i jak trzymać wydatki na obsługę Kli...Czym zabłysnę gdy przyjdzie konkurencja, i jak trzymać wydatki na obsługę Kli...
Czym zabłysnę gdy przyjdzie konkurencja, i jak trzymać wydatki na obsługę Kli...cendoo1
 
LAMP_TRAINING_SESSION_6
LAMP_TRAINING_SESSION_6LAMP_TRAINING_SESSION_6
LAMP_TRAINING_SESSION_6umapst
 
Cuecos! Capítulo Uno
Cuecos! Capítulo Uno Cuecos! Capítulo Uno
Cuecos! Capítulo Uno Revulú
 
Танки_в_Лунапарке: нагрузочное_тестирование_в_Яндексе
Танки_в_Лунапарке: нагрузочное_тестирование_в_ЯндексеТанки_в_Лунапарке: нагрузочное_тестирование_в_Яндексе
Танки_в_Лунапарке: нагрузочное_тестирование_в_ЯндексеYandex
 
Länder sprachen-personen
Länder sprachen-personenLänder sprachen-personen
Länder sprachen-personenAndyAustrich
 
Länder sprachen-personen
Länder sprachen-personenLänder sprachen-personen
Länder sprachen-personenAndyAustrich
 

Similar to TRICK 2022 Results (20)

Ph 2
Ph 2Ph 2
Ph 2
 
Globe Trotting for Green Building Hotspots
Globe Trotting for Green Building HotspotsGlobe Trotting for Green Building Hotspots
Globe Trotting for Green Building Hotspots
 
Functional Gradient Boosting based on Residual Network Perception
Functional Gradient Boosting based on Residual Network PerceptionFunctional Gradient Boosting based on Residual Network Perception
Functional Gradient Boosting based on Residual Network Perception
 
Наибольшая общая мера: 2500 лет
Наибольшая общая мера: 2500 летНаибольшая общая мера: 2500 лет
Наибольшая общая мера: 2500 лет
 
27thchapter
27thchapter27thchapter
27thchapter
 
Welcome
WelcomeWelcome
Welcome
 
Why there is 15% unnecesary co2 emissions in road transport
Why there is 15% unnecesary co2 emissions in road transportWhy there is 15% unnecesary co2 emissions in road transport
Why there is 15% unnecesary co2 emissions in road transport
 
Why there is 15% unnecessary co2 emissions in road transport
Why there is 15% unnecessary co2 emissions in road transportWhy there is 15% unnecessary co2 emissions in road transport
Why there is 15% unnecessary co2 emissions in road transport
 
Czym zabłysnę gdy przyjdzie konkurencja, i jak trzymać wydatki na obsługę Kli...
Czym zabłysnę gdy przyjdzie konkurencja, i jak trzymać wydatki na obsługę Kli...Czym zabłysnę gdy przyjdzie konkurencja, i jak trzymać wydatki na obsługę Kli...
Czym zabłysnę gdy przyjdzie konkurencja, i jak trzymać wydatki na obsługę Kli...
 
Czym zabłysnę gdy przyjdzie konkurencja, i jak trzymać wydatki na obsługę Kli...
Czym zabłysnę gdy przyjdzie konkurencja, i jak trzymać wydatki na obsługę Kli...Czym zabłysnę gdy przyjdzie konkurencja, i jak trzymać wydatki na obsługę Kli...
Czym zabłysnę gdy przyjdzie konkurencja, i jak trzymać wydatki na obsługę Kli...
 
LAMP_TRAINING_SESSION_6
LAMP_TRAINING_SESSION_6LAMP_TRAINING_SESSION_6
LAMP_TRAINING_SESSION_6
 
OSGi - beyond the myth
OSGi -  beyond the mythOSGi -  beyond the myth
OSGi - beyond the myth
 
Fusion - Prager presentation
Fusion - Prager presentationFusion - Prager presentation
Fusion - Prager presentation
 
#ThisIsHappening
#ThisIsHappening#ThisIsHappening
#ThisIsHappening
 
Cuecos! Capítulo Uno
Cuecos! Capítulo Uno Cuecos! Capítulo Uno
Cuecos! Capítulo Uno
 
Танки_в_Лунапарке: нагрузочное_тестирование_в_Яндексе
Танки_в_Лунапарке: нагрузочное_тестирование_в_ЯндексеТанки_в_Лунапарке: нагрузочное_тестирование_в_Яндексе
Танки_в_Лунапарке: нагрузочное_тестирование_в_Яндексе
 
Ruby 1.9
Ruby 1.9Ruby 1.9
Ruby 1.9
 
Länder sprachen-personen
Länder sprachen-personenLänder sprachen-personen
Länder sprachen-personen
 
Länder sprachen-personen
Länder sprachen-personenLänder sprachen-personen
Länder sprachen-personen
 
Ph 38
Ph 38Ph 38
Ph 38
 

More from mametter

error_highlight: User-friendly Error Diagnostics
error_highlight: User-friendly Error Diagnosticserror_highlight: User-friendly Error Diagnostics
error_highlight: User-friendly Error Diagnosticsmametter
 
クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料
クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料
クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料mametter
 
Enjoy Ruby Programming in IDE and TypeProf
Enjoy Ruby Programming in IDE and TypeProfEnjoy Ruby Programming in IDE and TypeProf
Enjoy Ruby Programming in IDE and TypeProfmametter
 
TypeProf for IDE: Enrich Development Experience without Annotations
TypeProf for IDE: Enrich Development Experience without AnnotationsTypeProf for IDE: Enrich Development Experience without Annotations
TypeProf for IDE: Enrich Development Experience without Annotationsmametter
 
Ruby 3の型解析に向けた計画
Ruby 3の型解析に向けた計画Ruby 3の型解析に向けた計画
Ruby 3の型解析に向けた計画mametter
 
emruby: ブラウザで動くRuby
emruby: ブラウザで動くRubyemruby: ブラウザで動くRuby
emruby: ブラウザで動くRubymametter
 
Type Profiler: Ambitious Type Inference for Ruby 3
Type Profiler: Ambitious Type Inference for Ruby 3Type Profiler: Ambitious Type Inference for Ruby 3
Type Profiler: Ambitious Type Inference for Ruby 3mametter
 
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
型プロファイラ:抽象解釈に基づくRuby 3の静的解析型プロファイラ:抽象解釈に基づくRuby 3の静的解析
型プロファイラ:抽象解釈に基づくRuby 3の静的解析mametter
 
Ruby 3の型推論やってます
Ruby 3の型推論やってますRuby 3の型推論やってます
Ruby 3の型推論やってますmametter
 
マニアックなRuby 2.7新機能紹介
マニアックなRuby 2.7新機能紹介マニアックなRuby 2.7新機能紹介
マニアックなRuby 2.7新機能紹介mametter
 
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
A Static Type Analyzer of Untyped Ruby Code for Ruby 3A Static Type Analyzer of Untyped Ruby Code for Ruby 3
A Static Type Analyzer of Untyped Ruby Code for Ruby 3mametter
 
A Plan towards Ruby 3 Types
A Plan towards Ruby 3 TypesA Plan towards Ruby 3 Types
A Plan towards Ruby 3 Typesmametter
 
Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画mametter
 
A Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and UnderstandingA Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and Understandingmametter
 
本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能mametter
 
Transcendental Programming in Ruby
Transcendental Programming in RubyTranscendental Programming in Ruby
Transcendental Programming in Rubymametter
 
Cookpad Hackarade #04: Create Your Own Interpreter
Cookpad Hackarade #04: Create Your Own InterpreterCookpad Hackarade #04: Create Your Own Interpreter
Cookpad Hackarade #04: Create Your Own Interpretermametter
 
Ruby 3のキーワード引数について考える
Ruby 3のキーワード引数について考えるRuby 3のキーワード引数について考える
Ruby 3のキーワード引数について考えるmametter
 
TRICK 2018 results
TRICK 2018 resultsTRICK 2018 results
TRICK 2018 resultsmametter
 
Type Profiler: An Analysis to guess type signatures
Type Profiler: An Analysis to guess type signaturesType Profiler: An Analysis to guess type signatures
Type Profiler: An Analysis to guess type signaturesmametter
 

More from mametter (20)

error_highlight: User-friendly Error Diagnostics
error_highlight: User-friendly Error Diagnosticserror_highlight: User-friendly Error Diagnostics
error_highlight: User-friendly Error Diagnostics
 
クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料
クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料
クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料
 
Enjoy Ruby Programming in IDE and TypeProf
Enjoy Ruby Programming in IDE and TypeProfEnjoy Ruby Programming in IDE and TypeProf
Enjoy Ruby Programming in IDE and TypeProf
 
TypeProf for IDE: Enrich Development Experience without Annotations
TypeProf for IDE: Enrich Development Experience without AnnotationsTypeProf for IDE: Enrich Development Experience without Annotations
TypeProf for IDE: Enrich Development Experience without Annotations
 
Ruby 3の型解析に向けた計画
Ruby 3の型解析に向けた計画Ruby 3の型解析に向けた計画
Ruby 3の型解析に向けた計画
 
emruby: ブラウザで動くRuby
emruby: ブラウザで動くRubyemruby: ブラウザで動くRuby
emruby: ブラウザで動くRuby
 
Type Profiler: Ambitious Type Inference for Ruby 3
Type Profiler: Ambitious Type Inference for Ruby 3Type Profiler: Ambitious Type Inference for Ruby 3
Type Profiler: Ambitious Type Inference for Ruby 3
 
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
型プロファイラ:抽象解釈に基づくRuby 3の静的解析型プロファイラ:抽象解釈に基づくRuby 3の静的解析
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
 
Ruby 3の型推論やってます
Ruby 3の型推論やってますRuby 3の型推論やってます
Ruby 3の型推論やってます
 
マニアックなRuby 2.7新機能紹介
マニアックなRuby 2.7新機能紹介マニアックなRuby 2.7新機能紹介
マニアックなRuby 2.7新機能紹介
 
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
A Static Type Analyzer of Untyped Ruby Code for Ruby 3A Static Type Analyzer of Untyped Ruby Code for Ruby 3
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
 
A Plan towards Ruby 3 Types
A Plan towards Ruby 3 TypesA Plan towards Ruby 3 Types
A Plan towards Ruby 3 Types
 
Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画
 
A Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and UnderstandingA Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and Understanding
 
本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能
 
Transcendental Programming in Ruby
Transcendental Programming in RubyTranscendental Programming in Ruby
Transcendental Programming in Ruby
 
Cookpad Hackarade #04: Create Your Own Interpreter
Cookpad Hackarade #04: Create Your Own InterpreterCookpad Hackarade #04: Create Your Own Interpreter
Cookpad Hackarade #04: Create Your Own Interpreter
 
Ruby 3のキーワード引数について考える
Ruby 3のキーワード引数について考えるRuby 3のキーワード引数について考える
Ruby 3のキーワード引数について考える
 
TRICK 2018 results
TRICK 2018 resultsTRICK 2018 results
TRICK 2018 results
 
Type Profiler: An Analysis to guess type signatures
Type Profiler: An Analysis to guess type signaturesType Profiler: An Analysis to guess type signatures
Type Profiler: An Analysis to guess type signatures
 

Recently uploaded

Call Girls Service Bantala - Call 8250192130 Rs-3500 with A/C Room Cash on De...
Call Girls Service Bantala - Call 8250192130 Rs-3500 with A/C Room Cash on De...Call Girls Service Bantala - Call 8250192130 Rs-3500 with A/C Room Cash on De...
Call Girls Service Bantala - Call 8250192130 Rs-3500 with A/C Room Cash on De...anamikaraghav4
 
Call Girls In Karnal O8860008073 Sector 6 7 8 9 Karnal Escorts
Call Girls In Karnal O8860008073 Sector 6 7 8 9 Karnal EscortsCall Girls In Karnal O8860008073 Sector 6 7 8 9 Karnal Escorts
Call Girls In Karnal O8860008073 Sector 6 7 8 9 Karnal EscortsApsara Of India
 
↑Top Model (Kolkata) Call Girls Howrah ⟟ 8250192130 ⟟ High Class Call Girl In...
↑Top Model (Kolkata) Call Girls Howrah ⟟ 8250192130 ⟟ High Class Call Girl In...↑Top Model (Kolkata) Call Girls Howrah ⟟ 8250192130 ⟟ High Class Call Girl In...
↑Top Model (Kolkata) Call Girls Howrah ⟟ 8250192130 ⟟ High Class Call Girl In...noor ahmed
 
↑Top Model (Kolkata) Call Girls Rajpur ⟟ 8250192130 ⟟ High Class Call Girl In...
↑Top Model (Kolkata) Call Girls Rajpur ⟟ 8250192130 ⟟ High Class Call Girl In...↑Top Model (Kolkata) Call Girls Rajpur ⟟ 8250192130 ⟟ High Class Call Girl In...
↑Top Model (Kolkata) Call Girls Rajpur ⟟ 8250192130 ⟟ High Class Call Girl In...noor ahmed
 
VIP Call Girls Nagpur Megha Call 7001035870 Meet With Nagpur Escorts
VIP Call Girls Nagpur Megha Call 7001035870 Meet With Nagpur EscortsVIP Call Girls Nagpur Megha Call 7001035870 Meet With Nagpur Escorts
VIP Call Girls Nagpur Megha Call 7001035870 Meet With Nagpur Escortsranjana rawat
 
(Dipika) Call Girls in Bangur ! 8250192130 ₹2999 Only and Free Hotel Delivery...
(Dipika) Call Girls in Bangur ! 8250192130 ₹2999 Only and Free Hotel Delivery...(Dipika) Call Girls in Bangur ! 8250192130 ₹2999 Only and Free Hotel Delivery...
(Dipika) Call Girls in Bangur ! 8250192130 ₹2999 Only and Free Hotel Delivery...Riya Pathan
 
Kolkata Call Girl Howrah 👉 8250192130 ❣️💯 Available With Room 24×7
Kolkata Call Girl Howrah 👉 8250192130 ❣️💯 Available With Room 24×7Kolkata Call Girl Howrah 👉 8250192130 ❣️💯 Available With Room 24×7
Kolkata Call Girl Howrah 👉 8250192130 ❣️💯 Available With Room 24×7Riya Pathan
 
Kolkata Call Girls Service +918240919228 - Kolkatanightgirls.com
Kolkata Call Girls Service +918240919228 - Kolkatanightgirls.comKolkata Call Girls Service +918240919228 - Kolkatanightgirls.com
Kolkata Call Girls Service +918240919228 - Kolkatanightgirls.comKolkata Call Girls
 
VIP Call Girls Pune Sanjana 8617697112 Independent Escort Service Pune
VIP Call Girls Pune Sanjana 8617697112 Independent Escort Service PuneVIP Call Girls Pune Sanjana 8617697112 Independent Escort Service Pune
VIP Call Girls Pune Sanjana 8617697112 Independent Escort Service PuneCall girls in Ahmedabad High profile
 
Beyond Bar & Club Udaipur CaLL GiRLS 09602870969
Beyond Bar & Club Udaipur CaLL GiRLS 09602870969Beyond Bar & Club Udaipur CaLL GiRLS 09602870969
Beyond Bar & Club Udaipur CaLL GiRLS 09602870969Apsara Of India
 
VIP Call Girls Service Banjara Hills Hyderabad Call +91-8250192130
VIP Call Girls Service Banjara Hills Hyderabad Call +91-8250192130VIP Call Girls Service Banjara Hills Hyderabad Call +91-8250192130
VIP Call Girls Service Banjara Hills Hyderabad Call +91-8250192130Suhani Kapoor
 
Dakshineswar Call Girls ✔ 8005736733 ✔ Hot Model With Sexy Bhabi Ready For Se...
Dakshineswar Call Girls ✔ 8005736733 ✔ Hot Model With Sexy Bhabi Ready For Se...Dakshineswar Call Girls ✔ 8005736733 ✔ Hot Model With Sexy Bhabi Ready For Se...
Dakshineswar Call Girls ✔ 8005736733 ✔ Hot Model With Sexy Bhabi Ready For Se...aamir
 
Call Girl Nashik Saloni 7001305949 Independent Escort Service Nashik
Call Girl Nashik Saloni 7001305949 Independent Escort Service NashikCall Girl Nashik Saloni 7001305949 Independent Escort Service Nashik
Call Girl Nashik Saloni 7001305949 Independent Escort Service NashikCall Girls in Nagpur High Profile
 
Call Girl Nagpur Roshni Call 7001035870 Meet With Nagpur Escorts
Call Girl Nagpur Roshni Call 7001035870 Meet With Nagpur EscortsCall Girl Nagpur Roshni Call 7001035870 Meet With Nagpur Escorts
Call Girl Nagpur Roshni Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur High Profile
 
(KRITI) Pimpri Chinchwad Call Girls Just Call 7001035870 [ Cash on Delivery ]...
(KRITI) Pimpri Chinchwad Call Girls Just Call 7001035870 [ Cash on Delivery ]...(KRITI) Pimpri Chinchwad Call Girls Just Call 7001035870 [ Cash on Delivery ]...
(KRITI) Pimpri Chinchwad Call Girls Just Call 7001035870 [ Cash on Delivery ]...ranjana rawat
 
Kolkata Call Girl Bagbazar 👉 8250192130 ❣️💯 Available With Room 24×7
Kolkata Call Girl Bagbazar 👉 8250192130 ❣️💯 Available With Room 24×7Kolkata Call Girl Bagbazar 👉 8250192130 ❣️💯 Available With Room 24×7
Kolkata Call Girl Bagbazar 👉 8250192130 ❣️💯 Available With Room 24×7Riya Pathan
 
Russian Call Girl South End Park - Call 8250192130 Rs-3500 with A/C Room Cash...
Russian Call Girl South End Park - Call 8250192130 Rs-3500 with A/C Room Cash...Russian Call Girl South End Park - Call 8250192130 Rs-3500 with A/C Room Cash...
Russian Call Girl South End Park - Call 8250192130 Rs-3500 with A/C Room Cash...anamikaraghav4
 
College Call Girl in Rajiv Chowk Delhi 9634446618 Short 1500 Night 6000 Best ...
College Call Girl in Rajiv Chowk Delhi 9634446618 Short 1500 Night 6000 Best ...College Call Girl in Rajiv Chowk Delhi 9634446618 Short 1500 Night 6000 Best ...
College Call Girl in Rajiv Chowk Delhi 9634446618 Short 1500 Night 6000 Best ...perfect solution
 
1681275559_haunting-adeline and hunting.pdf
1681275559_haunting-adeline and hunting.pdf1681275559_haunting-adeline and hunting.pdf
1681275559_haunting-adeline and hunting.pdfTanjirokamado769606
 
VIP Call Girls Asansol Ananya 8250192130 Independent Escort Service Asansol
VIP Call Girls Asansol Ananya 8250192130 Independent Escort Service AsansolVIP Call Girls Asansol Ananya 8250192130 Independent Escort Service Asansol
VIP Call Girls Asansol Ananya 8250192130 Independent Escort Service AsansolRiya Pathan
 

Recently uploaded (20)

Call Girls Service Bantala - Call 8250192130 Rs-3500 with A/C Room Cash on De...
Call Girls Service Bantala - Call 8250192130 Rs-3500 with A/C Room Cash on De...Call Girls Service Bantala - Call 8250192130 Rs-3500 with A/C Room Cash on De...
Call Girls Service Bantala - Call 8250192130 Rs-3500 with A/C Room Cash on De...
 
Call Girls In Karnal O8860008073 Sector 6 7 8 9 Karnal Escorts
Call Girls In Karnal O8860008073 Sector 6 7 8 9 Karnal EscortsCall Girls In Karnal O8860008073 Sector 6 7 8 9 Karnal Escorts
Call Girls In Karnal O8860008073 Sector 6 7 8 9 Karnal Escorts
 
↑Top Model (Kolkata) Call Girls Howrah ⟟ 8250192130 ⟟ High Class Call Girl In...
↑Top Model (Kolkata) Call Girls Howrah ⟟ 8250192130 ⟟ High Class Call Girl In...↑Top Model (Kolkata) Call Girls Howrah ⟟ 8250192130 ⟟ High Class Call Girl In...
↑Top Model (Kolkata) Call Girls Howrah ⟟ 8250192130 ⟟ High Class Call Girl In...
 
↑Top Model (Kolkata) Call Girls Rajpur ⟟ 8250192130 ⟟ High Class Call Girl In...
↑Top Model (Kolkata) Call Girls Rajpur ⟟ 8250192130 ⟟ High Class Call Girl In...↑Top Model (Kolkata) Call Girls Rajpur ⟟ 8250192130 ⟟ High Class Call Girl In...
↑Top Model (Kolkata) Call Girls Rajpur ⟟ 8250192130 ⟟ High Class Call Girl In...
 
VIP Call Girls Nagpur Megha Call 7001035870 Meet With Nagpur Escorts
VIP Call Girls Nagpur Megha Call 7001035870 Meet With Nagpur EscortsVIP Call Girls Nagpur Megha Call 7001035870 Meet With Nagpur Escorts
VIP Call Girls Nagpur Megha Call 7001035870 Meet With Nagpur Escorts
 
(Dipika) Call Girls in Bangur ! 8250192130 ₹2999 Only and Free Hotel Delivery...
(Dipika) Call Girls in Bangur ! 8250192130 ₹2999 Only and Free Hotel Delivery...(Dipika) Call Girls in Bangur ! 8250192130 ₹2999 Only and Free Hotel Delivery...
(Dipika) Call Girls in Bangur ! 8250192130 ₹2999 Only and Free Hotel Delivery...
 
Kolkata Call Girl Howrah 👉 8250192130 ❣️💯 Available With Room 24×7
Kolkata Call Girl Howrah 👉 8250192130 ❣️💯 Available With Room 24×7Kolkata Call Girl Howrah 👉 8250192130 ❣️💯 Available With Room 24×7
Kolkata Call Girl Howrah 👉 8250192130 ❣️💯 Available With Room 24×7
 
Kolkata Call Girls Service +918240919228 - Kolkatanightgirls.com
Kolkata Call Girls Service +918240919228 - Kolkatanightgirls.comKolkata Call Girls Service +918240919228 - Kolkatanightgirls.com
Kolkata Call Girls Service +918240919228 - Kolkatanightgirls.com
 
VIP Call Girls Pune Sanjana 8617697112 Independent Escort Service Pune
VIP Call Girls Pune Sanjana 8617697112 Independent Escort Service PuneVIP Call Girls Pune Sanjana 8617697112 Independent Escort Service Pune
VIP Call Girls Pune Sanjana 8617697112 Independent Escort Service Pune
 
Beyond Bar & Club Udaipur CaLL GiRLS 09602870969
Beyond Bar & Club Udaipur CaLL GiRLS 09602870969Beyond Bar & Club Udaipur CaLL GiRLS 09602870969
Beyond Bar & Club Udaipur CaLL GiRLS 09602870969
 
VIP Call Girls Service Banjara Hills Hyderabad Call +91-8250192130
VIP Call Girls Service Banjara Hills Hyderabad Call +91-8250192130VIP Call Girls Service Banjara Hills Hyderabad Call +91-8250192130
VIP Call Girls Service Banjara Hills Hyderabad Call +91-8250192130
 
Dakshineswar Call Girls ✔ 8005736733 ✔ Hot Model With Sexy Bhabi Ready For Se...
Dakshineswar Call Girls ✔ 8005736733 ✔ Hot Model With Sexy Bhabi Ready For Se...Dakshineswar Call Girls ✔ 8005736733 ✔ Hot Model With Sexy Bhabi Ready For Se...
Dakshineswar Call Girls ✔ 8005736733 ✔ Hot Model With Sexy Bhabi Ready For Se...
 
Call Girl Nashik Saloni 7001305949 Independent Escort Service Nashik
Call Girl Nashik Saloni 7001305949 Independent Escort Service NashikCall Girl Nashik Saloni 7001305949 Independent Escort Service Nashik
Call Girl Nashik Saloni 7001305949 Independent Escort Service Nashik
 
Call Girl Nagpur Roshni Call 7001035870 Meet With Nagpur Escorts
Call Girl Nagpur Roshni Call 7001035870 Meet With Nagpur EscortsCall Girl Nagpur Roshni Call 7001035870 Meet With Nagpur Escorts
Call Girl Nagpur Roshni Call 7001035870 Meet With Nagpur Escorts
 
(KRITI) Pimpri Chinchwad Call Girls Just Call 7001035870 [ Cash on Delivery ]...
(KRITI) Pimpri Chinchwad Call Girls Just Call 7001035870 [ Cash on Delivery ]...(KRITI) Pimpri Chinchwad Call Girls Just Call 7001035870 [ Cash on Delivery ]...
(KRITI) Pimpri Chinchwad Call Girls Just Call 7001035870 [ Cash on Delivery ]...
 
Kolkata Call Girl Bagbazar 👉 8250192130 ❣️💯 Available With Room 24×7
Kolkata Call Girl Bagbazar 👉 8250192130 ❣️💯 Available With Room 24×7Kolkata Call Girl Bagbazar 👉 8250192130 ❣️💯 Available With Room 24×7
Kolkata Call Girl Bagbazar 👉 8250192130 ❣️💯 Available With Room 24×7
 
Russian Call Girl South End Park - Call 8250192130 Rs-3500 with A/C Room Cash...
Russian Call Girl South End Park - Call 8250192130 Rs-3500 with A/C Room Cash...Russian Call Girl South End Park - Call 8250192130 Rs-3500 with A/C Room Cash...
Russian Call Girl South End Park - Call 8250192130 Rs-3500 with A/C Room Cash...
 
College Call Girl in Rajiv Chowk Delhi 9634446618 Short 1500 Night 6000 Best ...
College Call Girl in Rajiv Chowk Delhi 9634446618 Short 1500 Night 6000 Best ...College Call Girl in Rajiv Chowk Delhi 9634446618 Short 1500 Night 6000 Best ...
College Call Girl in Rajiv Chowk Delhi 9634446618 Short 1500 Night 6000 Best ...
 
1681275559_haunting-adeline and hunting.pdf
1681275559_haunting-adeline and hunting.pdf1681275559_haunting-adeline and hunting.pdf
1681275559_haunting-adeline and hunting.pdf
 
VIP Call Girls Asansol Ananya 8250192130 Independent Escort Service Asansol
VIP Call Girls Asansol Ananya 8250192130 Independent Escort Service AsansolVIP Call Girls Asansol Ananya 8250192130 Independent Escort Service Asansol
VIP Call Girls Asansol Ananya 8250192130 Independent Escort Service Asansol
 

TRICK 2022 Results

  • 1. TRICK 2022 "Returns" ― contest results TRICK judges: eto, shinh, yhara, matz, leonid, flagitious, mame Transcendental Ruby Imbroglio Contest for RubyKaigi
  • 2. TRICK-2022-opening.rb eval(s=%w{extend(Math);t="-7AA2I:>4E;D0+C>D?7EE8I 56D=@ADI?:D;9C,FI@<ECFB>I%@GDCCBEBDFHFFEEIIHHG3@?HE<4 ABG3@-@3./1151=B/?H.&'9?D@&'9@88=B/@881513./=A4ABGG>E(((' 3,,,>===A).A2<DI)E@<2&)6%E*E6E%*0=*-3EI$>7D4$G";s="eval(s=%w{ #{s}}*'')"+"#"*999;h="¥s"*108+(-5..17).map{s.slice!(0,69-_1.abs*4 ).center(108)}*o="";(?$..?F).map{t=t[2..].gsub(_1,t[0,2])};g=(1..8).m ap{[cos(a=Math::PI*k=_1/4.0)*k/6,k*sin(a)/3,k/2]};581.times{|i|f= [x=y=0]*2592;t.bytes{|c|x+=c<72?(y+=1;-x):1.upto(c<73?17:0){q =x+w=_1%6-2;f[(y+v=_1/7-1)*54+q]+=1/(hypot(w*2,v)*(i-400) +1)}};2592.times{|j|u=8;g.map{u+=sin(j%108*_1-j/108*_ 2+i*_3)/(_3+0.1)};v,w,x,y=[u/15,(j%108+i*6)/4e2-1 ,f[j/2],i/2e2-1].map{_1.clamp(0,1)};c=((v*w*( 1-y)+x*y**3)*15).round;z=->c{c<6?16+c*36: c<11?166+c*6:216+c};o<<"¥e[48;5;#{z[c ]}m¥e[38;5;#{z[i<250?15-(15-c)*i/ 250:i<400?c:(c*(580-i)+(5+j/1 08*5/12)*(i-400))/180]}m" +h[j];j%108>106&&o<<" ¥e[0m¥n"};$><<o;o ="¥e[A"*24;sl eep(0.02) }}*'' )
  • 3. Transcendental Ruby Imbroglio Contest for RubyKaigi What’s “TRICK” • A contest for esoteric Ruby programming – The "most esoteric" Ruby program wins Transcendental /ˌtransɛnˈdɛnt(ə)l/ “relating to a spiritual realm” * 「霊的領域に関する」 「世俗を超越した」「超絶技巧」 Imbroglio /ɪmˈbrəʊlɪəʊ/ “an extremely confused, complicated, or embarrassing situation” * 「極めて混乱した、恥ずかしい事態」 * Oxford Dictionaries
  • 4. This talk • TRICK 2022 (2021/09/09 – 2022/07/31) – 1st: TRICK 2013 – 2nd: TRICK 2015 – 3rd: TRICK 2018 FINAL – 4th: TRICK 2022 Returns • This talk announces the winners of TRICK 2022
  • 6. TRICK 2022 Judges Yusuke Endoh (@mametter) Koichiro Eto (@eto) Shinichiro Hamaji (@shinh) Yutaka Hara (@yhara) Yukihiro Matsumoto (@yukihiro_matz) Sun Park (@sunleonid) Darren Smith
  • 7. TRICK 2022 Judges eto – Media Artist. – Senior Researcher at AIST. shinh – The admin of anarchy golf. – IOCCC winner. yhara – The author of Japanese esolang book. matz – The creator of Ruby. leonid – The 1st super Ruby golfer. flagitious – The author of GolfScript. – Yet another super Ruby golfer. – Full-time Ruby committer at Cookpad. – The world’s No.1 IOCCC player. mame
  • 8. Submission statistics / Judging process • Submission statistics – Thank you for all the submitters! • Judging process – Each judge gives each entry a score of 1..10 – Any information about the authors is not read • Awards – Three medals – Seven judges' awards JP US DE UK
  • 9. CAUTION • This talk has a lot of spoilers! – Get out here if you want to enjoy analyzing the winners • The winning entries will be published at: No k! http://github.com/tric /trick2022/
  • 11. Winner » eto shinh yhara matz leonid flagitious mame score “Most calculating” 『最も計算高いで賞』 SAITOH Jinroq mame award 6 3 2 6 3 4 7 4.43
  • 12. jimlock.rb mame award “Most calculating” puts( { 2*0-2-2 => 2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2, 2/2+0*2 => 2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2+2+2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0, 2+2/2+0 => 2*2*2+0+2-2/2+0+2*2*2+0+2*2*2+0-2+2+2+0+2*2*2+0+2+2+2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2, 0*2+2*2 => 0+2*2*2+0+2+2+2+0+2+2+2+0+2+2+2+0+2+2+2+0+2+2+2+0+2+2+2+0+2+2+2+0+2*2*2+0+2*2*2+0+2/2, 2*0*2*2 => 2+0+2*2*2+0+2*2*2+0+2*2+2+0+2-2/2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2, 2/2+0-2 => 2*2+0+2*2*2+0+2*2*2+0+2*2*2+0-2-2-2+0-2-2-2+0+2+2+2+0+2+2+2+0+2*2*2+0+2*2*2+0+2+2+2+0, 2*2*2+0 => 2*2*2+0-2*2*2+0+2-2*2+0+2*2*2+0-2-2-2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2, 0<2|2-2 => 0+2+2+2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0-2*2*2+0-2*2*2+0+2*2, 2<0|2-2 => 2+0-2*2*2+0-2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2*2*2+0+2+2+2+0+2, }.map { _2.chr }.join) 2*0-2-2 => 2+0+2*2 * 2+0+2*2 * 2+0+2*2*… map { _2.chr } +2+0+2,
  • 13. jimlock.rb • Judges' comments – mame: I like this kind of piece that would never have been written except for TRICK. – eto: Simple and nice. mame award “Most calculating”
  • 14. Winner » eto shinh yhara matz leonid flagitious mame score “Most playable” 『最も遊べるで賞』 Don Yang yhara award 7 4 7 6 4 7.5 5 5.79
  • 15. omoikane.rb yhara award “Most playable” require'zlib';eval(Zlib::Inflate.inflate((%w$eF6VVdtym0gQfZ+vwKOSFoFAIPkiO245sp 2K8+B1lZ2KU4XZLIaRhCUBAiQ0F uTbtwd0201elgeY6enu6cvpQ 8zmC z9m1A/bbhgk4ZRRcguWZb Q00 27 hR7zNloFvrfwcmTaJ4R Es+ s IsY0ZtldZaf4x/yEy u Tdik5g3bTY+1/5aH z a Fee6N64jqB3Nb1d lO fO dE6X+XCsrZe6WHs aSfFB 1xapi12xYwW6K4 mSZYtNz9 +fHio179/V9VD J+QJqDOfzzn3Yv zyYSLeXowbXOOGsxg3fJTgRshxPSzXbsT5K9qxGMUoQxXOUj5a8 Lcln0R8vOQ+vjP ur/g05bMFd2PO3YRzBwOIpn4qt/k+ixUApdKVFEsXUgwr/ZWn LKkOef5oce38zC4 USgsStebw5UHf1FfP/CDx3xnxh1J0aXbyfH7ZPSdR7AepR DdKUhqGUjJzptOXg BK28lPCAm+rJGEBrzonU6pEypw8g/RTm7c75A4irUNc MEkIY7Bs8goj6BAHe mQIDI5MEsHg8fM3y7D1NPwxJPcQ9cHQTczCbEeY h6F3iO+DlcAMApiC68 IbTMCwlR6501N/xpJ1nuWhigg5sVUr6xuNR nZ5pwkXp+jgxFbkZ63TV PHYLkhozeEG7tod24rguX1sw7mQ2daz FtkY1jscEzYErS+vWry5xj Df66ftrnpGLEUzdR1hEcWht3BTeS to6liUq3WORc19CC2uoruVGtk ffIBhjjI4LUiBDlAdQzn0gJI7 lDT1ZLwYDrEVVStbPBfNkLk2R++v Sd9sNGIn8C6xNI0GG+ouXl lGiMFzvM2GIXlXsc6iJwWJRQZrkgGVau ukoGSJK4qFUDraqZbpot tNcUPQN8ozqa7V1uK0tzktElqntXVQSO7Y8b Hj2INledIKFExh5gd o+GgF/R4WWl7qi8h1Enb0wTxuYtXNrq0ucVZ9HMZ qKnHrtyoP9iFyys m7U81i8BJT9cm aKR3V0c7QvLQ0Z7V1Vp QuXgKhEe7QvkX2 k8XRxq2gr dADXSqgWhA/ha/jmDm eHrAMqzL2Ec6 xyBt1q e4HHlvJGTx9vf3ypz 5iqTtuYk5HJ uYh00 F2ndx4t85Or5nnvSZ iG6u3RGhaG Wg/ 3+o9G5bkDbIytaoJl T/mjkMB9Lh qG kkxGETtxUUQZrtQ0N es3/ldSWr r J8vRTNXF/Hbya0pc 9y8cJHER2 k 6O4 I14cIuxYEATDGiCA dko8jARh L fqIZ8h4v Fr2LbIC83NEgFe /6TR8C7P c TSzbXC6k8pGs /S+DVusDyNHy1 RL08t7kk w Zi3BODQxnmjDh IyVjFVKcSBwJ DKOcL5w u 0yApzqkPY2tcAg GnUJz6ZXC+CA 1M8786x 7 /qdMpkX0WCIjnY ZgdlemVWR3Ba fgFcnN1 EF ZeLKte7/XLhAHh kJiZGSAG6JB CbKVjTV oDw dlbCqKMoVoB/m V4JeMU0jKq/I k9HOECT AH4j FIIR2u9yPycLFHf 3jPX/2cBatLbD DqcteaV FFTd0 83xPFN3WITsgqzoTJh9rWUVShO U5lBQphx ZypKA9E 7lDPTskkgVsuUZwCkMIG WKkK1gXe0 iIhHe97e7 khyi+qVBc rp+1XnFTTq eEz+fB/Sfp 4dunR7GhLVp OrHKDf/Ijc1/P ffkEKjZ4wlpU2 OiPCGYJuBn7w3SX wWmljEeVctneGbb pEMy/UFAxoGq6r3gl5 cX1JvqV0iluxDRubqk oZ6M0EMRD1a0nnM/tFeWE pvpbiHy5vd4B7DJxFMD2kx HQ2zCVmJOymIpopwKg4CDDHO /Rsk/ZUeRMMfSuhu1BKkr6PsJS 9dtdgU4FAYvHXfzfCcc314MnamX2h pD+nTKSZPnPHr8EAyTHC2nDttU9wlvbKeo bNn1yw5jtVJItId87q51wuvlVbI4+x463txhtLeghLabxgpF/ABGuDRE=$*'').unpack('m')[0]))
  • 16. omoikane.rb • A snake game whose code is snake-shaped yhara award “Most playable”
  • 17. omoikane.rb • Snake game – Game over if you hit an obstacle or your own body – The snake grows longer if it eats food • Originality – The snake can toggle between black and white – The snake can eat an item of his color – Inspired by Ikaruga(斑鳩) • A famous shooter video game with this scoring rule • It does not use curses but io/console yhara award “Most playable”
  • 18. omoikane.rb • Judges' comments – yhara: At first it looked just like a simple snake game but actually it has some tweaks and many features to make the game enjoyable. – shinh: It was a snake, not Python. yhara award “Most playable”
  • 19. Winner » eto shinh yhara matz leonid flagitious mame score “Most likely to be required” 『最も必要となりそうで賞』 Yutaka HARA flagitious award 7 3 N/A 6 5 8 6 5.83
  • 20. yhara.rb flagitious award “Most likely to be required” ︙ using Kumimoji a = 1.㌢㍍ b = 10.㍉㍍ p a == b #=> true puts a + b #=> 0.02㍍ ㌢㍍ ㍉㍍ Japanese "kumimoji" (composite characters) centi meter milli meter
  • 21. yhara.rb • A DSL using "kumimoji" (composite characters) – like 100.days of ActiveSupport flagitious award “Most likely to be required” ︙ a = 1.㌋ b = 1.㍄ printf "1㌋ ≒ %f㍄¥n", a/b #=> 1㌋ ≒ 1.150779㍄ nautical mile mile
  • 22. yhara.rb • Dare not obfuscate, but cleanly implement with meta-programming • Attention to detail flagitious award “Most likely to be required” %w( 1 ㌅ = 2.54 ㌢㍍ 1 ㌳ = 30.48 ㌢㍍ ... ).each_slice(5) do |_, name, _, amount, unit| define_method name do amount.to_r.send(unit) end end alias ㌖ ㌔㍍ meter kilo kilometer (in a character)
  • 23. yhara.rb • Judges' comments – flagitious: I'd like to encourage non-obfuscated entries in the future that none the less become confusing for high complexity or other oddities. And I thought it was well done. – eto: Practical, even! Attempting to use Unicode characters in a practical way is fun, just like APL. – shinh: Is this just normal code? – yhara (camouflage comment): It's interesting that 1 Kairi is so close to 1 Mile flagitious award “Most likely to be required”
  • 24. Winner » eto shinh yhara matz leonid flagitious mame score “Most reactive and diffusive” 『最も反応的かつ拡散的で賞』 Sergey Kruk (lonelyelk) matz award 9 6 5 8 7 7 6 6.86
  • 25. lonelyelk.rb matz award “Most reactive and diffusive” $q=%w[$w&&!$s&&exit;W=130;H=80;HS=40;puts(q="$q=%w[#$q].join;at_exit{eval($q)}".chars.each_slice(W).map(&:join).join("¥n"));$s&&$w &&(puts('$w="'+$w+?"+";at_exit{$s=#$s}¥n#{q}")||exit);srand($s||=Random.new_seed);f=0.03+0.03*rand;k=0.057+0.006*rand;g=32.chr+".: -=+*#%@";mc=800+400*rand;spt=(1..(3+5*rand)).map{{x:(W*rand).floor,y:(H*rand).floor,r2:(10+10*rand)**2}};z=(0...H).map{|y|(0...W). map{|x|{a:1.0,b:spt.any?{|s|s[:r2]>=(x-s[:x])**2+(y-s[:y])**2}&&1.0||0.0}}};n=(1..H).map{(1..W).to_a};$l=->(v,x,y,s){(l=x-1)<0&&l= W-1;(r=x+1)>=W&&r=0;(t=y-1)<0&&t=H-1;(b=y+1)>=H&&b=0;0.2*(v[y][r][s]+v[y][l][s]+v[t][x][s]+v[b][x][s])+0.05*(v[t][r][s]+v[t][l][s] +v[b][r][s]+v[b][l][s])-v[y][x][s]};print('$w="');pc=4;mc.to_i.times{|c|(0...W).map{|x|(0...H).map{|y|la=$l.call(z,x,y,:a);lb=$l.c all(z,x,y,:b);a=z[y][x][:a];b=z[y][x][:b];n[y][x]={a:(a+1.0*la-a*b*b+f*(1-a)).clamp(0,1),b:(b+0.5*lb+a*b*b-(k+f)*b).clamp(0,1)}}}; z,n=[n,z];((c+=1)/mc*W).floor>pc&&(pc+=1)&&print(?.)};puts(?.*(W-pc));dmi,dma=z.map{|l|l.map{|v|v[:a]-v[:b]}.minmax}.flatten.minma x;z.each_slice(H/HS){|l|W.times{|x|sum=l.inject(0.0){|a,l|l[x,1].inject(a){|s,v|s+((v[:a]-v[:b]-dmi)/dma)}};print(g.chars[(sum*W*H S*g.size/(W*H)).clamp(0,g.size-1).floor])};puts};ft=?"+";at_exit{$s=#$s}";puts(?.*(W-ft.size)+ft+10.chr+q)].join;at_exit{eval($q)}
  • 26. lonelyelk.rb matz award “Most reactive and diffusive” $q=%w[$w&&!$s&&exit;W=130;H=80;HS=40;puts(q="$q=%w[#$q].join;at_exit{eval($q)}".chars.each_slice(W).map(&:join).join("¥n"));$s&&$w &&(puts('$w="'+$w+?"+";at_exit{$s=#$s}¥n#{q}")||exit);srand($s||=Random.new_seed);f=0.03+0.03*rand;k=0.057+0.006*rand;g=32.chr+".: -=+*#%@";mc=800+400*rand;spt=(1..(3+5*rand)).map{{x:(W*rand).floor,y:(H*rand).floor,r2:(10+10*rand)**2}};z=(0...H).map{|y|(0...W). map{|x|{a:1.0,b:spt.any?{|s|s[:r2]>=(x-s[:x])**2+(y-s[:y])**2}&&1.0||0.0}}};n=(1..H).map{(1..W).to_a};$l=->(v,x,y,s){(l=x-1)<0&&l= W-1;(r=x+1)>=W&&r=0;(t=y-1)<0&&t=H-1;(b=y+1)>=H&&b=0;0.2*(v[y][r][s]+v[y][l][s]+v[t][x][s]+v[b][x][s])+0.05*(v[t][r][s]+v[t][l][s] +v[b][r][s]+v[b][l][s])-v[y][x][s]};print('$w="');pc=4;mc.to_i.times{|c|(0...W).map{|x|(0...H).map{|y|la=$l.call(z,x,y,:a);lb=$l.c all(z,x,y,:b);a=z[y][x][:a];b=z[y][x][:b];n[y][x]={a:(a+1.0*la-a*b*b+f*(1-a)).clamp(0,1),b:(b+0.5*lb+a*b*b-(k+f)*b).clamp(0,1)}}}; z,n=[n,z];((c+=1)/mc*W).floor>pc&&(pc+=1)&&print(?.)};puts(?.*(W-pc));dmi,dma=z.map{|l|l.map{|v|v[:a]-v[:b]}.minmax}.flatten.minma x;z.each_slice(H/HS){|l|W.times{|x|sum=l.inject(0.0){|a,l|l[x,1].inject(a){|s,v|s+((v[:a]-v[:b]-dmi)/dma)}};print(g.chars[(sum*W*H S*g.size/(W*H)).clamp(0,g.size-1).floor])};puts};ft=?"+";at_exit{$s=#$s}";puts(?.*(W-ft.size)+ft+10.chr+q)].join;at_exit{eval($q)} $w=".............................................................................................................................. %@@@%#*+-:. .:-+*#%%%#*+=:.. .-+*%@@@@@@@@@%%%%%%%%###*+=====+****+=:.. ..:-=+*#%@@@@@@@%#*+=::.... ..-=*##%%%#*+-:.....:-+*# #%%@@%#*+-:. ..:-=++*++=-:... ..:=*#%@@@@@@%##********++=--:....:-=+++=-:. ..:-=+*##%%%%##*=-:...........:-=+***+=--:......:-=+ =*#%%%%#*=-:. ...::---:::......:=+#%@@@@%#*+=-::::-----:::.. .:=+**+=-:. ...:--=+++++=-:......::::....::-----::::........:- :-+*#%%%#*=:. .............:-+*#%%%%#+=:.. .............:-+*###*+-:.. ...::---::......:--===-::.........:::::::... .. .:=+#%%%#*=:. ..........::-=+*##**=-:. ............:-=*#%%%%#*+=-:.........:::......:-=+****+=-:.......::-=====-:.. .:=+#%%%#*+-:....::---=---::::--=+++==-:. ....::------::...::-+*#%@@@@%%#*+=--::::::::::....:-+*#%%%%#*=-:.....:-=+**##*+=:.. .:=*#%@@%#**+===++******+=--::::----::....::-==++****+=-::...::=+*#%@@@@@@%%#*+=--:::::::::::=+*%@@@@@%#+-:.....:-+*#%%%%#*=-.. .-+#%@@@@@%%####%%%%%%#*+=-::..::::::.:::-=+*#%%%%%%#*=-......:-=*#%%@@@@@@%%#+=-:::::::::-=+*%@@@@@@%#+=:. .:=*#%@@@@%#+=:. .-+#%@@@@@%%%##%%%%%%%#*+=-:.....:::::::-=+##%@@@@@@%#+-. ...:-=+*#%%@@@@%#+=::..::::::-=+#%@@@@@@@#*=:. .:=*#@@@@@%#*=:. .:-+#%@@%%#*+++++**###**+=-::..::::::::::-=+*#%@@@@@@@%*=:. ...::-=+*#%%%#*=:.. ....:::--=*#%@@@@@%#*=:. .:=*%@@@@@%#+=:. .:=*#%%%#+=::...::-====--::::::-----::...::-=+*#%@@@@@@%*=:.. .....:-=**#*+=:. ....::::-=+*#%%%%%#+=:.. .:=*%@@@@@%*=-.. .:=+##%#*+-. ...::::...::-=+++++=-:......:-=+*#%@@@@%#*=-:::.........:-++*++-:....:::::::::-=++****+=-:....:-+*%@@@@%#+-:. .:-+*#%##+-:. ............:-=+*####*=-:. ..:-+*%@@@@@%%#*+=--:... .:-+*##*++=====---:::.:::-------::....:-+*#%%%%#+-:. .:-+*#%%#*=-.. ...::---:::....:-=*#%%%%#*+-:.. .:=*%@@@@@@@%%#*=-:... .:-+#%%%%%###**+=--::........::.......:-=*####*+-:. :-+#%%%%#+-:....:--=+++=--:....:-+*%%@@@%#+=:... ..-+#%@@@@@@@%%*+-:.. .:=*#%@@@@%%##*+=-::...................:-=++++=-:. . =+#%%%%#*=:.. ..:=+*###*+=:.....:-+#%@@@@%#*=-:.. ..:=*#%@@@@@@%#*=-:. .:-+#%@@@%%##*+=--::......::-----::......::----:.. ..: *#%%%%#*=-.. ..-+*%%%%%*+-:. .:-+#%@@@@@%*=-:.. ...:-+*#%%@@%%#*=-:. .:-+*%%%%#*+==-::.......:--=+*****+==-::....:::......:-+ %%@@%#*=-.. .:=*#%@@@%#*=:. .:-+#%@@@@@%*=-.. ...:-=+*****++=::.. ..-=*#%%%#*+-:... ...:-=+*##%%%%%%##*+=--::.......:-=+# @@%%#*=-.. .-+#%@@@@@%#+-.. .:=*%@@@@@@%*=:. ...::------::.....:-+*#%%%#*=-. ..:-=+*##%%%%%%%%%%%%##*+=-:.....:-=*#% @%%#+=:.. ..-+*%@@@@@@@#*=:.. .:=*#@@@@@@@%*=-.. .............:=+#%%@@%#+-. .:-=+*##%%%%#*****##%%@%%#*+=:.....-=*#%@ %#*+-:. ..:-+*%@@@@@@@@%*+-:.....:-+#%@@@@@@@%#+=:... ..........:-=*#%@@%%*+-. .:-=+*#%%@@%#*+-:..:-+*#%%%%#+=:.. .:-+#%%% #*=-.. ..:-=+*#%%@@@@@@%#*+-::....:-=+*#%%@@@@@%##*+=--:::::::::.....:-=*#%%%%#*=-:...:-=*#%%@@@%#*=:. .:=*####*+-:. ..:=*#%%% *=-.. ..:-=++******####**+=-::....:::-==+**##%%%%%%###******+++=--:..::-=+*##**+-::..:-=+*#%%%%%#*=-.. .:-=+**++-:.. .:-+##%%# =-.. .:-==+++=--::---===--:::..........:::-==+*##%%%%%%%%%%%%%##*+-::.::--=====-::..::-=+**###**+=-:.......::--==--:.. ..-=*####* -.. .:-=+**+=-.. ................... ...:-=++*##%%%@@@@@@%%#*=-::...::::::.......::--=====-::.........:::::::... .:=+*###*= :. .:-=*###*=:. ........:::::::.... ...::-==+**##%%%%%##*=-:............................ ...:::::::.... .:-+*###*=- . ..-=*#%%%#+-:......::::--===++++==--::... ....::--=+*****+=-:.........:::::::..... ..:-==+++=-::. .:-+*###*+-: .:=+#%@@%%*+-:...::--=++*###%%%%###*++=-::.. ..:------::.....::--=++++++==--::........:-=+*######*+=-::::-=+*#%%%#+=:. .-=*%%@@@%#*=-:.::--=+*#%%@@@@@@@@@@%%#**+=-::.... ....:::......:-=+*##%%%%%%##**++=======+**#%%%@@@%%%##*+++**#%%@@@%#+-. ..-+*%@@@@%#*=::..::-=+##%@@@@@@@@@@@@@@%%%#**+==---::::::.........:-=+##%@@@@@@@@%%%%%########%%%%@@@@%%%%%######%%@@@@@@%*=:. .:=*#%@@@%*+-:....::-=+*#%%%%%%%%%%%%%@@@@@@%%%###**++==--::....:-=+*#%@@@@@%%%#######%%%%%%%%%%%%%###****+++++**#%%@@@@@%#+-. .:-+#%%%%#*=:. ....::-==++*+++=====+**#%%@@@@@@@@%%%#*+=-::....:=+#%%@@%%#**+=======++***#####**++=---::::::::--=+*#%%@@%#+=:. . .:=+##%##+-:. ....:::::::......:-=+*##%%%@@@%%%#*+=-:....:-+*#%%%%#*=-:........:::--=====--::... ..:-=+#%%%#*+-: :. .:-+*##*+=:. ........... ..:--=+***###**++=-:.. .:=+#%%##*=-.. ............. ...... .:-=*#%%#*+- -:. .:-=+***+=--::::-----::............. ....::---==---::.. .:-+*###*+-:. ....... .........:::-----::... .:=*##%#*+ +=:. ..:-=+*************+=-::...::::::.... ......... ..:=+##%#*+-:. ..::------:::........::--=++****++=-:. .:=*#%%#* #*=:.. .::=+*#%%%@@@@@%%#*=-:...::------::.. ....:-=+*#%%%#+=:. ..:-=+**###**++==--:::::--=+*#%%%%%#*+=:.. ..-+*#%%% %#*+-:. .:-+*%%@@@@@@@%#*=:....::-=+***+=--:.......:::--==+*#%%@@%%#+-.. .:-=*#%%@@@@@%%##*+=-::::-=+*#%@@@@@%#*=-.. .:-+#%%% @%%#+=:.. .:-+*%@@@@@@@%*+-:. ..-=*#%%%%##**++====++++***##%%%@@@%%*=-.. ..:=+#%@@@@@@@@@@%#*+-::..::-=*#%@@@@@%#*=:.. .:=*#%@ @@@%#*=-.. .:-+#%@@@@@%#+-:. .:-+#%@@@@@@@%%%################%%%%#*=:.. ..:=+#%@@@@@@@@@@%#*+-:......:-+*#%@@@%#*+-:....:-+*#% .............................................................................";at_exit{$s=242772018625937582781958127315352038949} $q=%w[$w&&!$s&&exit;W=130;H=80;HS=40;puts(q="$q=%w[#$q].join;at_exit{eval($q)}".chars.each_slice(W).map(&:join).join("¥n"));$s&&$w &&(puts('$w="'+$w+?"+";at_exit{$s=#$s}¥n#{q}")||exit);srand($s||=Random.new_seed);f=0.03+0.03*rand;k=0.057+0.006*rand;g=32.chr+".: -=+*#%@";mc=800+400*rand;spt=(1..(3+5*rand)).map{{x:(W*rand).floor,y:(H*rand).floor,r2:(10+10*rand)**2}};z=(0...H).map{|y|(0...W). map{|x|{a:1.0,b:spt.any?{|s|s[:r2]>=(x-s[:x])**2+(y-s[:y])**2}&&1.0||0.0}}};n=(1..H).map{(1..W).to_a};$l=->(v,x,y,s){(l=x-1)<0&&l= W-1;(r=x+1)>=W&&r=0;(t=y-1)<0&&t=H-1;(b=y+1)>=H&&b=0;0.2*(v[y][r][s]+v[y][l][s]+v[t][x][s]+v[b][x][s])+0.05*(v[t][r][s]+v[t][l][s] +v[b][r][s]+v[b][l][s])-v[y][x][s]};print('$w="');pc=4;mc.to_i.times{|c|(0...W).map{|x|(0...H).map{|y|la=$l.call(z,x,y,:a);lb=$l.c all(z,x,y,:b);a=z[y][x][:a];b=z[y][x][:b];n[y][x]={a:(a+1.0*la-a*b*b+f*(1-a)).clamp(0,1),b:(b+0.5*lb+a*b*b-(k+f)*b).clamp(0,1)}}}; z,n=[n,z];((c+=1)/mc*W).floor>pc&&(pc+=1)&&print(?.)};puts(?.*(W-pc));dmi,dma=z.map{|l|l.map{|v|v[:a]-v[:b]}.minmax}.flatten.minma x;z.each_slice(H/HS){|l|W.times{|x|sum=l.inject(0.0){|a,l|l[x,1].inject(a){|s,v|s+((v[:a]-v[:b]-dmi)/dma)}};print(g.chars[(sum*W*H S*g.size/(W*H)).clamp(0,g.size-1).floor])};puts};ft=?"+";at_exit{$s=#$s}";puts(?.*(W-ft.size)+ft+10.chr+q)].join;at_exit{eval($q)}
  • 27. lonelyelk.rb matz award “Most reactive and diffusive” $q=%w[$w&&!$s&&exit;W=130;H=80;HS=40;puts(q="$q=%w[#$q].join;at_exit{eval($q)}".chars.each_slice(W).map(&:join).join("¥n"));$s&&$w &&(puts('$w="'+$w+?"+";at_exit{$s=#$s}¥n#{q}")||exit);srand($s||=Random.new_seed);f=0.03+0.03*rand;k=0.057+0.006*rand;g=32.chr+".: -=+*#%@";mc=800+400*rand;spt=(1..(3+5*rand)).map{{x:(W*rand).floor,y:(H*rand).floor,r2:(10+10*rand)**2}};z=(0...H).map{|y|(0...W). map{|x|{a:1.0,b:spt.any?{|s|s[:r2]>=(x-s[:x])**2+(y-s[:y])**2}&&1.0||0.0}}};n=(1..H).map{(1..W).to_a};$l=->(v,x,y,s){(l=x-1)<0&&l= W-1;(r=x+1)>=W&&r=0;(t=y-1)<0&&t=H-1;(b=y+1)>=H&&b=0;0.2*(v[y][r][s]+v[y][l][s]+v[t][x][s]+v[b][x][s])+0.05*(v[t][r][s]+v[t][l][s] +v[b][r][s]+v[b][l][s])-v[y][x][s]};print('$w="');pc=4;mc.to_i.times{|c|(0...W).map{|x|(0...H).map{|y|la=$l.call(z,x,y,:a);lb=$l.c all(z,x,y,:b);a=z[y][x][:a];b=z[y][x][:b];n[y][x]={a:(a+1.0*la-a*b*b+f*(1-a)).clamp(0,1),b:(b+0.5*lb+a*b*b-(k+f)*b).clamp(0,1)}}}; z,n=[n,z];((c+=1)/mc*W).floor>pc&&(pc+=1)&&print(?.)};puts(?.*(W-pc));dmi,dma=z.map{|l|l.map{|v|v[:a]-v[:b]}.minmax}.flatten.minma x;z.each_slice(H/HS){|l|W.times{|x|sum=l.inject(0.0){|a,l|l[x,1].inject(a){|s,v|s+((v[:a]-v[:b]-dmi)/dma)}};print(g.chars[(sum*W*H S*g.size/(W*H)).clamp(0,g.size-1).floor])};puts};ft=?"+";at_exit{$s=#$s}";puts(?.*(W-ft.size)+ft+10.chr+q)].join;at_exit{eval($q)} $w=".............................................................................................................................. .::--=+*#%@@@@@@@%*=:....:=*%@@@@%*=-.. ......... ...::-----::..:-=+#%%%%%#*+-:...:=*#%%%%#+=::::-=++*++=-::......::::::........ =++*##%@@@@@@@@@@#+-:. ..:=*#%@@@@%#+=::...........::--=++**++=-::.::-=+****+=-:...:-+#%%%%#+=:...:-+*#%%%#*+=-:..............::-- #%%%%@@@@@@@@@@@@#+-:. ..:-+#%@@@@@@%#*+==========++**##%%%%%#*+-:...::--==--::....:=*#%%%#*=:....:=*#%@@@@%%#*+=-:.......::--=+*# @@@%%%%%%%%@@@@@@%*=:.....:=+#%@@@@@@@@%%%#######%%%%%@@@@@@@%#*+-:......::.... .:=+#%%%%#+-:. ..-+#%@@@@@@@@%#*+==-----==+*##%%% %%##*+====+*#%@@@%#+=:.....:=+*#%@@@@@@@@@@@@@@@@@@@@@%%%%%%@%%#*+=:.............:=*#%@@%#*=:....:=*%@@@@@@@@@%%###****###%%%@@@@@ #*+=-:.....-=*#%@@%#*=-:....:-=+*##%%%%%%%@@@@@@@@%%##**+++*#%%%%#*+==--::::::--=*#%@@@@%#+-:...:-+#%@@@@@@%%#****#%%%@@@@@@@@@%%# =-::... ..:=*#%@@%#*+-:......:--=+++++*****#####*++=-:...:=+#%@@%%%##*******##%%@@@@@@#*=-:..:-=+#%@@@@%#*=-::-=+#%@@@@@@@@%#*+= ............:-=*#%@@@%#*+-:........::::::::---====--:.. :=*%@@@@@@@%%%%%%@@@@@@@@@@%*+-:...::=+*#%%%#*=-.. .-+#%@@@@@%#+=-:: ..::----::...:-=*#%@@@@%#*+-::................::::::... .:=*%@@@@@@%%%%%%%@@@@@@@@@%#+-:.....:-=+****+=-.. .:+#%@@@%#*=:.... :-=++**+=-:....:=+#%@@@@@%%#*=--::.........:::::::::::::::--+*#%%%%##***+*****###%%%%%#*=:. ..:-=++++=-:......:=*#%@@%#+-:. .. =+*#%%%#*+=:....:=+#%@@@@@@@%##*++===========---:::--==++**##%%%#*+=-:::::::----==+****+=-:.....:-=++++=--:...::-+*#%@@%#*=:.....: +#%@@@@@%#+=:....:=+*#%@@@@@@@@%%%%%%%%%%###*+=--:--=+*#%%@@@@%#*=:...............:--=++++======+**##**=-:::::-=*#%@@@@%*=-.....:= #%@@@@@@@%#+-:...::-=+**###%%%%@@@@@@@@@@@@%#*=-:::-=*#%@@@@@@%*=:.. ...::::::......:-+*###%%%%%%@@%%#*=-:..:-=*#%@@@@%#+-:....:-+ %@@@@@@@@@#*=-::..:::---====++*##%@@@@@@@@@%#+-:...:=+#%@@@@@%#+-:....:-==++==-:....:-+*%%@@@@@@@@@@%#*=:....-=*%@@@@@%*=:.. ..:=* @@@@@@@@@%#+=-::::::::.......::-=+*#%@@@@@@%#+-. ..:=+#%%@@%#*+-:..:-=+*####*+=::..:-+*%@@@@@@@@@@@%#+-.. ..-+#%@@@@%#+-:. .:-+# @@@@@@@%#*+=-:::::---:::... ...:-=*#%@@@@%#+-. ..:-+*####*+=::.:-=*#%%@@%#*+-:..:-=*%@@@@@@@@@@@%*=:. ..-+#%@@@@%*=:. ..-=*% @@@@@@%*=-:...::-==+++==--:.... ..:-+*%@@@@%#+-:. ..::-=+++==-:::-=+#%@@@@@%#+-::.:-=+#%%@@@@@@@@%#*=:....:=*%@@@@%#+-:. ..:=*%@ @@@@@%*=:. ..:-=+*##%###*+=-::... ..:=*#%@@@%#+=-:......::---:::::-+*%@@@@@@%*=-:...:-=++*###%%%%%#*+-:...:=+#%@@@@%#+-:...:=+#%@ @@@@@%*-. ..:-+*#%@@@@@@%#*+=-:.....-=*#%@@@%%#*+=-::....::::::::-=*#%@@@@@#*=:.....:::----===++++==-::::-+*%%@@@%#*=-:..:-=*#@@ @@@@@%*=-.....:-=*#%@@@@@@@@@%#+=-:...:-+*#%@@@@@%##*++==----:::::::-=*#%@@@@#*-:. ............:::---::::-=+*#%@@%#*+-::.::-=*#%@ %%@@@%%*+-:....:-+#%@@@@@@@@@@%#+=-:::::-=+*#%%%@@@%%%%###*++=-::...::=+#%@@@%#+-:....:::..........::::::::-=+*#%%#*=-:...::--=+*# +*#%%%%%#+=-:...:=+#%@@@@@@@@@%#+=-:::::::-==+**#%%%@@@@@@%%#*=-:.. ..-+#%@@@%%*++========---:::::::::.....:-=****=-:. ....:::--= :-=+#%%%%#*=-:...:-+#%@@@@@@%%*+=-::::::::..:::-=++*#%@@@@@@%#*=:. :=*%@@@@@@%%%%%######****+++==-:.. :-+***+-:. .......... ..:-+*#%%%#*=:....:-+*#%%%%##+=-::.:::--:::......::-=+#%%@@@@%#*=:. .:=*%%@@@@@@@@@@@@@@@@@@@%%%%#*+=-:. ..-=*#%##*=--::--:::... ...:-+*%%%%#+=:....:-=+****+=-:....:-=+++=--:.. ..::=+*#%@@@%%#*==--=+**###########%%%%@@@@@@@@@@@%%#*+===+*#%@@@@%%##****++=-:. :...:-+#%%%%#+-:.....:-----::.....-=+*####**+=-:.......:-+*#%%@@@%%###****++==========++**##%%%@@@@@@@%%%%#%%%@@@@@@@@@@@@@%%#*+=- -:...:=*#%@@%#+=:...............:-+*#%@@@@@%%#*+=--::...::-+*#%@@@@@@%##+=-::.........:::--=++**##%%%%%%%%%%@@@@@@@@@@@@@@@@@@%#+= -:....-+#%@@@%#*=-:...........:-=+#%@@@@@@@@@@%%#*+==-::..::-+*%@@@@@%#*=::.................:::-==+++*****#####%%%@@@@@@@@@@@@%#+= :.. ..-+#%@@@@@%#*+=--:::::--=+*#%%@@@@@@@@@@@@%%##*+=-::....-=*%@@@%#*=-:...::------::... .....::::-------====++*##%%%%%%%##*=- .....:=*%@@@@@@@@%%##*******##%%%%%%%#############**+=-::.. ..-+#%@%%*+-:..::-=+*****++=-::......................::--==++***++=-:: ...:-=*%@@@@@@@@@@@%%%%%%@@@@@@@%%#+==-----=========--::... .:-+#%%%#*=:...:-=+*#%%%%%%##*+==--:::::..................::::-::::... :-=+*#%@@@@@%%#######%%@@@@@@@@@#*=:.............:::........:-+#%@@%#+-:...:-=+##%@@@@@@@@%%##**++++====----::::.................. +*##%%@%%%#*+==----==+*#%@@@@@@%*=:. ...............::::-=+*#%@@@%#+-:. ..:-=+*#%%@@@@@@@@@@@@%%%%######***++==--::.... ....:-= %%@@@%%#*+=-:........:-+*#@@@@@%*=:.....:------------==++**#%%@@@@@@%#+-......:-==+*#%@@@@@@@@@@@@%%%%@@@@@@@%%%##*++=--:::--==+*# @@@%%#*+=::............:=+#%@@@%*=:...::-=+**##########%%%%%@@@@@@@@@%#+=::......::--+*%@@@@@@@%#***##%%@@@@@@@@@@@%%%###**###%%@@ @%%#*+-::....:::::::....:=*#%@%%*+-:..:-=*#%%@@@@@@@@@@@@%%%#####%%@@@%%#*+=-::......:=*#@@@@%*+-:::-=+*##%%@@@@@@@@@@@@@@@@@@@@@@ #*+=-:.....:-==++==-:...:-+#%%%%#+-:..:-=*#%@@@@@@@@@@@%%#*+=----=*#%@@@@%##+=-:.. .-+#%%%%*=:. ..:-==+**#%%@@@@@@@@@@@@@@@@%% =--:.....:-=+*###*+=-:...-=*%%@%#*=:...:-+*#%%%@%%%%##**+=-:.. ..-+#%@@@@@%%*+=:.....-+*%%%#*=:. .....::::--=+*#%@@@@@@@@@%%##*+ :... ..:-+*#%%%%#*+-:...:=*#%@%%*=:....:-=++****+++=---::.... .:=*#@@@@@@%#*=-:...:=*#%%%#*=-:...::::.......:-=+*#%%%%%##*+=--: ......:-+*#%@@@@@%*=-....:=*#%@@%#+-.. ...::----:::...............:-+#%@@@@@%#*=-:..:-+*%%%%#*=-::::-----::... ..::-=+++++=-::.... .............................................................................";at_exit{$s=317871915447465570974410760196813665823} $q=%w[$w&&!$s&&exit;W=130;H=80;HS=40;puts(q="$q=%w[#$q].join;at_exit{eval($q)}".chars.each_slice(W).map(&:join).join("¥n"));$s&&$w &&(puts('$w="'+$w+?"+";at_exit{$s=#$s}¥n#{q}")||exit);srand($s||=Random.new_seed);f=0.03+0.03*rand;k=0.057+0.006*rand;g=32.chr+".: -=+*#%@";mc=800+400*rand;spt=(1..(3+5*rand)).map{{x:(W*rand).floor,y:(H*rand).floor,r2:(10+10*rand)**2}};z=(0...H).map{|y|(0...W). map{|x|{a:1.0,b:spt.any?{|s|s[:r2]>=(x-s[:x])**2+(y-s[:y])**2}&&1.0||0.0}}};n=(1..H).map{(1..W).to_a};$l=->(v,x,y,s){(l=x-1)<0&&l= W-1;(r=x+1)>=W&&r=0;(t=y-1)<0&&t=H-1;(b=y+1)>=H&&b=0;0.2*(v[y][r][s]+v[y][l][s]+v[t][x][s]+v[b][x][s])+0.05*(v[t][r][s]+v[t][l][s] +v[b][r][s]+v[b][l][s])-v[y][x][s]};print('$w="');pc=4;mc.to_i.times{|c|(0...W).map{|x|(0...H).map{|y|la=$l.call(z,x,y,:a);lb=$l.c all(z,x,y,:b);a=z[y][x][:a];b=z[y][x][:b];n[y][x]={a:(a+1.0*la-a*b*b+f*(1-a)).clamp(0,1),b:(b+0.5*lb+a*b*b-(k+f)*b).clamp(0,1)}}}; z,n=[n,z];((c+=1)/mc*W).floor>pc&&(pc+=1)&&print(?.)};puts(?.*(W-pc));dmi,dma=z.map{|l|l.map{|v|v[:a]-v[:b]}.minmax}.flatten.minma x;z.each_slice(H/HS){|l|W.times{|x|sum=l.inject(0.0){|a,l|l[x,1].inject(a){|s,v|s+((v[:a]-v[:b]-dmi)/dma)}};print(g.chars[(sum*W*H S*g.size/(W*H)).clamp(0,g.size-1).floor])};puts};ft=?"+";at_exit{$s=#$s}";puts(?.*(W-ft.size)+ft+10.chr+q)].join;at_exit{eval($q)}
  • 28. lonelyelk.rb matz award “Most reactive and diffusive” $q=%w[$w&&!$s&&exit;W=130;H=80;HS=40;puts(q="$q=%w[#$q].join;at_exit{eval($q)}".chars.each_slice(W).map(&:join).join("¥n"));$s&&$w &&(puts('$w="'+$w+?"+";at_exit{$s=#$s}¥n#{q}")||exit);srand($s||=Random.new_seed);f=0.03+0.03*rand;k=0.057+0.006*rand;g=32.chr+".: -=+*#%@";mc=800+400*rand;spt=(1..(3+5*rand)).map{{x:(W*rand).floor,y:(H*rand).floor,r2:(10+10*rand)**2}};z=(0...H).map{|y|(0...W). map{|x|{a:1.0,b:spt.any?{|s|s[:r2]>=(x-s[:x])**2+(y-s[:y])**2}&&1.0||0.0}}};n=(1..H).map{(1..W).to_a};$l=->(v,x,y,s){(l=x-1)<0&&l= W-1;(r=x+1)>=W&&r=0;(t=y-1)<0&&t=H-1;(b=y+1)>=H&&b=0;0.2*(v[y][r][s]+v[y][l][s]+v[t][x][s]+v[b][x][s])+0.05*(v[t][r][s]+v[t][l][s] +v[b][r][s]+v[b][l][s])-v[y][x][s]};print('$w="');pc=4;mc.to_i.times{|c|(0...W).map{|x|(0...H).map{|y|la=$l.call(z,x,y,:a);lb=$l.c all(z,x,y,:b);a=z[y][x][:a];b=z[y][x][:b];n[y][x]={a:(a+1.0*la-a*b*b+f*(1-a)).clamp(0,1),b:(b+0.5*lb+a*b*b-(k+f)*b).clamp(0,1)}}}; z,n=[n,z];((c+=1)/mc*W).floor>pc&&(pc+=1)&&print(?.)};puts(?.*(W-pc));dmi,dma=z.map{|l|l.map{|v|v[:a]-v[:b]}.minmax}.flatten.minma x;z.each_slice(H/HS){|l|W.times{|x|sum=l.inject(0.0){|a,l|l[x,1].inject(a){|s,v|s+((v[:a]-v[:b]-dmi)/dma)}};print(g.chars[(sum*W*H S*g.size/(W*H)).clamp(0,g.size-1).floor])};puts};ft=?"+";at_exit{$s=#$s}";puts(?.*(W-ft.size)+ft+10.chr+q)].join;at_exit{eval($q)} $w=".............................................................................................................................. ::..... ................:-+*#%@@@@@@@%#*+=-:.. ..:-=+**######**++++==++++***##%%%@@@@@@@@@@@@@@@@%%#+=-:....:-=*##%#*+=:......: .......::::::::::........:=+*%%@@@@@%%#*+=-:.. ..:-+*#%%%@@@@@%%%%%############%%%%@@@@@@%%%####%%%%##*=-:....:-=*####*=-....... ::---=============------=+*#%@@@@@%%#*+-::.. ..:-=+##%%@@@@@@@@@@@@@%%%%###********#####*++=---=+*#####*=-:....:-=*###*+=:...... =++***############*****##%%@@@@%%#*+=-:... ...:-=+*#%%%%%#####%%%%%%%%##**++=--::---=====-::. .:-+*####*=-:....:-+*#%##*+=----- *##%%%%%%%%@@@@@@@@@@@@@@@@@@%%#*+=-:.. ...:-=+*#%%%%#*+==-==++*****++==--::.......::::::.. .:-+*###*+=:.. ..-=*#%%%%##***** ##%%%%%%%%%%%%%%@@@@@@@@@@%%#*+=-:... ..::-+*##%%%%%#+-:.....::-----:::............:::::..... .-=*###*+=-.. ..:=*#%@@@%%%#### ***************###%%%%%%%##*+=-:.. ...:-=+*#%%@@@%%#+=:. ..............:::::::::::::::::... ..-=*###*+=:.. ..-=*#%@@%%%##*** ----------:::---==++*****+=-:... ...:-=+*#%%@@@@%%#*=-:........... ..:--=====-----------::....:=+*###*=-:....:-+*%%%%#*+==--- .......... ....::-----::... ...:-=+*##%%@@@%%%#*+=-:....::::::::::::-==+***++==-----==+++======+*####*+=::....:=*#%%#*+=:..... .......... .....:::......::-==+*#%%%%%%%##*++=-::...::--======+++**######*+=-::::-=+*#######%%%%%%#*=-:....:-+*#%#*+-:. .. ::------:::::..............:::-=+**#%%%%%%##*++=-::......::-=+**#####%%%%@@@%%*+=:....:-=*#%@@@@@@@@@@%#*+-:.....-=*#%%#*=:. ..: -==++****++++====---:::::::--=+*#%%%%%%##*+=-::... ..:-=+*##%%%%%@@@@@@@@%#*=:. ..-=*#%@@@@@@@@@@%#+=:.. ..:-+#%%%%*+-:....:: -=+*##%%%%%%%%###*++=--:::-=+*#%%%@%%##*=-:... ...:-=+**########%%@@@@@@%#*=:. .:=*#@@@@@@@@@@@%*=-.. ..:=*#%@@%#*=-:..::- --=*#%%@@@@@@@@%%%#*+=-:::-=+*#%%%%%#*=-:........:::-=++*####*++====+*#%@@@@@%*=-.. ..:=+#%@@@@@@@@@%#+-:. .:-+#%@@@@%#*+-::::: ::-=*#%@@@@@@@@@%%#*+=-:..:-=*#%%%#*+=:......::-==+**##%%%##*+-:. .:-+*%%@@@%#*=-:....:-+*#%@@@@@@@%#*=:.. .:=*#%@@@@@%#*=-:::. ...-=*#%@@@@@@%%#**+=-:....:-+*###*+-:.....:-=++*##%%%@@%%#*+-:. ..-+*#%%%%#*+=-::.:::-+*#%%@@@%%#*=-:. .:-+#%@@@@@@%#*+-::.. ...:=+#%%%%%##*++=--:... ..-=*##*+=:.....:-=+*#%%@@@@@@%#*+=:........:-+**###**+=--::::::--=+*####*+=-:.. ..:=*#@@@@@@%#*+=-:... ..:-=+*###*+==-:::.... .:-+*##*+=:.....:-=+*##%%@@@%%#*+-::........::-===+++==--::::....::--======-:.. ..:=*#%@@@@@%#*+--:.... :--=++**+=-::........ ..:-+*#%%#*+-:.....:-==+*######*+=-:....:::::....:::::::::::::........::::-:::.....:-=*#%@@@@%#*+=-:.....: =++**++=-::.. .....::::-=+*#%%@%%#*+-:......::-==++++=--:....::----::............::::::::::...::::::....:-=+#%%@@@%%*+=-:.....:-- *****+=-:......::--==++*##%%@@@@@%%#*+=-::......::::::::....::-=++++=-::.. ...::--===++====---:::::..::-=+*#%@@@@%#*=-:......:-=+ ###*+=-:...::--=+*###%%%@@@@@@%%%##**++==---::............::-=+*#####*+=------==++**#######**++=-:::.::-=+#%%@@@@%#*=-:.. ...:=+*# %#*+=::...:-=+*##%%@@@@@@@@@%#**+======++++++=--::.......:-=+*#%@@@@@%%##******###%%%%%@@@%%%#*+=-:..::-+*%%@@@@%#*=-... ...-=+##% %#*=:....:-=+*#%%@@@@@@@@%%#*+-::...::-+**####*++=-::...:-=+#%%@@@@@@@@@%%%%%######%%%%%@@@@%%#+=-:...:=+#%@@@@%#*=-... ..:-=+#%%% %*+-.. ..:-=*#%%@@@@@@%%#*+=-:.. ..-=*#%%%%%##*+-::.::-=*#%@@@@@@@@@%%%###****+++++**#%%%%#*+-:....:-+#%@@@%#*=-:.....:-=*#%%@% %*=:. ..:-=+*#%%%%%##*+=--:..........:-+#%%@@@%%#*=-::::-=+*#%%%%%%%##**+++==---::::::-=+*##*+=-:. .:-+#%%@%%*+-:.....:-=+#%@@@@ %*=:. ..:-==+******+=-::.............:-+*#%@@@%%#*+=-::::-=++*****++==--::::..... .:-++*+=-:.. .:-+#%%%%#*=:......:-+*%@@@@@ %#+:. ..::-======-::.......::::::::::-=+*#%%%%#*+=-::..:::-------::............ ..-=+++=-:. .:=*#%@%%#+-:.....:-=+#%@@@@@ @%*=: ..:::::::.......::-==++==--::--=+*****+==-::.............. .....:::.....::-=+**+=-:.. .:-+#%@@@%#+-:.....::-=*#%@@@@ @%#*=:. ..........::-=+**####*++=------==---::......::...... ...::--========+++*####*+-:...:-=*#%@@@%#*=-......::-=+*#%@@ @@@%*+-. ...:-=+*##%%%%%%##*+=-::::::.......::------:::....:::-==+**##########%%%%##*+=::.::=+#%@@@@@%#*=::.......:-=+#%% %@@@%#*+-:.. ..::-=+*##%%%@@@%%%#**+--:.........::-=++*****++++==+++**##%%%@@@@@%%%%%%%%##*+=-::::-=+*#%@@@@@%#*=-::........:=*# %@@@@@@%#*++====++**##%%%%%%%%###**+=-::......::--=+**##%%%%%%%####%%%%@@@@@@@@@@%%%###***++==-::::::-=+*#%@@@@@%#*+=-::... :=* #%@@@@@@@@@@%%%%%%%%%%%##**+++++==--::.....::-=++*##%%%%%%%%%%%%%%%@@@@@@@@@@%%##**++===---::::::....::-=+*#%@@@@%%#*=-::.. .:+ #%@@@@@@@@@@@@@@@@@@%#*+=--:::::::.......:-=+**##%%%%%####*****###%%%%%%%%%##*++=--:::..........:.......:-=+*%%@@@@%#*+-::.. .:= #%@@@@@@@@@@@@@@@@%%#+=-:..............:-=+*#%%%%%##**+==------===++******++=--:..... ...:::::::......:-=*#%@@@@%#*=-:... ..-+ #%@@@@@@%%%%%%%%###*+-:.............::-=*##%%%%%##*+=-::.........:::------:::.... ....:--==++==-::.. ..-=*#%@@@%%#+=::....:=+ *#####**++====++++==-::......::::--=++*#%%%%%%#*+=-:........... ...................::--=+**#####*+=-:.. ..-=*#%@@@%#*=-:...:-=+ ++++==-::.....::::::::.....::--=+**##%%@@@%%#*+=-:........::::..... .......:::--==++*##%%@@@@@@%#*+-:.. ..-=*#%%%%#*+-::..::-= ---::.. .............::-=+*#%%@@@@@%%#*+=-:.. ..::-=======--:::..:::::--==+**##%%%@@@@@@@@@@@%%*+=:.. .:-=*#%%%#*+=::..:::- .............................................................................";at_exit{$s=154129094866360313063042721822912717326} $q=%w[$w&&!$s&&exit;W=130;H=80;HS=40;puts(q="$q=%w[#$q].join;at_exit{eval($q)}".chars.each_slice(W).map(&:join).join("¥n"));$s&&$w &&(puts('$w="'+$w+?"+";at_exit{$s=#$s}¥n#{q}")||exit);srand($s||=Random.new_seed);f=0.03+0.03*rand;k=0.057+0.006*rand;g=32.chr+".: -=+*#%@";mc=800+400*rand;spt=(1..(3+5*rand)).map{{x:(W*rand).floor,y:(H*rand).floor,r2:(10+10*rand)**2}};z=(0...H).map{|y|(0...W). map{|x|{a:1.0,b:spt.any?{|s|s[:r2]>=(x-s[:x])**2+(y-s[:y])**2}&&1.0||0.0}}};n=(1..H).map{(1..W).to_a};$l=->(v,x,y,s){(l=x-1)<0&&l= W-1;(r=x+1)>=W&&r=0;(t=y-1)<0&&t=H-1;(b=y+1)>=H&&b=0;0.2*(v[y][r][s]+v[y][l][s]+v[t][x][s]+v[b][x][s])+0.05*(v[t][r][s]+v[t][l][s] +v[b][r][s]+v[b][l][s])-v[y][x][s]};print('$w="');pc=4;mc.to_i.times{|c|(0...W).map{|x|(0...H).map{|y|la=$l.call(z,x,y,:a);lb=$l.c all(z,x,y,:b);a=z[y][x][:a];b=z[y][x][:b];n[y][x]={a:(a+1.0*la-a*b*b+f*(1-a)).clamp(0,1),b:(b+0.5*lb+a*b*b-(k+f)*b).clamp(0,1)}}}; z,n=[n,z];((c+=1)/mc*W).floor>pc&&(pc+=1)&&print(?.)};puts(?.*(W-pc));dmi,dma=z.map{|l|l.map{|v|v[:a]-v[:b]}.minmax}.flatten.minma x;z.each_slice(H/HS){|l|W.times{|x|sum=l.inject(0.0){|a,l|l[x,1].inject(a){|s,v|s+((v[:a]-v[:b]-dmi)/dma)}};print(g.chars[(sum*W*H S*g.size/(W*H)).clamp(0,g.size-1).floor])};puts};ft=?"+";at_exit{$s=#$s}";puts(?.*(W-ft.size)+ft+10.chr+q)].join;at_exit{eval($q)}
  • 29. lonelyelk.rb matz award “Most reactive and diffusive” $q=%w[$w&&!$s&&exit;W=130;H=80;HS=40;puts(q="$q=%w[#$q].join;at_exit{eval($q)}".chars.each_slice(W).map(&:join).join("¥n"));$s&&$w &&(puts('$w="'+$w+?"+";at_exit{$s=#$s}¥n#{q}")||exit);srand($s||=Random.new_seed);f=0.03+0.03*rand;k=0.057+0.006*rand;g=32.chr+".: -=+*#%@";mc=800+400*rand;spt=(1..(3+5*rand)).map{{x:(W*rand).floor,y:(H*rand).floor,r2:(10+10*rand)**2}};z=(0...H).map{|y|(0...W). map{|x|{a:1.0,b:spt.any?{|s|s[:r2]>=(x-s[:x])**2+(y-s[:y])**2}&&1.0||0.0}}};n=(1..H).map{(1..W).to_a};$l=->(v,x,y,s){(l=x-1)<0&&l= W-1;(r=x+1)>=W&&r=0;(t=y-1)<0&&t=H-1;(b=y+1)>=H&&b=0;0.2*(v[y][r][s]+v[y][l][s]+v[t][x][s]+v[b][x][s])+0.05*(v[t][r][s]+v[t][l][s] +v[b][r][s]+v[b][l][s])-v[y][x][s]};print('$w="');pc=4;mc.to_i.times{|c|(0...W).map{|x|(0...H).map{|y|la=$l.call(z,x,y,:a);lb=$l.c all(z,x,y,:b);a=z[y][x][:a];b=z[y][x][:b];n[y][x]={a:(a+1.0*la-a*b*b+f*(1-a)).clamp(0,1),b:(b+0.5*lb+a*b*b-(k+f)*b).clamp(0,1)}}}; z,n=[n,z];((c+=1)/mc*W).floor>pc&&(pc+=1)&&print(?.)};puts(?.*(W-pc));dmi,dma=z.map{|l|l.map{|v|v[:a]-v[:b]}.minmax}.flatten.minma x;z.each_slice(H/HS){|l|W.times{|x|sum=l.inject(0.0){|a,l|l[x,1].inject(a){|s,v|s+((v[:a]-v[:b]-dmi)/dma)}};print(g.chars[(sum*W*H S*g.size/(W*H)).clamp(0,g.size-1).floor])};puts};ft=?"+";at_exit{$s=#$s}";puts(?.*(W-ft.size)+ft+10.chr+q)].join;at_exit{eval($q)} $w=".............................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. .................................................................................................................................. ......... ............................................................. .................................................... ...... ...... ......::---::...................::---::............ .................................................. .... ...::::::.. ..::-===--:.................:-=++==-:....... ...................................................... .... ..:-=+++=-:.. ..::-===--:................:-=++++=-:.. .:--===-:... ............................................ ... ..:-+*###*+-:. ...:::-:::..................:-====-::. ..:-=+*###*=-:. ........................................... ... ..:-=**#*+=-:. ..............................:::::.. .:-=+*#%@@@%#*=-.. .......................::::................ .... ..:--===-::.. ...................................... ..:=+#%@@@@@%#+=:. .......................::::::............... ..... ......... ......................................... .:-=*#%%%%#*+-:. ........................:::::............... ....... ............................................ ..:-=++++=-:. .............................................. ............................................................... ....::... ................................................ ................................................................ .................................................. ................................................................... ....................................................... .................................................................................................................................. .................................................................................................................................. ................................ ............................................................................................ ............................ . ......................................................................................... .....::::.................. ...::::.. ....................................................................... ............. ...:::--:::............... .:-=+++=-:.. .................................................................... ................ ...:::---::.............. ..-=*#%##+=:. ................................................................... ...:--==--:... .. ....::::::............... .:-+*#%%#*=:. ................................................................. ..:-=+**+=-:.. .. .......................... ..:=+***+=-:. ............................................ ................. ..:-+***+=-:... .. .......................... ..::----:.. ......................................... ..... .............. ...:-====-:....... ........................... ...... ......................................... ...:::::... .............. ....::::......... ............................ ........................................... ..:-=+++=-:.. ............... ...... ...... .............................. ............................................. ..:-+*##*+=-:. ............................... .................................................................................. ..:-=+***+=:.. ............................... ..........................::----:................................................. ..::-===-:... ............................... .........................:-==+==-:................................................. ......... ................................ .........................:-==++=-:.................................:................. ................................... ..........................:-----::................................................................................................ .............................:.................................................................................................... .................................................................................................................................. .................................................................................................................:::.............. ...............................................................................................................:::::::............ ...............................................................................................................:::::::............ .................................................................................................................:::.............. .............................................................................";at_exit{$s=207048293170487523485800825757960625670} $q=%w[$w&&!$s&&exit;W=130;H=80;HS=40;puts(q="$q=%w[#$q].join;at_exit{eval($q)}".chars.each_slice(W).map(&:join).join("¥n"));$s&&$w &&(puts('$w="'+$w+?"+";at_exit{$s=#$s}¥n#{q}")||exit);srand($s||=Random.new_seed);f=0.03+0.03*rand;k=0.057+0.006*rand;g=32.chr+".: -=+*#%@";mc=800+400*rand;spt=(1..(3+5*rand)).map{{x:(W*rand).floor,y:(H*rand).floor,r2:(10+10*rand)**2}};z=(0...H).map{|y|(0...W). map{|x|{a:1.0,b:spt.any?{|s|s[:r2]>=(x-s[:x])**2+(y-s[:y])**2}&&1.0||0.0}}};n=(1..H).map{(1..W).to_a};$l=->(v,x,y,s){(l=x-1)<0&&l= W-1;(r=x+1)>=W&&r=0;(t=y-1)<0&&t=H-1;(b=y+1)>=H&&b=0;0.2*(v[y][r][s]+v[y][l][s]+v[t][x][s]+v[b][x][s])+0.05*(v[t][r][s]+v[t][l][s] +v[b][r][s]+v[b][l][s])-v[y][x][s]};print('$w="');pc=4;mc.to_i.times{|c|(0...W).map{|x|(0...H).map{|y|la=$l.call(z,x,y,:a);lb=$l.c all(z,x,y,:b);a=z[y][x][:a];b=z[y][x][:b];n[y][x]={a:(a+1.0*la-a*b*b+f*(1-a)).clamp(0,1),b:(b+0.5*lb+a*b*b-(k+f)*b).clamp(0,1)}}}; z,n=[n,z];((c+=1)/mc*W).floor>pc&&(pc+=1)&&print(?.)};puts(?.*(W-pc));dmi,dma=z.map{|l|l.map{|v|v[:a]-v[:b]}.minmax}.flatten.minma x;z.each_slice(H/HS){|l|W.times{|x|sum=l.inject(0.0){|a,l|l[x,1].inject(a){|s,v|s+((v[:a]-v[:b]-dmi)/dma)}};print(g.chars[(sum*W*H S*g.size/(W*H)).clamp(0,g.size-1).floor])};puts};ft=?"+";at_exit{$s=#$s}";puts(?.*(W-ft.size)+ft+10.chr+q)].join;at_exit{eval($q)}
  • 30. lonelyelk.rb • Reaction-Diffusion System – A mathematical model of patterns like giraffes, cheetahs, fishes, etc. – Simulates reaction and diffusion of chemical substances • … and Quine – It shows itself twice, at the top and at the bottom – All the following commands work well matz award “Most reactive and diffusive” $ ruby entry.rb $ ruby entry.rb | ruby $ ruby entry.rb | head | ruby $ ruby entry.rb | tail | ruby
  • 31. lonelyelk.rb • Judges' comments – matz: I love this kind of thing. – eto: Very beautiful. – flagitious: Impressive evolving rendering quine. matz award “Most reactive and diffusive”
  • 32. Winner » eto shinh yhara matz leonid flagitious mame score “Most global” 『最もグローバルで賞』 Yusuke Endoh eto award 9 8 8 5 8 9 N/A 7.83
  • 33. mame.rb eto award “Most global” a=0132;eval$s=%q!eval(%q~d,h,Y ___---------___ ,X=*$*.map(&:to_i),45;b=(a+d)% R=360;s=[v=[include(Math)]] _--- ---_ ;T=PI*2;n=x=0;f=->{(n/=2)%2 >0?1:f[]*2+(n/=2)%2};g=- _- v@v ,,,,,, -_ >{z=f[];z/2*(3-z%2*6)};" 8'8f'y;I;asr1mY?Sr$6r _- ,vv@@@@@@@^''@v,-_ {+Gi{03G3=ZbpUo3l'}Yw C<Sl;J'x4aQbMAAD}c_@ / ^^^^^^@@@@@@vvv@@@@¥ hG],qDu/[eKyo/rD919e TPva4BX7FC%#AuzChg / ,v@@vvv,, ^@ ^@@@@@@@@@¥ uS)EmfeV+.m:*k@q)Z =VxSFP>qxJfHIWd'R /v ,@@@@@@@@@@@v ^^^'''^@@@@¥ MUS4&$r3D>GqL((/C ea&e'|PS@3aQ@-hL /@@ ,v@@@@@@@@@@@@@@v, '*v, '^@¥ ja+/Lru>]96]d_4W 9o][*A;J&..;a?@ /@@@ @@@@@@@@@@@@@@@@@@@v,,,@@@@@ @@¥ O'x.RmTPRK+Pol# U;o_wP`}6.g#?y |@@@@v, '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| 0`.lHNxLXjI^#S 5F-XcldGh_BZDc |@@@@@^ '^^@@@@@@@@@@@@@@@@@'@@@@ '@@@@| JTLKD)#e*CUo$. {c&a46;+AaGW*M |@@@@' '^@@@@@@@@@@@@@ @@@@@v '@@| R5".bytes{n=n* 90+-_1%91};190 |@@^ @@@@@@@@@@@@@ ^^^''' '@| .times{x+=e=(g []+g[].i)*T/R; |^' @@@@@@@@@@@@@vv, @| e==0?s<<v=[]:v <<v[0]=x.rect} | @@@@@@@@@@@@@^' @ | ;$><<(1..(d==0 ?h*w=h*4:25*w= | ,@@@@@@@@@@@^' | 80)).map{|i|q= i/w*6+3;r=i%w;" ¥ v@@@@@@@@@@@ / ¥s'*^,:v@¥nXa=# {"%04o"%b};eval$ ¥ @@@@@@@@@@@@ / s=%q¥x21#$s¥x21" [r>0?X&&r==(X+168 ¥ @@@@@@@@^' ,v* / )%R*w/R&&q/6==(90 -Y)*h/180?9:(0..2) ¥ ^^^^^^' ,^ / .all?{e=d==0?cos(q* T/w/3):(r*3i-120i-q+ ¥ / 73)/Complex.polar(72 ,2/4.9);q-=2;y,x=e.re -_, _- ct;e.abs<1&&n+=n-s.ma p{|s|z=sqrt(1-y*y);c=d== -_v,, _- 0?r*T/(1-w):b*T/R+acos(x );g=0;s.sum{(g-g=atan2(sin( --__v, __-- o=_1+c),z/tan(_2)+y*cos(o)) /T).round}}.min/9}?n%8:i+9:8]} ```---------``` *""~.gsub(/¥x20.*¥x20|¥n/){})!
  • 34. mame.rb • It prints itself with a globe rotated 45 degrees – Eight execution will return the original code • The rotation angle can be specified freely eto award “Most global” a=0132;eval$s=%q!eval(%q~d,h,Y ___---------___ ,X=*$*.map(&:to_i),45;b=(a+d)% R=360;s=[v=[include(Math)]] _--- ---_ ;T=PI*2;n=x=0;f=->{(n/=2)%2 >0?1:f[]*2+(n/=2)%2};g=- _- v@v ,,,,,, -_ >{z=f[];z/2*(3-z%2*6)};" 8'8f'y;I;asr1mY?Sr$6r _- ,vv@@@@@@@^''@v,-_ {+Gi{03G3=ZbpUo3l'}Yw C<Sl;J'x4aQbMAAD}c_@ / ^^^^^^@@@@@@vvv@@@@¥ hG],qDu/[eKyo/rD919e TPva4BX7FC%#AuzChg / ,v@@vvv,, ^@ ^@@@@@@@@@¥ uS)EmfeV+.m:*k@q)Z =VxSFP>qxJfHIWd'R /v ,@@@@@@@@@@@v ^^^'''^@@@@¥ MUS4&$r3D>GqL((/C ea&e'|PS@3aQ@-hL /@@ ,v@@@@@@@@@@@@@@v, '*v, '^@¥ ja+/Lru>]96]d_4W 9o][*A;J&..;a?@ /@@@ @@@@@@@@@@@@@@@@@@@v,,,@@@@@ @@¥ O'x.RmTPRK+Pol# U;o_wP`}6.g#?y |@@@@v, '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| 0`.lHNxLXjI^#S 5F-XcldGh_BZDc |@@@@@^ '^^@@@@@@@@@@@@@@@@@'@@@@ '@@@@| JTLKD)#e*CUo$. {c&a46;+AaGW*M |@@@@' '^@@@@@@@@@@@@@ @@@@@v '@@| R5".bytes{n=n* 90+-_1%91};190 |@@^ @@@@@@@@@@@@@ ^^^''' '@| .times{x+=e=(g []+g[].i)*T/R; |^' @@@@@@@@@@@@@vv, @| e==0?s<<v=[]:v <<v[0]=x.rect} | @@@@@@@@@@@@@^' @ | ;$><<(1..(d==0 ?h*w=h*4:25*w= | ,@@@@@@@@@@@^' | 80)).map{|i|q= i/w*6+3;r=i%w;" ¥ v@@@@@@@@@@@ / ¥s'*^,:v@¥nXa=# {"%04o"%b};eval$ ¥ @@@@@@@@@@@@ / s=%q¥x21#$s¥x21" [r>0?X&&r==(X+168 ¥ @@@@@@@@^' ,v* / )%R*w/R&&q/6==(90 -Y)*h/180?9:(0..2) ¥ ^^^^^^' ,^ / .all?{e=d==0?cos(q* T/w/3):(r*3i-120i-q+ ¥ / 73)/Complex.polar(72 ,2/4.9);q-=2;y,x=e.re -_, _- ct;e.abs<1&&n+=n-s.ma p{|s|z=sqrt(1-y*y);c=d== -_v,, _- 0?r*T/(1-w):b*T/R+acos(x );g=0;s.sum{(g-g=atan2(sin( --__v, __-- o=_1+c),z/tan(_2)+y*cos(o)) /T).round}}.min/9}?n%8:i+9:8]} ```---------``` *""~.gsub(/¥x20.*¥x20|¥n/){})! a=0207;eval$s=%q!eval(%q~d,h,Y ___---------___ ,X=*$*.map(&:to_i),45;b=(a+d)% R=360;s=[v=[include(Math)]] _---@^^@@, ^@@@@---_ ;T=PI*2;n=x=0;f=->{(n/=2)%2 >0?1:f[]*2+(n/=2)%2};g=- _-@@@''''' *^ ''^^^v-_ >{z=f[];z/2*(3-z%2*6)};" 8'8f'y;I;asr1mY?Sr$6r _-^''@^ -_ {+Gi{03G3=ZbpUo3l'}Yw C<Sl;J'x4aQbMAAD}c_@ /@^, ¥ hG],qDu/[eKyo/rD919e TPva4BX7FC%#AuzChg / '@ ¥ uS)EmfeV+.m:*k@q)Z =VxSFP>qxJfHIWd'R / ^@ ^@v¥ MUS4&$r3D>GqL((/C ea&e'|PS@3aQ@-hL / ,,v@@@@¥ ja+/Lru>]96]d_4W 9o][*A;J&..;a?@ / v@@@vv, ,:'''''@¥ O'x.RmTPRK+Pol# U;o_wP`}6.g#?y | @@@@@@@@v ,v@@@@@@vv^ | 0`.lHNxLXjI^#S 5F-XcldGh_BZDc | @@@@@@@@@@, v@@@@@@@@@@@, | JTLKD)#e*CUo$. {c&a46;+AaGW*M | @@@@@@@@@@@ v@@@@@@@@@@@@@@@| R5".bytes{n=n* 90+-_1%91};190 | ^@@@@@@@@@@@v, @@@@@@@@@@@@@@@| .times{x+=e=(g []+g[].i)*T/R; | @@@@@@@@@@@@@@ '@@@@@@@@@@@@@@| e==0?s<<v=[]:v <<v[0]=x.rect} | @@@@@@@@@@@@@' ''^@@@@@@@@@@| ;$><<(1..(d==0 ?h*w=h*4:25*w= | ,@@@@@@@@@@@@^ @@@@@@@v| 80)).map{|i|q= i/w*6+3;r=i%w;" ¥ v@@@@@@@@^^'' @@@@@@^/ ¥s'*^,:v@¥nXa=# {"%04o"%b};eval$ ¥@@@@@^' @@@@@@'/ s=%q¥x21#$s¥x21" [r>0?X&&r==(X+168 ¥^' v@@@@@ / )%R*w/R&&q/6==(90 -Y)*h/180?9:(0..2) ¥ v@@@@@/ .all?{e=d==0?cos(q* T/w/3):(r*3i-120i-q+ ¥ @@@@@/ 73)/Complex.polar(72 ,2/4.9);q-=2;y,x=e.re -_ @@@_- ct;e.abs<1&&n+=n-s.ma p{|s|z=sqrt(1-y*y);c=d== -_ _- 0?r*T/(1-w):b*T/R+acos(x );g=0;s.sum{(g-g=atan2(sin( --__ __-- o=_1+c),z/tan(_2)+y*cos(o)) /T).round}}.min/9}?n%8:i+9:8]} ```---------``` *""~.gsub(/¥x20.*¥x20|¥n/){})! 45-degree rotation
  • 35. mame.rb • Q. "Didn't you create the same thing?" • A. Yeah, @mame have created "Qlobe" eto award “Most global” v=0000;eval$s=%q~d=%!^Lcf<LK8, _@7gj*LJ=c5nM)Tp1g0%Xv.,S[<>YoP 4ZojjV)O>qIH1/n[|2yE[>:ieC "%.#% :::##" 97N-A&Kj_K_><wS5rtWk@*a+Y5 yH?b[F^e7C/56j|pmRe+:)B "##% ::##########" O98(Zh)'Iof*nm.,$C5Nyt= PPu01Avw^<IiQ=5$'D-y? "##: ###############" g6`YT+qLw9k^ch|K'),tc 6ygIL8xI#LNz3v}T=4W "# #. .####:#######" lL27FZ0ij)7TQCI)P7u }RT5-iJbbG5P-DHB<. " ##### # :############" R,YvZ_rnv6ky-G+4U' $*are@b4U351Q-ug5 " #######################" 00x8RR%`Om7VDp4M5 PFixrPvl&<p[]1IJ " ############:#### %#####" EGgDt8Lm#;bc4zS^ y]0`_PstfUxOC(q " .#############:##% .## ." /,}.YOIFj(k&q_V zcaAi?]^lCVYp!; " %% .################. #. " ;s="v=%04o;ev"% (;v=(v-($*+[45, ":####: :##############% : " ])[n=0].to_i;)% 360)+"al$s=%q#{ "%######. ######### " ;;"%c"%126+$s<< 126}";d.gsub!(/ "##########. #######% " |¥s|".*"/,"");; require"zlib"|| "########### :######. " ;d=d.unpack"C*" d.map{|c|n=(n|| ":#########: .######: . " )*90+(c-2)%91}; e=["%x"%n].pack " :#######% :###### #: " &&"H*";e=Zlib:: Inflate.inflate( " ######% .####% :: " &&e).unpack("b*" )[0];22.times{|y| " ####% %### " ;w=(Math.sqrt(1-( (y*2.0-21)/22)**(; " .###: .#% " ;2))*23).floor;(w* 2-1).times{|x|u=(e+ " %## " )[y*z=360,z]*2;u=u[ 90*x/w+v+90,90/w];s[( " #. " ;y*80)+120-w+x]=(""<< 32<<".:%#")[4*u.count(( " . " ;"0"))/u.size]}};;puts¥ s+";_ The Qlobe#{" "*18+ ( "# :#######" ;"Copyright(C).Yusuke End¥ oh, 2010")}";exit~;_ The Qlobe Copyright(C).Yusuke Endoh, 2010 "Qlobe" in 2010 by @mame
  • 36. mame.rb • Q. What is the difference from Endoh's work? • A. Many new features and improvements! – The tilted rotational axis (23.4 degrees!) – Very compressed polygon map data (only 286 letters!) – Robust spherical trigonometry – Map dump with a mark of specified lat/long eto award “Most global”
  • 37. mame.rb eto award “Most global” $ ruby entry.rb dump ,,,,,,,,,,, ,,vvv@@@@@@@@@@@@@@@@@ ''^^@@@@@@@@@@@@@@@@@@@@ ,,,vvvv@@@vvvv,,, ,,,,,, ,,,,,,,,,,''^vvv,, '^@@@@@@@@@@@@@@^^* ,,,,, @ ,vv@@@@@@@@@@@@@@@@@@@@@@vv,,vvvvvvvvvv@vvvvvvvvvv,, vv@@@@@@@@@@@@@@@@@@@@@vvvv@@@@@@@@@@@@' ,v@@@@@* '^@@@@@^^'' ,v@@@@@@@@@@@*,,,,,vvvvvvvvv@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@v,, @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@' '''^^^ '^^' ,v@@@^ ^^^^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^'' ''' '''^^@@@@@@@@@@@@@@@@@@@@, ,@@@vv,, , *@@@@' ,v@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^^^''' v^^''' '^@@@@@@@@@@@@@@@@@@@@vv, @@@@@@@@@@v, @@, v@@@@@@vv@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ' '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^^''v ^^'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@v ^@@@@@@@@@@@@@@@@@@@@@@@@@@:,,, *^^ ,@@@@@@@@^@@@@@@@^^''''''^^^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^' '@@@@@@@@@@@@@@@@@@@@@@@@^'' v@@@@^^'^@ '@@@^ ,v @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@' @@@@@@@@@@@@@@@@@@@@@' ^^^^' ' ^' ''^^@@@@@@@,:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ v @@@@@@@@@@@@@@@@@@@' ,vvv@@@@@@, @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ' *^^ @@@@@@@@@@@@^'^@@^ ,@@@@@@@@@@@@@vvvvvvvvv@@@@@@'^^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ^'^@@@@@^' '^ ,@@@@@@@@@@@@@@@@@@@@@@^@@@@@@@,,, ''^^@@@@@@@@@@@@@@@@@@@@@@@@@@@ '@@@@@ , v@@@@@@@@@@@@@@@@@@@@@@@@'@@@@@@@@@@* '^@@@@@@@@@^^@@@@@@@^^'' '^^@@@@ v@@@@@@@@@@@@@@@@@@@@@@@@@@ ^@@@@@^' '@@@@^'' ^@@@@: '^^@@v v@@@@@@@@@@@@@@@@@@@@@@@@@@@@ '^' ^@@ '@@@@v '^ ,,,,, ^@@@@@@@@@@@@@@@@@@@@@@@@@@@@,,,, @' ''@@@^ , v@@@@@@@@@v, ^@@@@@@@@@@@@@@@@@@@@@@@@@@@@^ ' ' @ @@@@@@@@@@@@v, @@@@@@@@@@@@@@@@@' ,,vv',,, v@@@@@@@@@@@@@@v,, @@@@@@@@@@@@@@^ @@@@ @@ ,, @@@@@@@@@@@@@@@@@@@@@v @@@@@@@@@@@@@ * ''' ^@@vv, '@@@@@@@@@@@@@@@@@@@@' @@@@@@@@@@@@@ '''^* ^@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@ , ,v@@v, @, ^@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@ v@^ ,v@@@@@@@@@@@ ,@@@@@@@@@@@@@' ^@@@@@@@@@@@^ @^ ,v@@@@@@@@@@@@@@@ @@@@@@@@@@@@^ '@@@@@@@@@^ ' @@@@@@@@@@@@@@@@@@, @@@@@@@@@@', '@@@@@@^' ^@@@@@@@@@@@@@@@@@@ v@@@@@@@^' ^^' ^^^^''' '^@@@@@@@ @@@@@@@ '^@@@ ^v ,@@@@@@ ' @@@@@^ ^@@@' '' ' ,,vv,,, ,,,vvvvvv,,,,,,,,vvvvv,, ,,,,,,vvv@@@@@@@@@@@@@ ,vv@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@vvvv,,,,,,,, ,,,,,,, ,,,,*' ,v@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@,vv@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^' vvvv@@@@@@@@@@@@@@@@@@@@@@@@v@@@@@@@@@@@@@^' ,,vv@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^^' ^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@vvvv,,,,,,,,,,,,,,,vvvvv@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@vv,,, vvv,,,,::@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@vvvvvvv
  • 38. mame.rb eto award “Most global” $ ruby entry.rb dump 40 36 140 ,,,,,vvvvvvvvv, vv@@@@@@@@@@@@@@@@@@, ,,,,,, **,,,, ''^@@@@@@@@@@@@@@@@ , ,,vvv@@@@@@@@@@@@vvv,, ,,,,,,,,,,,,,,,, ,,vvvvvvvvvvvvvvvvvv,,,,vvvvv@@@@@@' '@@@vv, '@@@@@@@@^''' ,v@@@@@vvvv, ,,,,,,,,@,v@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@, @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@' '^^@@' '^^^' v@@@^v@@@@@@v@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^^ '''' '''^@@@@@@@@@@@@@@@@@@@ @@vv,, , @@@@' ,v@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^^^'''' v^^''' '^@@@@@@@@@@@@@@@@@@v, @@@@@@@@@v, @v,,@@@@@@v@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ *' '@@@@@@@@@@@@@@@@@@@@@@@@@@^^'',@ ^':@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@* ^@@@@@@@@@@@@@@@@@@@@@@@v** ''' v@@@@@@@'@@@@@^'''''''''^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@' '@@@@@@@@@@@@@@@@@@@^'' ,@@@^'' '@ '@@' ,,,,,,v@, @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@' '@@@@@@@@@@@@@@@@@@ '':,,,vvv, '@@@@@@v@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'^@ vX '@@@@@@@@@@@@^@@@ v@@@@@@@@@@,,,,,,,,,@@@@@^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@' '@^@@@@@@^' '^' v@@@@@@@@@@@@@@@@@@:@@@@@@v ''^^@@@@@@@@@@@@@@@@@@@@@@@@@ ^@@@v @@@@@@@@@@@@@@@@@@@@@v^@@@@@@@@v ''^@@@@@@@@^@@@@@@@^^'' '^^@v@' @@@@@@@@@@@@@@@@@@@@@@@v'@@@@^' @@@@^'' '@@@@: ''^@@ @@@@@@@@@@@@@@@@@@@@@@@@@, ^' @@ @@@@v '* ,,,,,vvv ^@@@@@@@@@@@@@@@@@@@@@@@@vvv* ' :^@^' , @@@@@@@@@@v ^^^^^^^^^@@@@@@@@@@@@@@@@' , ' @@@@@@@@@@@@v ^@@@@@@@@@@@@@^ v@@ vv @@@@@@@@@@@@@@@@vv,, ^@@@@@@@@@@@' , ^^' '' '*vv,, ^@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@, ''^^*, '^@@@@@@@@@@@@@@@^ @@@@@@@@@@@@ ,vv, ,v '^@@@@@@@@@@@@@ @@@@@@@@@@@@' @' ,v@@@@@@v@@v @@@@@@@@@@@@' '@@@@@@@@@@' ' ,v@@@@@@@@@@@@@v @@@@@@@@@@' '@@@@@@@@ ^@@@@@@@@@@@@@@@v @@@@@@@@^'^ '@@@^'' @@@@@@^@@@@@@@@@ @@@@@@' ' ''' '^@@@@@ , v@@@@@' '^ '' @@@@@' @@@^ '' , ,,vvv@@vvv,, ,,,,vvv@@@@@@vvvvvv@@@@@vvv,,, , ,vvvvvvvvvvvvvvvv@@@@@@@@@@@@@@@@@ ,,vv@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@vvvv* ,,,,vvvv@@@@vvvvvvvvvv,,,,,,vvvvvvvvv@^' ,vv@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^' ^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@v,,,, ,,,,,,vvv@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@,, ,,,,,,:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@vvvvvvvv, 36°N 140°E Here! This feature is an homage to IOCCC 1992 "Best Small Program"
  • 39. mame.rb • Judges' comments – eto: Earth! High artistic point. It contains polygon data of the world map. Very interesting. – shinh: The compression ratio looks amazing. I think there is enough difference from "Qlobe". – mame (camouflage comment): It is almost the same as my "Qlobe", but there seems to be enough novelty in the technical aspect. eto award “Most global”
  • 40. Winner » eto shinh yhara matz leonid flagitious mame score “Most accessible” 『最もアクセシビリティがある賞』 Yutaka HARA leonid award 8 6 N/A 9 10 8 8 8.00
  • 41. yhara.rb leonid award “Most accesible” %;;;;Symbol.define_method(:method_missing){|n|t="#{self}#{n[..-2]}"; n[-1]=="⠠" && eval(t.unpack("U*").map{((_1&64)/8+(_1&56)*2+(_1&135)).chr}*""+t)||:"#{self}#{n}"} :⠥⠥⠥⠐⡝⠐⠒⡬⠽⠚⡘⠚⠘⠒⡂⡦⠐⡝⠐⡘⠙⡂⠴⠵⠶⠐⠶⠼⡐⠻⡑⠐⠓⡕⡞⠐⠫⠼⠺⡱⡶⠷⡂⠼⡝⡫⡭⡂⡴⡝⠻⡖⠳⡰⠱⠺⠻⡂⠶⡔⠺⡝⡴⡫⠘⡔⡦⡕⠙⡭⡔⡴⡫⡦⡕⠙⡖⡖⡭⡂. ⠼⡜⡜⠒⡚⠓⡻⠶⡖⡲⡷⡱⡶⡽⡖⠒⡂⡒⠱⡔⡺⡝⠺⡖⠵⠱⠳⡰⡯⠻⡴⡱⠳⠵⡐⡦⡑⡖⡵⠱⠸⡐⠖⡚⡲⡷⡱⡶⡑⡂⠱⡖⠵⠱⠳⡰⡻⡼⡴⡼⠐⠼⡜⡜⠒⠓⡻⡴⡽⡖⠒⡽⡂⠼⡜⡜⠒⠓⡻⡺⡽. ⠓⡻⠥⠥⠥⡽⠒⡂⠼⡖⡲⡷⡱⡶⡐⠒⡬⡶⠒⡑⡂⠵⡶⠴⡂⡠⠐⡝⠐⠕⠹⡻⠕⡛⡛⡛⡛⠫⡹⡵⠲⡷⡴⡖⠴⠵⠶⡱⡶⠵⡯⡵⠵⠼⡰⡷⠴⡐⡚⡵⠵⠼⡰⡷⠴⡯⡵⡱⠻⠻⡱⡶⠷⡑⡻⡼⡶⡼⠼⡝⠒. ⠓⡻⠻⠵⡴⠶⡽⠓⡻⡶⡫⡖⡖⡕⠚⡭⡽⠒⡛⠐⡶⡫⡕⠙⡭⡝⡝⠒⡬⠽⠚⡘⠚⠘⠒⠐⠖⠖⡂⠵⠾⠱⡴⡐⠼⡖⠽⡶⠸⠱⠳⡳⡐⠒⠭⡒⠒⡑⡖⡵⠱⠸⡻⡐⡐⡯⠙⠖⠞⠜⡑⡗⡘⡓⡐⡯⠙⠖⠝⠞⡑. ⡒⠚⡓⡐⡯⠙⠖⠙⠛⠝⡑⡑⡖⠳⡰⠺⡽⡒⠒⠒⡓⠼⡑⡼⡼⡚⠒⠓⡻⠻⠵⡴⠶⡽⠓⡻⡶⡽⠒⡽⡂⡽⡖⠷⠻⠽⠲⠐⠒⡬⡬⠽⠚⡘⠚⠘⠒⡔⠒⡬⠽⠚⡘⠚⠘⠒⡂⡠⡠⠐⡝⠐⡠⡖⠷⠻⠽⠲⠐⡗⡖. ⡗⡔⠒⠐⠒⡂⠴⠵⠶⠐⠴⠵⠳⡐⠳⡑⡂⠺⠵⠼⠽⠺⡶⠐⠳⠐⡱⠶⠐⠳⡝⡝⠒⡚⠒⡼⡼⠳⡝⡝⠒⡖⠒⡂⠽⠐⡝⠐⠳⡖⠽⡶⠸⠱⠳⡳⡐⠒⠭⡒⠒⡑⡫⠘⡭⡂⡐⠽⠖⠞⠜⡑⡗⡘⡓⡐⠽⠖⠝⠞⡑. ⡒⠚⡓⡐⠽⠖⠙⠛⠝⡑⡂⠵⡶⠴⡂⠴⠵⠶⠐⠺⠴⡐⠸⡸⡔⠐⠿⡔⠐⡰⡑⡂⡐⠘⡖⡖⡖⡰⡗⠜⡑⡖⠵⠱⠳⡰⡻⡼⠾⡼⡂⡐⠘⡖⡖⡖⠿⡗⠚⡑⡖⠵⠱⠳⡰⡻⡼⠽⡼⡂⡸⡝⠽⡒⠚⡛⡹⡝⠾⡒⠜. ⡂⡳⡝⠸⡸⡫⡹⡭⡫⡸⡭⡂⡱⠶⠐⠫⠼⠺⡱⡶⠷⡝⡝⡝⡳⠐⡂⠸⠺⡱⡶⠼⠐⡳⡂⠵⡴⠻⡱⠶⠐⡳⡂⡶⡝⠸⡸⡫⡹⡭⡫⡸⡭⡼⠸⡸⡫⡹⡭⡫⡸⡓⠙⡭⡜⡜⠛⡼⡂⠸⡸⡫⡹⡓⠙⡭⡫⡸⡭⡜⡜. ⠙⡼⠸⡸⡫⡹⡓⠙⡭⡫⡸⡓⠙⡭⡜⡜⠜⡼⡂⠸⡸⡫⡹⡓⠚⡭⡫⡸⡭⡜⡜⠚⡼⠸⡸⡫⡹⡓⠚⡭⡫⡸⡓⠙⡭⡜⡜⠝⡼⡂⠸⡸⡫⡹⡓⠛⡭⡫⡸⡭⡜⡜⠞⡼⠸⡸⡫⡹⡓⠛⡭⡫⡸⡓⠙⡭⡜⡜⠟⡂⠸. ⠺⡱⡶⠼⠐⡫⠘⡸⠚⡘⠘⠘⡓⡶⡭⡖⠸⠱⠳⡳⡐⠒⠭⠒⡑⡂⠵⡶⠴⡂⡽⡂⠸⠽⠼⠻⡂⡽⡂⠵⡶⠴⡂⠴⠵⠶⠐⠺⠽⡶⡐⡸⡑⡂⠸⠺⡱⡶⠼⠐⠒⠕⠕⡬⡶⡬⠵⡫⠚⡢⠒⡂⠳⠳⡝⠶⠼⡐⡸⡖⠼. ⡷⡯⠻⡑⡖⡴⡱⡶⠵⠻⡖⡵⠱⠸⡻⡯⠙⡖⠳⡰⡷⡵⠸⡖⠳⡰⠱⠺⠻⡽⡂⡵⠻⡝⠳⠳⡖⠶⡴⠱⠼⡯⡵⠱⠸⡻⡼⠺⡷⠿⡼⡂⡐⠘⡖⡖⠛⡑⡖⡵⠱⠸⡻⡼⡹⡹⡼⡂⠺⡷⠿⡖⠶⡴⠱⠼⡯⡵⠱⠸⡻. ⡼⠳⡼⡂⡶⡝⠴⠵⠳⡐⠳⡑⡂⡱⠶⠐⡡⡶⠼⠵⠷⠵⠺⡝⡝⡝⡶⡂⡫⡶⡫⡹⡹⡓⠘⡭⡔⡶⡫⡹⡹⡓⠜⡭⡭⡂⠵⡴⠻⡱⠶⠐⡹⡹⡝⡝⠘⡂⡫⡶⡔⠘⡭⡂⠵⡴⠻⠵⡂⡫⠘⡔⠘⡭⡂⠵⡶⠴⡂⡽⡂. ⡽⡂⡽⡂⠳⠺⡝⡵⠻⡖⡵⠱⠸⡻⡯⠙⡖⡵⠱⠸⡻⠘⡽⡽⡂⡰⡝⠳⠺⡖⠻⡱⡺⠵⡂⠿⡝⠳⠺⡫⠘⡭⡖⠻⡱⡺⠵⡂⠾⡝⡐⠘⡖⡖⡖⠿⡑⡖⠶⡴⠱⠼⡯⡵⠱⠸⡻⡼⡸⡼⡐⠘⡖⡖⡖⡰⡑⡖⡵⠱⠸. ⡻⡼⡹⡼⡫⡸⡔⠐⡹⡭⡽⡽⡖⠻⡰⠽⠶⠶⡴⠵⡂⡶⡝⠙⡂⠴⡶⡝⠙⡖⠘⠚⠘⡂⡴⡷⡷⠸⠐⠴⡷⡂⠸⠺⡱⡶⠼⠐⠒⡬⠵⡫⠙⡛⠙⡠⠒⡂⡶⡖⠶⡴⡷⡷⠺⡖⠼⡱⡵⠵⠻⠐⠴⡷⡂⡸⡔⡹⡝⠾⡖. ⠻⡰⡱⠶⠼⡂⠳⡝⡵⠻⡫⡹⡭⡫⡸⡭⡂⠳⠺⡫⡹⡭⡫⡸⡭⡝⠳⠐⡱⠶⠐⠳⡂⠾⡖⠵⡵⠸⠼⡹⡟⠖⠖⠲⠺⠵⠱⡳⡂⠵⡶⠴⡂⡶⡒⡝⠴⡶⡂⠸⠽⠼⠻⠐⡠⡠⡂⠺⠴⠐⠳⠺⡔⠿⡔⡰⡂⠻⡴⠵⠵. ⠸⠐⠘⡖⠘⠙⡂⠲⠺⠵⠱⡳⠐⡱⠶⠐⠾⡖⠵⡵⠸⠼⡹⡟⡂⠵⡶⠴⡂⠸⠺⡱⡶⠼⠐⠒⡬⠵⡫⠙⡛⠙⡠⠒⡂⠸⠽⠼⠻⠐⡠⡂⠸⠽⠼⠻⠐⠳⠳⡖⡵⠱⠸⡐⠖⡚⡲⡷⡱⡶⡑⡂⠵⡶⠴⡂⠺⠽⡶⠐⡚⠠
  • 42. yhara.rb • The braille part is a symbol and method chain • This braille part represents the main code – Eight-dot braille represents a byte (8-bit) sequence leonid award “Most accesible” :⠥⠥⠥ … ⡖⡭⡂. ⠼⡜⡜⠒ … ⡻⡺⡽. ⠓⡻⠥⠥ … ⠼⡝⠒. ︙ ︙ ⠸⠐⠘⡖ … ⡶⠐⡚⠠ Symbol's colon Symbol's body method call's period method name
  • 43. yhara.rb • Judges' comments – eto: Cool animation that the dots appear slowly. It's unprecedented as the beauty of the source code. – shinh: Very impressive. – mame: Abuse of Braille! leonid award “Most accesible”
  • 44. Winner » eto shinh yhara matz leonid flagitious mame score “Most orderly code” 『最も整然としたコードで賞』 Tomoya Ishida (tompng) shinh award 7 10 10 7 8 9.5 9 8.64
  • 45. tompng.rb shinh award “Most orderly code” rule = $*[00]&.to_i || 30 h ||= $*[01]&.to_i || 32 [ % if % TRICK-2022 %% %] # ] if a /%{(?<a>)/ =~ %} if + %} - %[ # } if b /%<(?<b>)/ =~ %> if - %> + %{ # > if c /%+(?<c>)/ =~ %+ if + %+ - %< # + if d /%-(?<d>)/ =~ %- if - %- + %+ # - if e f, g, h, / =~ %/ if def e(f, g, h, *) = # + if d /%-(?<d>)/ =~ %- if g.map! do rule.[] _1.join.to_i 2 end.! # > if c /%+(?<c>)/ =~ %+ if !(g = *[g[-1], *g, g[0]].each_cons(3)) # } if b /%<(?<b>)/ =~ %> if puts(g.join.tr '01', ' #') || h > 0 && # ] if a /%{(?<a>)/ =~ %} if !g ||= [*g = [0] * h, 1] + g if h -= 1 eval(File.read f ||= __FILE__)
  • 46. tompng.rb • One-dimensional cellular automaton shinh award “Most orderly code” $ ruby tompng3/entry.rb # ### ## # ## #### ## # # ## #### ### ## # # # ## #### ###### ## # ### # ## #### ## # ### ## # # #### ## # ## #### ## # # #### ## # ### ## ## # # ## #### ## ### ### ## ### ## # # ### # ### # # ## #### ## # # ##### ####### ## # ### #### # ### # ## #### ## ### ## ## # ### ## # # ### # ## ### #### ## # ## #### ## # ###### # # ### #### ## # ### #### #### ### ## # # ## #### ## ### # ## # # # ### ### ## # # ### # ### ## # ### ## # # # # ## #### ## # ### # # #### # # ## ###### ## # ### #### ## ##### # ##### # # # ## #### ## ### # ## # # ## # ##### ### ## # # ### # ## # #### ## # ## ## # ## # ## #### ## # ### # # # ### #### # ## # ## # #### ## # ### #### #### ## ## ### # # #### # # # ## #### ## ### # ## # # ### # ## #### ### ## ### ## # # ### # ## # # ##### # ###### # # ## # # # ## #### ## # ### # # #### #### #### ## # # ######### $ ruby tompng3/entry.rb 90 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
  • 47. tompng.rb • It is very difficult to read this piece • The main TRICK: – If a local variable x is defined, it is a division – If a local variable x is not defined, it is a method call shinh award “Most orderly code” x /y #/ x(/ y #/) x / y #/
  • 48. tompng.rb • A simplified version shinh award “Most orderly code” a /%!(?<a>)/ =~ %! if + %! - %[ #! if (code2; exit) #] if (code1; false) eval(File.read($0)) a /%!(?<a>)/ =~ %! if + %! - %[ #! if (code2; exit) #] if (code1; false) eval(File.read($0)) a /%!(?<a>)/ =~ %! if + %! - %[ #! if (code2; exit) #] if (code1; false) eval(File.read($0)) a /%!(?<a>)/ =~ %! if + %! - %[ #! if (code2; exit) #] if (code1; false) eval(File.read($0)) method call regexp (and defines a) string literal string literal
  • 49. tompng.rb • A simplified version – This executes "code1" and reloads itself – Note that a local variable "a" is now defined! shinh award “Most orderly code” a /%!(?<a>)/ =~ %! if + %! - %[ #! if (code2; exit) #] if (code1; false) eval(File.read($0))
  • 50. tompng.rb • With a local variable "a" defined shinh award “Most orderly code” a /%!(?<a>)/ =~ %! if + %! - %[ #! if (code2; exit) #] if (code1; false) eval(File.read($0)) a /%!(?<a>)/ =~ %! if + %! - %[ #! if (code2; exit) #] if (code1; false) eval(File.read($0)) a /%!(?<a>)/ =~ %! if + %! - %[ #! if (code2; exit) #] if (code1; false) eval(File.read($0)) a /%!(?<a>)/ =~ %! if + %! - %[ #! if (code2; exit) #] if (code1; false) eval(File.read($0)) string literal string literal comment division
  • 51. tompng.rb • When a local variable "a" defined – Execute "code2" • This code executes "code1" and then "code2" as a whole shinh award “Most orderly code” a /%!(?<a>)/ =~ %! if + %! - %[ #! if (code2; exit) #] if (code1; false) eval(File.read($0))
  • 52. tompng.rb shinh award “Most orderly code” rule = $*[00]&.to_i || 30 h ||= $*[01]&.to_i || 32 [ % if % TRICK-2022 %% %] # ] if a /%{(?<a>)/ =~ %} if + %} - %[ # } if b /%<(?<b>)/ =~ %> if - %> + %{ # > if c /%+(?<c>)/ =~ %+ if + %+ - %< # + if d /%-(?<d>)/ =~ %- if - %- + %+ # - if e f, g, h, / =~ %/ if def e(f, g, h, *) = # + if d /%-(?<d>)/ =~ %- if g.map! do rule.[] _1.join.to_i 2 end.! # > if c /%+(?<c>)/ =~ %+ if !(g = *[g[-1], *g, g[0]].each_cons(3)) # } if b /%<(?<b>)/ =~ %> if puts(g.join.tr '01', ' #') || h > 0 && # ] if a /%{(?<a>)/ =~ %} if !g ||= [*g = [0] * h, 1] + g if h -= 1 eval(File.read f ||= __FILE__) rule = $*[00]&.to_i || 30 h ||= $*[01]&.to_i || 32 [ % if % TRICK-2022 %% %] # ] if a /%{(?<a>)/ =~ %} if + %} - %[ # } if b /%<(?<b>)/ =~ %> if - %> + %{ # > if c /%+(?<c>)/ =~ %+ if + %+ - %< # + if d /%-(?<d>)/ =~ %- if - %- + %+ # - if e f, g, h, / =~ %/ if def e(f, g, h, *) = # + if d /%-(?<d>)/ =~ %- if g.map! do rule.[] _1.join.to_i 2 end.! # > if c /%+(?<c>)/ =~ %+ if !(g = *[g[-1], *g, g[0]].each_cons(3)) # } if b /%<(?<b>)/ =~ %> if puts(g.join.tr '01', ' #') || h > 0 && # ] if a /%{(?<a>)/ =~ %} if !g ||= [*g = [0] * h, 1] + g if h -= 1 eval(File.read f ||= __FILE__) main part executed in reverse order
  • 53. tompng.rb • Judges' comments – shinh: Ruby is Lisp-2 but not Lisp. This piece makes good use of this fact. I like it. – yhara: Definitely the hardest to read. – flagitious: Cool cellular automaton based on parsing trick, no eval abuse, short. – mame: Amazing obfuscation unique to Ruby! shinh award “Most orderly code”
  • 55. Winner » eto shinh yhara matz leonid flagitious mame score “Most anti-gravity” 『最も反重力で賞』 Yusuke Endoh 8 10 9 8 9 9 N/A 8.83
  • 56. “Most anti-gravity” mame2.rb 2022;"# .chars} {puts'TRICK+2022' ¥ { ; #';$><< b ?! };#{s=' ' # 0 ! s[0]? ( b=$<.read ;' } ub( ,''} ';a= ''<<32 b.lines {puts( ?.. *( b.size) .gsub(/./) { b.sub!( /^#$`¥K(¥S) /x,a)?$1:a } .rstrip)}): ( [ 12,1,12,11]. cycle { | i | t = ( s * 10<< 10)* 10+ %(¥e[A)* 10 10. times{t[i* _1 ] = 'TRICK+2022'[ _1 ] };$><<t sleep 1}) }" Ticker of "TRICK+2022"
  • 57. “Most anti-gravity” mame2.rb 2022;"# .chars} {puts'TRICK+2022' ¥ { ; #';$><< b ?! };#{s=' ' # 0 ! s[0]? ( b=$<.read ;' } ub( ,''} ';a= ''<<32 b.lines {puts( ?.. *( b.size) .gsub(/./) { b.sub!( /^#$`¥K(¥S) /x,a)?$1:a } .rstrip)}): ( [ 12,1,12,11]. cycle { | i | t = ( s * 10<< 10)* 10+ %(¥e[A)* 10 10. times{t[i* _1 ] = 'TRICK+2022'[ _1 ] };$><<t sleep 1}) }" 2022;"# .chars}{puts'TRICK+2022' ¥{; #';$><<b ?! };#{s=''#0 !s[0]?(b=$<.read;' }ub(,''} ';a=''<<32 b.lines{puts(?..*( b.size).gsub(/./){ b.sub!(/^#$`¥K(¥S) /x,a)?$1:a} .rstrip)}): ([12,1,12,11]. cycle{|i|t=(s* 10<< 10)* 10+%(¥e[A)* 10 10.times{t[i* _1]='TRICK+2022'[ _1]};$><<t sleep1}) }" left gravity "Upward gravity" program
  • 58. “Most anti-gravity” mame2.rb 2022;"# .chars} {puts'TRICK+2022' ¥ { ; #';$><< b ?! };#{s=' ' # 0 ! s[0]? ( b=$<.read ;' } ub( ,''} ';a= ''<<32 b.lines {puts( ?.. *( b.size) .gsub(/./) { b.sub!( /^#$`¥K(¥S) /x,a)?$1:a } .rstrip)}): ( [ 12,1,12,11]. cycle { | i | t = ( s * 10<< 10)* 10+ %(¥e[A)* 10 10. times{t[i* _1 ] = 'TRICK+2022'[ _1 ] };$><<t sleep 1}) }" 2022;"# {puts'TRICK+2022'} .chars} ¥ #{b=$<.read;0;'( #';$><< b .gsub(''<<32,'') };#?!=' ' 12,{puts()?..¥*: !;s{s]? ( i |ub(/./`¥{(}S* }.a[0es [ = s/x/^#$$1Ka[}[ '.l=ne) | 1,,a)?ri:)2) b.siz!( ] 't.rst1]p* i bysib1( ] lT12,1[s.* ' b0cue1{ }%=¥(eA)t c0<l_ eR(ie+s{2 10)<_ ;tCm<20 10+* eI>K}t 10. }$ < ) 1 p 1 1 " upward gravity "Left gravity" program
  • 59. “Most anti-gravity” mame2.rb 2022;"# .chars} {puts'TRICK+2022' ¥ { ; #';$><< b ?! };#{s=' ' # 0 ! s[0]? ( b=$<.read ;' } ub( ,''} ';a= ''<<32 b.lines {puts( ?.. *( b.size) .gsub(/./) { b.sub!( /^#$`¥K(¥S) /x,a)?$1:a } .rstrip)}): ( [ 12,1,12,11]. cycle { | i | t = ( s * 10<< 10)* 10+ %(¥e[A)* 10 10. times{t[i* _1 ] = 'TRICK+2022'[ _1 ] };$><<t sleep 1}) }" 2022;"# {puts'TRICK+2022'} .chars} ¥ #{b=$<.read;0;'( #';$><< b .gsub(''<<32,'') };#?!=' ' 12,{puts()?..¥*: !;s{s]? ( i |ub(/./`¥{(}S* }.a[0es [ = s/x/^#$$1Ka[}[ '.l=ne) | 1,,a)?ri:)2) b.siz!( ] 't.rst1]p* i bysib1( ] lT12,1[s.* ' b0cue1{ }%=¥(eA)t c0<l_ eR(ie+s{2 10)<_ ;tCm<20 10+* eI>K}t 10. }$ < ) 1 p 1 1 " 2022;"#{puts'TRICK+2022'} .chars}¥#{b=$<.read;0;'( #';$><<b.gsub(''<<32,'') };#?!=''12,{puts()?..¥*: !;s{s]?(i|ub(/./`¥{(}S* }.a[0es[=s/x/^#$$1Ka[}[ '.l=ne)|1,,a)?ri:)2) b.siz!(]'t.rst1]p*i bysib1(]lT12,1[s.*' b0cue1{}%=¥(eA)t c0<l_eR(ie+s{2 10)<_;tCm<20 10+*eI>K}t 10.}$<) 1p1 1" Prints "TRICK+2022" up and then left
  • 60. “Most anti-gravity” mame2.rb 2022;"# .chars} {puts'TRICK+2022' ¥ { ; #';$><< b ?! };#{s=' ' # 0 ! s[0]? ( b=$<.read ;' } ub( ,''} ';a= ''<<32 b.lines {puts( ?.. *( b.size) .gsub(/./) { b.sub!( /^#$`¥K(¥S) /x,a)?$1:a } .rstrip)}): ( [ 12,1,12,11]. cycle { | i | t = ( s * 10<< 10)* 10+ %(¥e[A)* 10 10. times{t[i* _1 ] = 'TRICK+2022'[ _1 ] };$><<t sleep 1}) }" Prints "TRICK+2022" vertically left and then up 2022;"# .chars}{puts'TRICK+2022' ¥{; #';$><<b ?! };#{s=''#0 !s[0]?(b=$<.read;' }ub(,''} ';a=''<<32 b.lines{puts(?..*( b.size).gsub(/./){ b.sub!(/^#$`¥K(¥S) /x,a)?$1:a} .rstrip)}): ([12,1,12,11]. cycle{|i|t=(s* 10<< 10)* 10+%(¥e[A)* 10 10.times{t[i* _1]='TRICK+2022'[ _1]};$><<t sleep1}) }" 2022;"#{puts'TRICK+2022' .chars}b#0<.read;' ¥{;$><<'=$ts(?..*( #';{s='b32ub(/./){ ?!#0]?(}pu$`¥K(¥S) };[(,''<gs}1].2'[ !sb=''<{^#:(s* }uaines.:a1i*2 ';lize)/})=20 b.sub!(12,* b.sa)?$)|t[ b.,trip1A)+ /xs2,1,i{t .r1le{|[CK ([c<(¥es<t cy<*imeI 10)%'TR< 10+t;$>) 10.=p1} 10]} 10]e _1e _1 sl }"
  • 61. • The TRICK for left gravity • The TRICK for upward gravity “Most anti-gravity” mame2.rb "¥ #{code1} # {code2}" "¥#{code1} #{code2}" left gravity "x x#{code1} xx{code2} " "x{code1} x#{code2} xx " upward gravity
  • 62. • Judges' comments – shinh: Various things by gravity. Wow, it's so fun! – yhara: Very tricky - essentially five programs are condensed into one. – flagitious: My brain hurts, horizontal/vertical is a bit of a gimmic (not generic, but still) – mame (camouflage comment): I think this piece would be the most difficult to implement in TRICK 2022 “Most anti-gravity” mame2.rb
  • 63. Winner » eto shinh yhara matz leonid flagitious mame score “Most interactive code” 『最もインタラクティブなコードで賞』 Tomoya Ishida (tompng) 10 7 10 10 9 8 8 8.86
  • 64. “Most interactive code” tompng2.rb q=->{!sleep _1/1e2};p=( c=0..2).map{[_1/9r ,0,5**_1.i/3,1,0]} require'socket';puts'op' "en http://localhost:#{( w=TCPServer.new$*[0]||0).addr[1]}";Thread.new{q[2];f=[-1 ]*s=3;t=Time.now.to_f;p.select!{0<_1[3]=[_1[3]+_1[4]/8.0,1 ].min};9.times{h=p.map{[2**(_1*t.i)/_4**0.5/(1+Math.sin(2*t- 9*_1%2)**32/16),_2+_4*( _3-_2)]};r=[s*3/2,84].min;g=->{x,y= (s*(1+_1+1i)/2).rect;x<0 ||x>=s-1||y<0||y>=s-1?0:((l=f[y+1])[ x+1]*(a=x%1)+(1-a)*l[x] )*(b=y%1)+(1-b)*((l=f[y])[x+1]*a+(1- a)*l[x])};f=(1..r).map {|y|(1..r).map{|x|z=1.5+1.5i-3.0*(y .i+x)/r;[h.sum{g[_1.*z +_2]}*0.9,1].min}};s=r};c=f.flatten redo};loop{s=w.accept ; Thread.new{r=s.gets;h='HTTP/1.1 '+ "200 OK¥r¥nContent-" 'T' "ype:text/html¥r¥n¥r¥n";r['/ ']?s. <<(h+'<style>ifram' 'e{' 'opacity:0;height:0;}input{wid'+ 'th:252px;}</styl' 'e>' '<form target="i"><input src="'+ "g#{rand}¥" type" '="im' 'age"><iframe name="i"></ifra'+ 'me></form>'):r ['/g'] ?(h[/:.+l/]=?:'image/gif';s<< h+'GIF8' '7a'+[84, 84,246,0,*(0..383).map {15*_1. /(383r)**(3-_1% 3)*17}].pack('v3c*'); loop{ s<<[67434785,5, 44,84,84,7,c.map{_1* 127} .each_slice(126 ).map{[127,128,*_1 ] .pack'c*'}*'', 1,129].pack('V3x' 'v2na*c2x');q[ 5];q.[]1while(r ==r=c)}):(x,y, z=r.scan(/¥d+/).map{_1.to_f/ 126-1};z&&p<<[rand-0.5,( z=x+y.i)*1.5,z/(z. abs+0.9),0,-p[ -3][4]=-1] s.<<h);s .close }}
  • 67. • A fractal organism with a pulse – You can tweak it with a mouse click • No JavaScript, no canvas, no HTML5! • Pre-HTML5 technologies – Endless streaming of an animated GIF – <input type="image"> • This element tells the click position to the server with a GET request like /?x=50&y=100 “Most interactive code” tompng2.rb
  • 68. “Most interactive code” tompng2.rb q=->{!sleep _1/1e2};p=( c=0..2).map{[_1/9r ,0,5**_1.i/3,1,0]} require'socket';puts'op' "en http://localhost:#{( w=TCPServer.new$*[0]||0).addr[1]}";Thread.new{q[2];f=[-1 ]*s=3;t=Time.now.to_f;p.select!{0<_1[3]=[_1[3]+_1[4]/8.0,1 ].min};9.times{h=p.map{[2**(_1*t.i)/_4**0.5/(1+Math.sin(2*t- 9*_1%2)**32/16),_2+_4*( _3-_2)]};r=[s*3/2,84].min;g=->{x,y= (s*(1+_1+1i)/2).rect;x<0 ||x>=s-1||y<0||y>=s-1?0:((l=f[y+1])[ x+1]*(a=x%1)+(1-a)*l[x] )*(b=y%1)+(1-b)*((l=f[y])[x+1]*a+(1- a)*l[x])};f=(1..r).map {|y|(1..r).map{|x|z=1.5+1.5i-3.0*(y .i+x)/r;[h.sum{g[_1.*z +_2]}*0.9,1].min}};s=r};c=f.flatten redo};loop{s=w.accept ; Thread.new{r=s.gets;h='HTTP/1.1 '+ "200 OK¥r¥nContent-" 'T' "ype:text/html¥r¥n¥r¥n";r['/ ']?s. <<(h+'<style>ifram' 'e{' 'opacity:0;height:0;}input{wid'+ 'th:252px;}</styl' 'e>' '<form target="i"><input src="'+ "g#{rand}¥" type" '="im' 'age"><iframe name="i"></ifra'+ 'me></form>'):r ['/g'] ?(h[/:.+l/]=?:'image/gif';s<< h+'GIF8' '7a'+[84, 84,246,0,*(0..383).map {15*_1. /(383r)**(3-_1% 3)*17}].pack('v3c*'); loop{ s<<[67434785,5, 44,84,84,7,c.map{_1* 127} .each_slice(126 ).map{[127,128,*_1 ] .pack'c*'}*'', 1,129].pack('V3x' 'v2na*c2x');q[ 5];q.[]1while(r ==r=c)}):(x,y, z=r.scan(/¥d+/).map{_1.to_f/ 126-1};z&&p<<[rand-0.5,( z=x+y.i)*1.5,z/(z. abs+0.9),0,-p[ -3][4]=-1] s.<<h);s .close }} fractal web server GIF encoding
  • 69. • Judges' comments – eto: Heart-shaped code. It is very beautiful. – shinh: Sending GIF stream is interesting. The author should advocate ARAG (Async Ruby and Gif) instead of AJAX (Async JS and XML). – yhara: Good example of how Ruby is good at network programming. It reacts to mouse click, wow! – flagitious: Cool that it is interactive. “Most interactive code” tompng2.rb
  • 70. Winner » eto shinh yhara matz leonid flagitious mame score “Best fishbowl” 『最高の金魚鉢で賞』 Tomoya Ishida (tompng) 9 9 9 9 N/A 9.5 9 9.08
  • 71. “Best fishbowl” tompng3.rb eval((s=%~c=(0..35 ).map{s[2*_1+1]}*'';class$Inte ger;def$quXinclude(Math ;spXo(a)=self* a.pow(87X=h=32.chr;g=PI/480;ls=(sp*31X,89)%89; def$abX+'eval((s=%'+(n=? .next)+s*88.chr+[nXs()=[a =self%X+'.split(',sp*25+'?'+88.chr+');(0..36).mapX89,89- a].miX{s[2*_1].split}',sp*31+".join.tr('$',$/)))"]*$/)Xn;end ;reqX.split$/;trap(:INT){puts;exit};q=->t,i{a,y=((t+i*99)Xuire 'matrX%960). ivmod(80);[(a*(7+i)+i*23)%79+(y+a)/(5+i%4)%2,39Xix';1 5.tiX-y/2]};p=->t,u{a=->b,c{(0..5).sum{(u%2-1)*E**(t*(b+c*_1)*gXmes{ |i,*X.i+ i*u+=5+sin(u*u))}};x,z=a[5,3]. 5,3].rect;x+=y.Xv|z= *?!Xi a[19,4];z+=w;r=(4+(x.abs+z.i).ab };t=(0..959).fX..? W,?Xind{|t|(0..29).all?{x,y=q[t,_1];(x 2||h=ls[y][x]X[,* ?]..X[/[^!-}]/]}};h=($**h+h).chr;eval( []} ->(x,yX?};a =(0X,a,b){x=x*36+39.5;y=19.5-y*18;b*=1 |i|((yX..1 34)X-b).ceil..y+b).map{|j|((x-i)/a+(y j)/ .times{X.ma p{zXx,z=p[t,_1];l=u```=0;while``````(l<1)``; u+```=0 ;d=x-y;X.in dex(Xl+=(d.abs+(z-w``)``.i).ab``s*1.``1 ;x``,z=y``,w;o[v``=``x.r d.imag/Xc[i+ 15*Xd.abs*l*sin(2*``l-t``*g*80``-_1) l*(``1-l)/``6,a``=l*( -l)**2*0.X_1] )};X7,a*2]&&o[v,z,``0.0``3,l**`` ``times``{|i``|(8+i).times{|Xw=* MatXj|o[sin(i)/2+````` ```sin( `/2.0`````````)*j/200,j*0.0Xrix [*(X5-1,0.02,0.1]``}} ``. q[t,``_1];m``[y][x]= };i=-X0.. 44).X1;$><<(['%%','[H .map{|j|(0..79).map{|k|x=(Xmap{ |i,X -39.5)/35.8;y=( i+=1;m[j][k]?h:c[i]):ls[j]X*b| v<<X[k];}*''}*$/<<0) 1)%9 te"`")#iJw6$Dcc1]r*G"eDXa.z ip(X%P<M^Az!7?f*yxM `d"qi77UD*T!: .^B][T ?%:"w82/s3A[M]V %KbeX0.. ).suX5,G_=6D65#,zMaW $lsR=!Uvhio zb : dE:50obh|RgCTFfy*+)Xm{-( p=(XH0},JA>;rxRht+ ADjV;e&'/h Qg cO?,C%J a0mE+Qy2a9'X(i+ _2)X^):t|am}b`k>e zxd[HJ9 ony JC gucaew/gcoWRy_X**9 .1).X*]u+DL(&hH wc 8531x'b bd= } < z Say vJ@{?+$Xto_i %88+XV-GE'5^Va <9 *`?9b1 >_ } 8g 3 4 l zH_/o@j*2vX1)*( _1||(Xp]h"u=4- U. 0nz2- E9U #"pl=^ e E(=+x6s/pXb<<p; 0))}X3t_@K?C C& ^6(BE > K 2DA B8jDlS b* WpM(|t(2X;b}] .lup.X5R(B71 la u?5V? M(2 dP <S<,fo Qv >Fj4<?KXsolve (v);13X"$; wL b,l^f$ f,5 z R,PhV# pM w^7UX5.time s{c[i+X (8 NfbKS) 2*` I RW7zgh!P j6 tX15*_1] =z[a[_1]X enuc,T= Oi. > 5D=#(;(% ?X||w.shif t]}};eval(X9P lRQ S dq4M(Xc)~.split( ?X);(0..36).map{s[2*_1].split} .join.tr('$',$/)))
  • 72. • 960-frame fishbowl animation – Each frame is an executable Ruby code (Quine) • The animation does not insert whitespaces • But it replaces some characters with whitespace – Not trivial to restore the original code “Best fishbowl” tompng3.rb
  • 73. • Error-correcting codes with linear algebra • By using Matrix library – with monkey-patching Integer for modular arithmetic • Wait! May this error-correcting code be corrupted? “Best fishbowl” tompng3.rb require 'matrix' matrix = Matrix[[3, 1, 4], [1, 5, 9], [2, 6, 5]] class Integer def quo(x) = self * x.pow(87, 89) % 89 def abs() = [self % 89, 89 - self % 89].min end answer = matrix.lup.solve([1, 2, 3]) (matrix * answer).map { _1 % 89 }
  • 74. “Best fishbowl” tompng3.rb eval((s=%~c=(0..35 ).map{s[2*_1+1]}*'';class$Inte ger;def$quXinclude(Math ;spXo(a)=self* a.pow(87X=h=32.chr;g=PI/480;ls=(sp*31X,89)%89; def$abX+'eval((s=%'+(n=? .next)+s*88.chr+[nXs()=[a =self%X+'.split(',sp*25+'?'+88.chr+');(0..36).mapX89,89- a].miX{s[2*_1].split}',sp*31+".join.tr('$',$/)))"]*$/)Xn;end ;reqX.split$/;trap(:INT){puts;exit};q=->t,i{a,y=((t+i*99)Xuire 'matrX%960). ivmod(80);[(a*(7+i)+i*23)%79+(y+a)/(5+i%4)%2,39Xix';1 5.tiX-y/2]};p=->t,u{a=->b,c{(0..5).sum{(u%2-1)*E**(t*(b+c*_1)*gXmes{ |i,*X.i+ i*u+=5+sin(u*u))}};x,z=a[5,3]. 5,3].rect;x+=y.Xv|z= *?!Xi a[19,4];z+=w;r=(4+(x.abs+z.i).ab };t=(0..959).fX..? W,?Xind{|t|(0..29).all?{x,y=q[t,_1];(x 2||h=ls[y][x]X[,* ?]..X[/[^!-}]/]}};h=($**h+h).chr;eval( []} ->(x,yX?};a =(0X,a,b){x=x*36+39.5;y=19.5-y*18;b*=1 |i|((yX..1 34)X-b).ceil..y+b).map{|j|((x-i)/a+(y j)/ .times{X.ma p{zXx,z=p[t,_1];l=u```=0;while``````(l<1)``; u+```=0 ;d=x-y;X.in dex(Xl+=(d.abs+(z-w``)``.i).ab``s*1.``1 ;x``,z=y``,w;o[v``=``x.r d.imag/Xc[i+ 15*Xd.abs*l*sin(2*``l-t``*g*80``-_1) l*(``1-l)/``6,a``=l*( -l)**2*0.X_1] )};X7,a*2]&&o[v,z,``0.0``3,l**`` ``times``{|i``|(8+i).times{|Xw=* MatXj|o[sin(i)/2+````` ```sin( `/2.0`````````)*j/200,j*0.0Xrix [*(X5-1,0.02,0.1]``}} ``. q[t,``_1];m``[y][x]= };i=-X0.. 44).X1;$><<(['%%','[H .map{|j|(0..79).map{|k|x=(Xmap{ |i,X -39.5)/35.8;y=( i+=1;m[j][k]?h:c[i]):ls[j]X*b| v<<X[k];}*''}*$/<<0) 1)%9 te"`")#iJw6$Dcc1]r*G"eDXa.z ip(X%P<M^Az!7?f*yxM `d"qi77UD*T!: .^B][T ?%:"w82/s3A[M]V %KbeX0.. ).suX5,G_=6D65#,zMaW $lsR=!Uvhio zb : dE:50obh|RgCTFfy*+)Xm{-( p=(XH0},JA>;rxRht+ ADjV;e&'/h Qg cO?,C%J a0mE+Qy2a9'X(i+ _2)X^):t|am}b`k>e zxd[HJ9 ony JC gucaew/gcoWRy_X**9 .1).X*]u+DL(&hH wc 8531x'b bd= } < z Say vJ@{?+$Xto_i %88+XV-GE'5^Va <9 *`?9b1 >_ } 8g 3 4 l zH_/o@j*2vX1)*( _1||(Xp]h"u=4- U. 0nz2- E9U #"pl=^ e E(=+x6s/pXb<<p; 0))}X3t_@K?C C& ^6(BE > K 2DA B8jDlS b* WpM(|t(2X;b}] .lup.X5R(B71 la u?5V? M(2 dP <S<,fo Qv >Fj4<?KXsolve (v);13X"$; wL b,l^f$ f,5 z R,PhV# pM w^7UX5.time s{c[i+X (8 NfbKS) 2*` I RW7zgh!P j6 tX15*_1] =z[a[_1]X enuc,T= Oi. > 5D=#(;(% ?X||w.shif t]}};eval(X9P lRQ S dq4M(Xc)~.split( ?X);(0..36).map{s[2*_1].split} .join.tr('$',$/)))
  • 75. “Best fishbowl” tompng3.rb eval((s=%~c=(0..35 ).map{s[2*_1+1]}*'';class$Inte ger;def$quXinclude(Math ;spXo(a)=self* a.pow(87X=h=32.chr;g=PI/480;ls=(sp*31X,89)%89; def$abX+'eval((s=%'+(n=? .next)+s*88.chr+[nXs()=[a =self%X+'.split(',sp*25+'?'+88.chr+');(0..36).mapX89,89- a].miX{s[2*_1].split}',sp*31+".join.tr('$',$/)))"]*$/)Xn;end ;reqX.split$/;trap(:INT){puts;exit};q=->t,i{a,y=((t+i*99)Xuire 'matrX%960). ivmod(80);[(a*(7+i)+i*23)%79+(y+a)/(5+i%4)%2,39Xix';1 5.tiX-y/2]};p=->t,u{a=->b,c{(0..5).sum{(u%2-1)*E**(t*(b+c*_1)*gXmes{ |i,*X.i+ i*u+=5+sin(u*u))}};x,z=a[5,3]. 5,3].rect;x+=y.Xv|z= *?!Xi a[19,4];z+=w;r=(4+(x.abs+z.i).ab };t=(0..959).fX..? W,?Xind{|t|(0..29).all?{x,y=q[t,_1];(x 2||h=ls[y][x]X[,* ?]..X[/[^!-}]/]}};h=($**h+h).chr;eval( []} ->(x,yX?};a =(0X,a,b){x=x*36+39.5;y=19.5-y*18;b*=1 |i|((yX..1 34)X-b).ceil..y+b).map{|j|((x-i)/a+(y j)/ .times{X.ma p{zXx,z=p[t,_1];l=u```=0;while``````(l<1)``; u+```=0 ;d=x-y;X.in dex(Xl+=(d.abs+(z-w``)``.i).ab``s*1.``1 ;x``,z=y``,w;o[v``=``x.r d.imag/Xc[i+ 15*Xd.abs*l*sin(2*``l-t``*g*80``-_1) l*(``1-l)/``6,a``=l*( -l)**2*0.X_1] )};X7,a*2]&&o[v,z,``0.0``3,l**`` ``times``{|i``|(8+i).times{|Xw=* MatXj|o[sin(i)/2+````` ```sin( `/2.0`````````)*j/200,j*0.0Xrix [*(X5-1,0.02,0.1]``}} ``. q[t,``_1];m``[y][x]= };i=-X0.. 44).X1;$><<(['%%','[H .map{|j|(0..79).map{|k|x=(Xmap{ |i,X -39.5)/35.8;y=( i+=1;m[j][k]?h:c[i]):ls[j]X*b| v<<X[k];}*''}*$/<<0) 1)%9 te"`")#iJw6$Dcc1]r*G"eDXa.z ip(X%P<M^Az!7?f*yxM `d"qi77UD*T!: .^B][T ?%:"w82/s3A[M]V %KbeX0.. ).suX5,G_=6D65#,zMaW $lsR=!Uvhio zb : dE:50obh|RgCTFfy*+)Xm{-( p=(XH0},JA>;rxRht+ ADjV;e&'/h Qg cO?,C%J a0mE+Qy2a9'X(i+ _2)X^):t|am}b`k>e zxd[HJ9 ony JC gucaew/gcoWRy_X**9 .1).X*]u+DL(&hH wc 8531x'b bd= } < z Say vJ@{?+$Xto_i %88+XV-GE'5^Va <9 *`?9b1 >_ } 8g 3 4 l zH_/o@j*2vX1)*( _1||(Xp]h"u=4- U. 0nz2- E9U #"pl=^ e E(=+x6s/pXb<<p; 0))}X3t_@K?C C& ^6(BE > K 2DA B8jDlS b* WpM(|t(2X;b}] .lup.X5R(B71 la u?5V? M(2 dP <S<,fo Qv >Fj4<?KXsolve (v);13X"$; wL b,l^f$ f,5 z R,PhV# pM w^7UX5.time s{c[i+X (8 NfbKS) 2*` I RW7zgh!P j6 tX15*_1] =z[a[_1]X enuc,T= Oi. > 5D=#(;(% ?X||w.shif t]}};eval(X9P lRQ S dq4M(Xc)~.split( ?X);(0..36).map{s[2*_1].split} .join.tr('$',$/))) Xis highlighted
  • 76. “Best fishbowl” tompng3.rb eval((s=%~c=(0..35 ).map{s[2*_1+1]}*'';class$Inte ger;def$quXinclude(Math ;spXo(a)=self* a.pow(87X=h=32.chr;g=PI/480;ls=(sp*31X,89)%89; def$abX+'eval((s=%'+(n=? .next)+s*88.chr+[nXs()=[a =self%X+'.split(',sp*25+'?'+88.chr+');(0..36).mapX89,89- a].miX{s[2*_1].split}',sp*31+".join.tr('$',$/)))"]*$/)Xn;end ;reqX.split$/;trap(:INT){puts;exit};q=->t,i{a,y=((t+i*99)Xuire 'matrX%960). ivmod(80);[(a*(7+i)+i*23)%79+(y+a)/(5+i%4)%2,39Xix';1 5.tiX-y/2]};p=->t,u{a=->b,c{(0..5).sum{(u%2-1)*E**(t*(b+c*_1)*gXmes{ |i,*X.i+ i*u+=5+sin(u*u))}};x,z=a[5,3]. 5,3].rect;x+=y.Xv|z= *?!Xi a[19,4];z+=w;r=(4+(x.abs+z.i).ab };t=(0..959).fX..? W,?Xind{|t|(0..29).all?{x,y=q[t,_1];(x 2||h=ls[y][x]X[,* ?]..X[/[^!-}]/]}};h=($**h+h).chr;eval( []} ->(x,yX?};a =(0X,a,b){x=x*36+39.5;y=19.5-y*18;b*=1 |i|((yX..1 34)X-b).ceil..y+b).map{|j|((x-i)/a+(y j)/ .times{X.ma p{zXx,z=p[t,_1];l=u```=0;while``````(l<1)``; u+```=0 ;d=x-y;X.in dex(Xl+=(d.abs+(z-w``)``.i).ab``s*1.``1 ;x``,z=y``,w;o[v``=``x.r d.imag/Xc[i+ 15*Xd.abs*l*sin(2*``l-t``*g*80``-_1) l*(``1-l)/``6,a``=l*( -l)**2*0.X_1] )};X7,a*2]&&o[v,z,``0.0``3,l**`` ``times``{|i``|(8+i).times{|Xw=* MatXj|o[sin(i)/2+````` ```sin( `/2.0`````````)*j/200,j*0.0Xrix [*(X5-1,0.02,0.1]``}} ``. q[t,``_1];m``[y][x]= };i=-X0.. 44).X1;$><<(['%%','[H .map{|j|(0..79).map{|k|x=(Xmap{ |i,X -39.5)/35.8;y=( i+=1;m[j][k]?h:c[i]):ls[j]X*b| v<<X[k];}*''}*$/<<0) 1)%9 te"`")#iJw6$Dcc1]r*G"eDXa.z ip(X%P<M^Az!7?f*yxM `d"qi77UD*T!: .^B][T ?%:"w82/s3A[M]V %KbeX0.. ).suX5,G_=6D65#,zMaW $lsR=!Uvhio zb : dE:50obh|RgCTFfy*+)Xm{-( p=(XH0},JA>;rxRht+ ADjV;e&'/h Qg cO?,C%J a0mE+Qy2a9'X(i+ _2)X^):t|am}b`k>e zxd[HJ9 ony JC gucaew/gcoWRy_X**9 .1).X*]u+DL(&hH wc 8531x'b bd= } < z Say vJ@{?+$Xto_i %88+XV-GE'5^Va <9 *`?9b1 >_ } 8g 3 4 l zH_/o@j*2vX1)*( _1||(Xp]h"u=4- U. 0nz2- E9U #"pl=^ e E(=+x6s/pXb<<p; 0))}X3t_@K?C C& ^6(BE > K 2DA B8jDlS b* WpM(|t(2X;b}] .lup.X5R(B71 la u?5V? M(2 dP <S<,fo Qv >Fj4<?KXsolve (v);13X"$; wL b,l^f$ f,5 z R,PhV# pM w^7UX5.time s{c[i+X (8 NfbKS) 2*` I RW7zgh!P j6 tX15*_1] =z[a[_1]X enuc,T= Oi. > 5D=#(;(% ?X||w.shif t]}};eval(X9P lRQ S dq4M(Xc)~.split( ?X);(0..36).map{s[2*_1].split} .join.tr('$',$/))) Error-correcting code is here! (Fish don't come to this area) The main code is inside with redundancy for error recovery
  • 77. • Judges' comments – eto: Beautiful! The "AQUA" Logo is also good! – shinh: Self-repairing Quine is not new, but this one is moving and catchy! – flagitious: Extremely aquatic and beautiful, I haven't figured out how fishes are calculated yet. – mame: Beautiful animation. Error correction makes the animation more beautiful. I love that the technical side supports the artistic side. “Best fishbowl” tompng3.rb
  • 79. Judges’ awards mame award: “Most calculating” - SAITOH Jinroq yhara award: “Most playable” – Don Yang fragitious award: “Most likely to be required” – Yutaka HARA matz award: “Most reactive and diffusive” – Sergey Kruk eto award: “Most global” – Yusuke Endoh leonid award: “Most accessible” – Yutaka HARA shinh award: “Most orderly code” – Tomoya Ishida
  • 80. Dishonorable Top 3 “Best fishbowl” – Tomoya Ishida “Most interactive code” – Tomoya Ishida “Most anti-gravity” – Yusuke Endoh
  • 81. Prize? • Dishonor: the title of “insane” • Top three entries will be checked into the Ruby official repository in “sample” directory – Ruby 3.2.0 will have them
  • 82. Conclusion • The winning entries will be published soon at: • Thank you for all participants! No k! http://github.com/tric /trick2022/
  • 83. Next contest? • No plan! – TRICK 2013 – TRICK 2015 – TRICK 2018 – TRICK 2022 – TRICK ? See you again! +2 +3 +4 +?