1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

sample/trick2018/: adds the top-five entries of TRICK 2018

See https://github.com/tric/trick2018 for TRICK 2018.
Fixes #14930.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64008 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
mame 2018-07-21 13:07:50 +00:00
parent 8d0f5f1bfa
commit e613cdd53d
21 changed files with 372 additions and 0 deletions

View file

@ -0,0 +1,3 @@
* kinaba
* twitter.com/kinaba
* cctld: jp

View file

@ -0,0 +1,8 @@
alias BEGIN for unless def class
super true or return defined? next
break while begin undef do end
rescue then retry else undef module
nil ensure case if yield __LINE__
self and redo elsif not __FILE__
alias END in end when __ENCODING__
end until false end

View file

@ -0,0 +1,55 @@
### Remarks
Just run it with no argument:
ruby entry.rb
(Anyway it is just a no-op program. The above command only verifies
that entry.rb is a valid Ruby program.)
I confirmed the following implementations/platforms:
* ruby 2.5.0p0 (2017-12-25 revision 61468) [x64-mingw32]
### Description
First, look at
https://docs.ruby-lang.org/ja/latest/doc/spec=2flexical.html#reserved
and then, look at entry.rb.
The source code of entry.rb consists only of reserved words of Ruby,
and all the reserved words are used in the code, in a way that the code
forms a valid Ruby program. No compile error, no warning, or no runtime error.
### Internals
Difficult (and interesting) points of the theme are:
* Since many of the reserved words define program structures, we cannot
use them independently. For instance, `retry` must be inside `rescue`,
or `break`/`next`/`redo` must be inside a looping construct.
Or, jump-out statements cannot occur at a position that requires a
value; `if return then true end` is a "void value expression" syntax error.
* Inserting newlines for each 6 word (to match with the spec html) is also
an interseting challenge, since Ruby is sensitive to newlines.
Tricks used in the code are:
* def/alias/undef can take even reserved words as parameters.
That is, `def class ... end` defines a method named `class`.
The feature is crucial since otherwise `BEGIN` etc inevitably
introduces non-reserved tokens (like `{}`).
* `defined?` can take some reserved words too (which I didn't know
until trying to write this program.)
* "void value expression" can be avoided by using `or` or `and`.
`if begin return end then true end` is a syntax error, but
`if begin false or return end then true end` is not.
### Limitation
Sad to say that it's not a "perfect pangram".
It uses 'alias' and 'undef' twice, and 'end' 4 times.

View file

@ -0,0 +1,3 @@
* Yusuke Endoh
* mame@ruby-lang.org
* cctld: jp

View file

@ -0,0 +1,15 @@
'';eval(r=%q(->z{r="'';eval(r=\
%q(#{r}))[%q`#{z}`]";i=-040;30.
times{|n|(15+n%2*15-n/2).times{
r<<r[i+=(1.-n&2)*(32-n%2*31)]}}
i=r[524,0]=?\0;eval(r[479..-1])
c['"']}))[%q`GFEDCBA"+"[e\"'"'t
kE*;;\";" TRICK2018 ";tb,;{{r
2E0$ob[us@*0)[90,336])_#i\n}s#i
0H}>["t]];};o[1,?\n*8];ex"-}eac
1Hl<1[-1]*2*t=n%2];o[14-n,0)mvk
8M$<4,?\n];15.times{|n|;o[35ie2
!Pss.slice!(0,1)+x;sleep(0.0t;0
'W=%q"<<95<<$s<<95;o=->n,x{n.'1
;@[2]}|\e../,%@s="'%trick2018!8
eval$s=%q_eval($s.gsub!(/#{%@`]

View file

@ -0,0 +1,16 @@
This program quines with animation.
```
$ ruby entry.rb
```
Of course, the output is executable.
```
$ ruby entry.rb > output
$ ruby output
```
Note, we don't cheat. This program uses escape sequences just for moving the cursor. It doesn't use attribution change nor overwrite to hide any code.
The program is crafted so that it works in two ways; it works as a normal program text, and, it also works when it is rearranged in a spiral order. Some parts of the code are actually overlapped.

View file

@ -0,0 +1,2 @@
ruby '2.5.0'
gem 'chunky_png'

View file

@ -0,0 +1,15 @@
GEM
specs:
chunky_png (1.3.8)
PLATFORMS
ruby
DEPENDENCIES
chunky_png
RUBY VERSION
ruby 2.5.0p0
BUNDLED WITH
1.16.1

View file

@ -0,0 +1,3 @@
* Tomoya Ishida (tompng)
* tomoyapenguin@gmail.com
* cctld: jp

View file

@ -0,0 +1,31 @@
X=[];class String def-@;replace ?-+self end;def-a;X.reject!{|x|x.
__id__==__id__};a.replace(self+?-+a) end end;at_exit{eval C=(Zlib
.inflate Integer((X*?-).tr(?-,'').tr('q-z','0-9'),26).digits(256)
.pack'C*')};def method_missing n;(X<<n.to_s)[-1]end;require'zlib'
fzygtoxyzgntmdmuwvfoffbpmvzojpkhczvjvjdbtscnldwbdoprackddovivvmkz
ponzmosvtjciwkgaslscxxxwudeesmmqpfhislxuxnnypulxstzgobyaekqqhbjcg
mvko------------ddkeys----eivhnccaqyiw---bzyccmt-----------ymtnge
jwhi--------------pjxf------mdarbtumnv---qasda--------------gmwdt
wrtk---qtpzgnce----fsl-------fkgzgtbpp---gwnm----pxkpqkdiw---owga
momz---yjjvpnvar---zeo---v-----duvalwu---nsqt---waofemwakivnyqkjd
fzag---uhvusmkl----kzb---rhc----iutzjr---mqlh---ayijpwativpweaato
xexs--------------rvgv---pjdz-----lkkg---uiaw---lovitupw-----fwmn
kfru------------jvjpgv---jskycf----pal---gbuf---hfdnywog-----iuca
pntn---apmkqroeuzwuwkw---gqnmgof-----b---hlpl---vkkyhfyrqfr--jwrl
kmdb---dhspujhmtgrkccu---uonfummdt-------rqfw----bpiactehwp--fncq
yzvz---gdaxebplhfndran---ytfmviryeh------hqwkl---------------nced
bibu---fnkdthgldhkxxjg---rwnmpudhbqin----gucoyki------------hfura
cqdgqpyzqfzknvdjoxxhpjulwwyebtocxdrvklbuviwwcatlmdosxfvwntzbijguy
iglrvvzlxerflupxvsyujfacuwhrvmnecgtewtqkhtdggcltejiyqcluclkycwvzg
vvxfysvttfbeglvrlngntdngzyhqrmltazwdydxrsvjploembhgxdvfmmhepbschm
brn--iqrcdb--evv----tqp------lg--uein-wzut--mr------wkh------foqz
zsf--srjnjp--ampb--pfio--hgtekx--rrr---fwd--jn--xqkezcz--vsb--nya
khrc--evlr--oioxs--mqce--bqfmag--bwz---xda--qw--jnuzelr--qzi--itx
mdxd--duso--wxbot--nmon--ugnbdpc--a--c--e--hlg--twxndre--tby--rhg
evhbn--zb--dtxmiz--dpia------vie--h--i--t--shh------kfn------owna
ealmt--kb--scxdjy--smvl--dqmgebk--t--s--t--gfd--updcbnc--rh--dwwp
dvpnxb----wpljjdy--kolc--qflyleok---xkv---usbj--jhrawbn--ewx--bgf
eaqwrw----ejwxhet--dice--eoczconm---urz---rqyp--hovvvfc--bskj--el
aocjcts--jtumwxm----mgy------xpaoq-jtwqr-aipay------dhy--iync--hk
sckddmvuvvuhhqstumaykvczaaujrumqbbqsdvdycplyrlkkojlxnkrhbbrmnjxyf
cdtcmpfmjvthwkpzucbblttgumomlxnxwjeypfeagaukfzeokzxjebkpigcvlqnso

View file

@ -0,0 +1,44 @@
undef p;X=[];class String def-@;replace ?-+dup end;def-a;X.reject!{|x|x.__id__==__id__};a.replace(self+?-+a) end end;at_exit{eval C=
(Zlib.inflate (X*?-).tr(?-,'').tr('q-z','0-9').to_i(26).digits(256).pack'C*')};def method_missing n;(X<<n.to_s)[-1]end;require'zlib'
gmlztzdculbtzgtjfetuh---k--htf----d-----------------------------------------------------g-b-----s--t-g--------jmuwescmgchftikfjafccs
ivchcveidpvxdabnvwyga-f--v-------xf----------------------------------------------------q-v---l-------q---------liiNeawriayymwooxgxqw
rfosepqsmojseyezmwbhi--------------ew--------------------------------------------------m---k-r-----------vwu--hiotltdmczwyjmlvbyfqwq
uvvykqdjednoqgtcmtfbzs---------f----o--------------------------------------------------t--a------m----x---f-----dldzsakyofetfozfpmrq
geusutariiiNiulkjbwlm-----d------------------------------------------------------------j---------o---------x--j-uitzrgwpupwhvendhyno
uubvnssiywkklwwdufhhi-rw----k---v-------------------------------------------------------sty-----yg---l---c-v----wkffpskpumolqmkeryzg
zrxdaiposwybbzgxdnegh-----g-----ma--n---------------------------------------------------------j----n--b-n-------yqavmscswdogpcgopygt
axiqfswlhzeamvymdnteo---q-q-w--------------------------fhrmj-----------------hkou-----------f-----d----u-o------evcuxxegekfgivzzujan
nslioftsvqvtkeigvfgwr-------------lyco-----------------igyvg-----------------okuk---------m--b-u--d--y------s---dadjrlykfhtermzfyktu
btoxzfpPicxxfligbivvf--------h----yrat---------------------------------------vjwd---------------------d-ki--o--tyqosehopkwttigwwfskp
komzvnyrvkjcjwbmdwdkp----------vxphiNdtawn--xms-saketo--jnld----ezulntdaz----nzna-----vhjwt------h----x--x--o--saxxsrkgktqotaluylbkk
sclegratyaarmgmepheml----------hwgglhlrfcx--znvmpfsgjx-onhju---gtxsmzqprlt---mjzy---frhdk-------------v---mj----dzjujmbgldfwoybgicwu
tfhgnhlzxlwtdtkgzlaca-------------gmex------arlm--------rvmh-ajtgf-----pqal--wcux-zatyi-------------------------xnluwybcugjclmablshn
tnjohqtqzivgmyutrssil-------------lcwq------jrf--------gcaii-maie------------vvnfjfqwo--------------------------filivosyhkxcvuwdibwj
tyxjiopiFqypvwdzoatuq-------------tdln------cnx---------ffuf-ajvq------------tyyypglpzmj------------------------vtqzwewqdsijrbymvpwn
niNffphoehukpvvmzvhyd-------------ahqd------nfr---------jeqk--toap-----mxhyg-tedv---otrwy-----------------------mjxnrktackwxwiajdnuc
kkxhuwbvibpvgvcampadi-------------ebmencqz--obf--------wfprz---qmrotkijiqv---ggfp-----hlzw----------------------kastwdpxiyftmypuxbtu
xetudmwzpomktgnjkcsyc---------------fwpdx---xb----j-----se-k------tllakc-----gjoo-------we------mic---lktk------ubtnrxvrjzuqlrfrsnmf
okdvfvcdbdqkckjialskk---------------------------v---u-------l----------------------------------z--q--qfg--------aaliNbxbjjpxebboneye
kcbkjmdclwnfawtfnwkeq----------------------------------j---y-------------------------------a---jmbyo-sgef--gf---extljbozuoofgyvsilct
xzoqmsqgzjxxpjqwkjkdd------------------------o--------m-------f---------------------------------n--de-ajz-rzv---fhnpbkrwdxoozpxeaxaf
mbcwxuiqdwcmadheiykaa-----------------------q-f------l---i---------------------------------r----zf---k--y---fi--dcnycheytylcgnioauee
yekiNacriqoevtdjerqbp----------------------------w---yy-----my----------------------------ko--mnbpskr--c-----j--ozyqpbfovhbhyoprzgqr
czwtuopxkdbphocfawvbk--------------------------q-s----j--b---------------------------------hd-xsb----bfiNp--w---fmwuvfambdqvxtzldwmh
xysnyrseydlkjcwfbsjnr-------------------------d-d-------------------------------------------f-enpss---qllpwr----almsdidvjwoigvldfqoa
lrpbixjpofxocxlflscpo------------------------------q-fyu--z-------------------------------------kfd-z---n-------bqxurujnxzurrdgcojks
jetyfdkcekckxbyosbfws-------------wdfhgwuvejjmf-----sxjubpvgcsl-------tnmixpv---------eurabjsdvstfv-------------qcyiqhonwoyixqeonfvp
mopPhywsozohitutgmmrb------------zxwtxe--riedeo---mspgpnv--pimlh------jhtzajk--------qqovvq---ldbrh-------------xtooxpayonpcvvtmvpra
vvuyiunpoeagdzqjecsub------------klrw------snrc---rrct------aajom--------nsyk--------peea-------azq-------------iNjefdkfhnagjicqwmsm
mbwwbfgehhbdmvvlflmee---------------------hkejn---jtbo-------jdtje-------jcei---------afyz-----smtc-------------kksvfjyuaqtohxiohhlz
dvfmfrzcmnsfruhqgjuxz------------------dfxdnlk----kkra-------xmmtf-------jwkw----------rdoozxtcho---------------bbwwferxwnnmdzcniicv
mfneisdlyeqwynldjgonj----------------jgrjvc-------uxga-------ghnpr-------sers--------scbknx----gmjo-------------moedtnlbflhtlkjibrqk
gobwqshnpbdcpjmjaeczr--------------iscsxs---------zfpo-------hhfwy-------qbba-------vhlxc-------ntod------------ndwzdomaptumzejiwqbn
snucynymvfpnadyqkzfcv-------------ggze------------kuvfs-----zuhod--------mylo-------jhwyp-----z-pywd------------dqfmpnevmtqcikbrilto
aotyxkipebdkassogpcbl-----------wgackesmvvsrihhd---orzndjndlzpb----------eobf-------kkayixzyotqfafa-w-----------mjjxoomwdglwvccozzut
rthesuszfwycsqqrtxlot-----------ejcqlhriilqbtrys------lwbkzmvp-----------zzwm-------l--qijwfllndzb-ik-----------mmokqomjepdcotnsiNig
nloryyoswwdmefywnnuhph------------------------------------------------------r--r-nd-----h--x--------------------hlgzeqqslwxgtjgghquf
nssngjtiudsrvfuxjzclhjhj----------------------------------------------------------t----------------k-f-mp-------obhyehqebtpjbkeepqzt
ezogzsimfynqmkteaipejo-g-yser-----------------------------------------------e------h-------------i---y----------qpgcqnltivmmsximbbsy
wtjjolwyoselcumgklqwpldkl-ulm-m---------------------------------------------------------------q---u-f--l--------buixfiitufktsqdtnrei
tgrtitcewseetlpeuuujb-osdokjozc------------------------------------------n---d-----f--------g--------q--g-------jyyqtezuzmcxgpcwuwfx
dpPayqmzxrwhbswwalygfurtkruw-u-k---------------------------------------------d---h------i----------c----i-------ulowcddvjbxthqlxjzbe

View file

@ -0,0 +1,19 @@
### Remarks
Bundle install
this program depends on `gem chunky_png`
Run it with the following command:
bundle exec ruby entry.rb trick.png
bundle exec ruby entry.rb [other png file]
I confirmed the following implementations/platforms:
* ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin16]
* ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin16]
### Description
This program is a png image viewer.
The output is an asciiart of the given png file,
and it is also a source code of the png viewer itself.

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

View file

@ -0,0 +1,3 @@
* Colin Fulton
* justcolin@gmail.com
* cctld: us

View file

@ -0,0 +1,2 @@
# Copyright 2018. Available for use under the terms of the MIT License.
$🚀=0;def 🤔 🏷,🤔=0,&b;puts ' '*$🚀+(🤔 ?"":"🚫 ")+🏷;$🚀+=4;b&.[];$🚀-=4;end

View file

@ -0,0 +1,62 @@
### Remarks
Create a Ruby file that requires entry.rb with a series of test in it the run the file using ruby:
```
ruby name_of_test_file.rb
```
To create a test, call 🤔 with two arguments. The first is a string describing what this tests, the second argument is the test assertion. If the assertion is truthy, the test passes. If the assertion if falsy, the test fails.
```
string_1 = "Hello world!"
string_2 = "This is not the same!"
🤔 "The two strings are equal",
string_1 == string_2
```
To create a group of tests under a label, call 🤔 with a string describing the group and a block containing the tests in that group.
```
🤔 "This is a group of tests" do
# Add other groups and/or tests here.
end
```
Here is an example:
```
require './entry'
🤔 "Math" do
🤔 "Addition" do
🤔 "One plus one equals two.",
1+1 == 2
🤔 "One plus one equals eleven. (This should fail.)",
1+1 == 11
end
🤔 "Subtraction" do
🤔 "One minus one equals zero.",
1-1 == 0
🤔 "Ten minus one equal nine.",
10-1 == 9
end
end
```
It has been tested with the following Ruby versions:
* ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]
* ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15]
* If you replace `b&.[]` with `b&&b[]` it will work with ruby 2.0.0 as well, but it will be one character longer.
### Description
The goal was to create a testing library where the test files looked good and the output looked good in as few characters as possible. The result is 68 characters and has one method to handle everything.
### Limitation
Your terminal program must support Unicode characters for the test output to look correct. If your terminal does not support Unicode, simply replace the 🚫 in the code with whatever character you want to prefix failing tests.

View file

@ -0,0 +1,3 @@
* Tomoya Ishida (tompng)
* tomoyapenguin@gmail.com
* cctld: jp

View file

@ -0,0 +1,41 @@
X=[];def self.method_missing n;n.to_s.chars;end
l=[];def l.-a;X<<a=[nil,*a];a;end;def l.+a;self-a;end
class Array;def-@;[]-self;end;def-a;replace [*self,nil,*a
]end;alias +@ -@;alias + -;end;def gen3d f;yield;b=['solid obj'];w,
h=X[0].size,X.size;X<<[];a=->r,z,dr,dz{;r-=w/2.0;z*=2;r2,z2=r+dr,z+dz*2;if r>0||r2>
0;r=[0,r].max;r2=[0,r2].max;16.times{|i|m=Math;p=m::PI/8;;c,s=m.cos(t=i*p),m.sin(t)
c2,s2=m.cos(t=(i+1)*p),m.sin(t);t-=p/2;[[0,1,2],[0,2,3]].map{|a|b.push [:facet,'n'+
+ 'ormal',dz*m.cos(t),dz*m.sin(t),-dr]*' ','outer loop',a.map{|i|'v'+
++ "ertex #{[[r*c,r*s,z],[r*c2,r*s2,z],[r2*c2,r2*s2,z2],[r2*
+c, r2*s,z2]][i]*' '}"},:endloop,:endfacet}}end};(0...h).
map{| y|w.times{|x|[X[y-1][x]||a[x,y,1,0],X[y+1][x]||
a[x+1,y+
1,-1,0],X[
y][x-+1]||a[
x,y+1,0,-1],X[y
][x++1]||a[x+1,y,
0,1]]if X[y][x]}}
s=[b,'end'+b[0]]*
$/;File.write(f,
s);X.replace(
[]);end
gen3d 'wine_glass.stl' do
l--ww------------------ww--l
l--ww------------------ww--l
l--ww++++++++++++++++++ww--l
l--ww++++++++++++++++++ww--l
l--ww++++++++++++++++++ww--l
l--ww++++++++++++++++++ww--l
l---ww++++++++++++++++ww---l
l----www++++++++++++www----l
l------www++++++++www------l
l--------wwwwwwwwww--------l
l-----------wwww-----------l
l------------ww------------l
l------------ww------------l
l------------ww------------l
l-----------wwww-----------l
l---------wwwwwwww---------l
l----wwwwwwwwwwwwwwwwww----l
end

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View file

@ -0,0 +1,31 @@
### Remarks
Just run it with no argument:
ruby entry.rb
I confirmed the following implementations/platforms:
* ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin16]
* ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin16]
* ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin16]
### Description
This program will generate `wine_glass.stl`, a 3D data file(STL format) of a wine glass.
You can change the shape by modifying the DSL part.
For sake cup:
```ruby
gen3d 'ochoko.stl' do
l------------------------l
l-ww------------------ww-l
l-ww------------------ww-l
l-ww++++++++++++++++++ww-l
l-ww++++++++++++++++++ww-l
l--ww++++++++++++++++ww--l
l---wwww++++++++++wwww---l
l----wwwwwwwwwwwwwwww----l
l----www----------www----l
end
```
`+` and `-` are the same meaning(just for apperance)

View file

@ -0,0 +1,16 @@
This directory contains the award-winning entries of
the 3rd Transcendental Ruby Imbroglio Contest for rubyKaigi (TRICK 2018).
THESE ARE BAD EXAMPLES! You must NOT use them as a sample code.
* 01-kinaba/entry.rb: "Most reserved" - **Gold award**
* 02-mame/entry.rb: "Best spiral" - **Silver award**
* 03-tompng/entry.rb: "Best png viewer" - **Bronze award**
* 04-colin/entry.rb: "Best one-liner" - 4th prize
* 05-tompng/entry.rb: "Most three-dimentional" - 5th prize
These files are licensed under MIT license.
For the contest outline and other winning entries, see:
https://github.com/tric/trick2018