mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* sample/trick2013/: added the award-winning entries of TRICK 2013.
See https://github.com/tric/trick2013 for the contest outline. (Matz has approved the attachment.) git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44403 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
1e7a929c1d
commit
e8052778c1
16 changed files with 301 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
|||
Wed Dec 25 12:33:41 2013 Yusuke Endoh <mame@tsg.ne.jp>
|
||||
|
||||
* sample/trick2013/: added the award-winning entries of TRICK 2013.
|
||||
See https://github.com/tric/trick2013 for the contest outline.
|
||||
(Matz has approved the attachment.)
|
||||
|
||||
Wed Dec 25 10:42:02 2013 Yamashita Yuu <yamashita@geishatokyo.com>
|
||||
|
||||
* ext/openssl/ossl_ssl.c (Init_ossl_ssl): Declare a constant
|
||||
|
|
13
sample/trick2013/README.md
Normal file
13
sample/trick2013/README.md
Normal file
|
@ -0,0 +1,13 @@
|
|||
This directory contains the award-winning entries of
|
||||
the 1st Transcendental Ruby Imbroglio Contest for rubyKaigi (TRICK 2013).
|
||||
|
||||
THESE ARE BAD EXAMPLES! You must NOT use them as a sample code.
|
||||
|
||||
* kinaba/entry.rb: "Best pangram" - Gold award
|
||||
* mame/entry.rb: "Most classic" - Bronze award
|
||||
* shinh/entry.rb: "Most Readable" - Silver award
|
||||
* yhara/entry.rb: "Worst abuse of constants" - Dishonorable mention
|
||||
|
||||
For the contest outline and other winning entries, see:
|
||||
|
||||
https://github.com/tric/trick2013
|
3
sample/trick2013/kinaba/authors.markdown
Normal file
3
sample/trick2013/kinaba/authors.markdown
Normal file
|
@ -0,0 +1,3 @@
|
|||
* kinaba
|
||||
* kiki@kmonos.net
|
||||
* cctld: jp
|
1
sample/trick2013/kinaba/entry.rb
Normal file
1
sample/trick2013/kinaba/entry.rb
Normal file
|
@ -0,0 +1 @@
|
|||
!@THEqQUICKbBROWNfFXjJMPSvVLAZYDGgkyz&[%r{\"}mosx,4>6]|?'while(putc 3_0-~$.+=9/2^5;)<18*7and:`#
|
37
sample/trick2013/kinaba/remarks.markdown
Normal file
37
sample/trick2013/kinaba/remarks.markdown
Normal file
|
@ -0,0 +1,37 @@
|
|||
### Remarks
|
||||
|
||||
Just run it with no argument:
|
||||
|
||||
ruby entry.rb
|
||||
|
||||
I confirmed the following implementations/platforms:
|
||||
|
||||
* ruby 2.0.0p0 (2013-02-24) [i386-mswin32\_100]
|
||||
|
||||
### Description
|
||||
|
||||
The program prints each ASCII character from 0x20 ' ' to 0x7e '~' exactly once.
|
||||
|
||||
The program contains each ASCII character from 0x20 ' ' to 0x7e '~' exactly once.
|
||||
|
||||
### Internals
|
||||
|
||||
The algorthim is the obvious loop "32.upto(126){|x| putc x}".
|
||||
|
||||
It is not so hard to transform it to use each character *at most once*. Only the slight difficulty comes from the constraint that we cannot "declare and then use" variables, because then the code will contain the variable name twice. This restriction is worked around by the $. global variable, the best friend of Ruby golfers.
|
||||
|
||||
The relatively interesting part is to use all the charcters *at least once*. Of course, this is easily accomplished by putting everything into a comment (i.e., #unsed...) or to a string literal (%(unused...), note that normal string literals are forbidden since they use quotation marks twice). Hey, but that's not fun at all! I tried to minimize the escapeway.
|
||||
|
||||
* "@THEqQUICKbBROWNfFXjJMPSvVLAZYDGgkyz". Trash box of unused alphabet. I with I could have used "gkyz" somewhere else.
|
||||
|
||||
* "%r{\"}mosx". Regex literal, with %-syntax. I don't even know what each m,o,s,x means...
|
||||
|
||||
* "?'" Symbol literal. The quote characters (' " \`) are the first obstacle to this trial because they have to be used in pair usually. These are escaped as \" and ?' and :\`.
|
||||
|
||||
* "4>6" "3\_0-~$.+=9/2^5" "18\*7". I had to consume many arithmetic operators +-\*/^~<>, but I only have ten literals 0 to 9 and $. as operands. Besides I have to express the print loop. This is an interesting puzzle.
|
||||
|
||||
* "(putc ...;)<18*7". Trail semicolon doesn't change the value of the expression.
|
||||
|
||||
### Limitation
|
||||
|
||||
n/a.
|
3
sample/trick2013/mame/authors.markdown
Normal file
3
sample/trick2013/mame/authors.markdown
Normal file
|
@ -0,0 +1,3 @@
|
|||
* Yusuke Endoh
|
||||
* mame@tsg.ne.jp
|
||||
* cctld: jp
|
97
sample/trick2013/mame/entry.rb
Normal file
97
sample/trick2013/mame/entry.rb
Normal file
|
@ -0,0 +1,97 @@
|
|||
eval$C=%q(at_exit{
|
||||
open("/dev/dsp","wb"){|g|h=[0]*80
|
||||
$><<"\s"*18+"eval$C=%q(#$C);S=%:"
|
||||
(S<<m=58).lines{|l|s=[128]*n=20E2
|
||||
t=0; h.map!{|v|d=?!==l[
|
||||
t]?1 :(l[
|
||||
t]== ?#)?
|
||||
0*v= 6:03
|
||||
(v<1 ?[]:
|
||||
0..n -1).
|
||||
each {|z|
|
||||
s[z] +=2*
|
||||
M.sin(($*[0] ||1)
|
||||
.to_f*M.sin(y= 40*(z+m)*2**
|
||||
(t/12E0)/463)+ y)*(v-z*d/n)};
|
||||
t+=1;v-d};m+= n;g.flush<<(s.
|
||||
pack"C*"); puts(l)}}};M=
|
||||
Math);S=%:
|
||||
|
||||
Jesu, Joy of Man's Desiring
|
||||
Johann Sebastian Bach
|
||||
|
||||
#
|
||||
| #
|
||||
| #
|
||||
# # # #
|
||||
| | | #
|
||||
| | # #
|
||||
# # # #
|
||||
| | | #
|
||||
| | # #
|
||||
# # # #
|
||||
| | | #
|
||||
| | # #
|
||||
# # # #
|
||||
| | | #
|
||||
| | # #
|
||||
# # # #
|
||||
| | | #
|
||||
| | # #
|
||||
# # # #
|
||||
| | | #
|
||||
| | # #
|
||||
# # # #
|
||||
| | | #
|
||||
| | #
|
||||
# # # #
|
||||
| | | #
|
||||
| #| #
|
||||
# # | #
|
||||
| | | #
|
||||
| | # #
|
||||
# # # #
|
||||
| | # |
|
||||
| | # #
|
||||
# # # #
|
||||
| | | #
|
||||
| | #
|
||||
# # # #
|
||||
| | # |
|
||||
| # # |
|
||||
# # # #
|
||||
| | | #
|
||||
| | # #
|
||||
# # # #
|
||||
| | | #
|
||||
| | # #
|
||||
# # # #
|
||||
| | | #
|
||||
| | # #
|
||||
# # # #
|
||||
| | | #
|
||||
| | # #
|
||||
# # # #
|
||||
| | | #
|
||||
| | # #
|
||||
# # # #
|
||||
| | | #
|
||||
| | # #
|
||||
# # # #
|
||||
| | | #
|
||||
| # #
|
||||
# # #
|
||||
| | | #
|
||||
| # | #
|
||||
# # # #
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | :
|
BIN
sample/trick2013/mame/music-box.mp4
Normal file
BIN
sample/trick2013/mame/music-box.mp4
Normal file
Binary file not shown.
47
sample/trick2013/mame/remarks.markdown
Normal file
47
sample/trick2013/mame/remarks.markdown
Normal file
|
@ -0,0 +1,47 @@
|
|||
### Remarks
|
||||
|
||||
Run the program under a platform that `/dev/dsp` is available.
|
||||
For example, if you are using pulseaudio, use `padsp`:
|
||||
|
||||
padsp ruby entry.rb
|
||||
|
||||
Please see Limitation if you want to run this program on os x.
|
||||
|
||||
I confirmed the following platforms.
|
||||
|
||||
* ruby 2.0.0p0 (2013-02-24 revision 39474) [x86\_64-linux]
|
||||
* ruby 1.9.3p194 (2012-04-20 revision 35410) [x86\_64-linux]
|
||||
* ruby 1.9.3p327 (2012-11-10 revision 37606) [x86\_64-darwin10.8.0]
|
||||
|
||||
For those who are lazy, I'm attaching a screencast.
|
||||
|
||||
### Description
|
||||
|
||||
This program is a music-box quine.
|
||||
It prints itself with playing "Jesu, Joy of Man's Desiring".
|
||||
|
||||
### Internal
|
||||
|
||||
Like a real music box, this program consists of a mechanical part (code) and a piano roll.
|
||||
In the piano roll, `#` represents a pin that hits a note, and `|` represents a slur.
|
||||
The leftmost column corresponds 110Hz (low A).
|
||||
Every column corresponds a semitone higher than the left one.
|
||||
|
||||
This program uses [the frequency modulation synthesis](http://en.wikipedia.org/wiki/Frequency_modulation_synthesis) to play the sound like a music-box.
|
||||
You can create a different-sounding tone by changing the parameter.
|
||||
For example, the following will play the sound like a harpsichord.
|
||||
|
||||
padsp ruby entry.rb 2.0
|
||||
|
||||
Note that this program does *not* use an idiom to remove whitespace, such as `.split.join`. All newlines and spaces do not violate any of the Ruby syntax rules.
|
||||
|
||||
### Limitation
|
||||
|
||||
On os x, `/dev/dsp` is not available.
|
||||
You have to use sox by replacing the following part:
|
||||
|
||||
open("/dev/dsp","wb")
|
||||
|
||||
with:
|
||||
|
||||
IO.popen("./pl","wb")
|
2
sample/trick2013/shinh/authors.markdown
Normal file
2
sample/trick2013/shinh/authors.markdown
Normal file
|
@ -0,0 +1,2 @@
|
|||
Shinichiro Hamaji
|
||||
Japan, .jp
|
10
sample/trick2013/shinh/entry.rb
Normal file
10
sample/trick2013/shinh/entry.rb
Normal file
|
@ -0,0 +1,10 @@
|
|||
begin with an easy program.
|
||||
you should be able to write
|
||||
a program unless for you,
|
||||
program in ruby language is
|
||||
too difficult. At the end
|
||||
of your journey towards the
|
||||
ultimate program; you must
|
||||
be a part of a programming
|
||||
language. You will end if
|
||||
you != program
|
4
sample/trick2013/shinh/remarks.markdown
Normal file
4
sample/trick2013/shinh/remarks.markdown
Normal file
|
@ -0,0 +1,4 @@
|
|||
This program is a meaningless poem.
|
||||
This does nothing for you.
|
||||
Almost everything in this code is junk,
|
||||
but you and program would confuse you a bit.
|
3
sample/trick2013/yhara/authors.markdown
Normal file
3
sample/trick2013/yhara/authors.markdown
Normal file
|
@ -0,0 +1,3 @@
|
|||
* Yutaka Hara
|
||||
* yutaka.hara.gmail.com
|
||||
* cctld: jp
|
28
sample/trick2013/yhara/entry.rb
Normal file
28
sample/trick2013/yhara/entry.rb
Normal file
|
@ -0,0 +1,28 @@
|
|||
def _(&b)$><<->(x){x ? (String===x ?x.upcase:
|
||||
(Class===x ? x : x.class).name[$a?0:($a=5)]):
|
||||
" "}[ begin b[];rescue Exception;$!;end ] end
|
||||
|
||||
_ { return }
|
||||
_ { method(:p).unbind }
|
||||
_ { eval "{ " }
|
||||
_ { Thread.current.join }
|
||||
_ { nil }
|
||||
_ { select }
|
||||
_ { ruby }
|
||||
_ { self.class }
|
||||
_ { Thread.current.group }
|
||||
_ { nil.to_h }
|
||||
_ { "\xFF".encode("big5") }
|
||||
_ { raise }
|
||||
_ { [0][1] }
|
||||
_ { Regexp.compile "*" }
|
||||
_ { RUBY_COPYRIGHT[32] }
|
||||
_ { binding }
|
||||
_ { :s.class.name[1] }
|
||||
_ { warn }
|
||||
_ { [a: :b][0] }
|
||||
_ { methods }
|
||||
_ { IO.class }
|
||||
_ { {}.fetch(0) }
|
||||
_ { open " " }
|
||||
_ { 1000000.chr }
|
23
sample/trick2013/yhara/remarks.en.markdown
Normal file
23
sample/trick2013/yhara/remarks.en.markdown
Normal file
|
@ -0,0 +1,23 @@
|
|||
### Remarks
|
||||
|
||||
Just run it with no argument:
|
||||
|
||||
ruby entry.rb
|
||||
|
||||
I confirmed the following implementations/platforms:
|
||||
|
||||
* ruby 2.0.0p0 (2013-02-24 revision 39474) [x86\_64-darwin12.2.1]
|
||||
|
||||
### Description
|
||||
|
||||
It prints JUST ANOTHER RUBY HACKER¡£
|
||||
|
||||
### Internals
|
||||
|
||||
This script uses characters in constants in Object class. It
|
||||
intentionally raises some exceptions. The second 'U' comes from
|
||||
RUBY\_COPYRIGHT, "Yukihiro Matsumoto".
|
||||
|
||||
### Limitation
|
||||
|
||||
This program does not work on JRuby because "return" does not raise an exception.
|
24
sample/trick2013/yhara/remarks.markdown
Normal file
24
sample/trick2013/yhara/remarks.markdown
Normal file
|
@ -0,0 +1,24 @@
|
|||
### Remarks
|
||||
|
||||
引数なしで普通に実行してください。
|
||||
|
||||
ruby entry.rb
|
||||
|
||||
以下の実装・プラットフォームで動作確認しています。
|
||||
|
||||
* ruby 2.0.0p0 (2013-02-24 revision 39474) [x86\_64-darwin12.2.1]
|
||||
|
||||
### Description
|
||||
|
||||
JUST ANOTHER RUBY HACKERと表示します。
|
||||
|
||||
### Internals
|
||||
|
||||
Objectクラスの定数から文字を拾っています。
|
||||
そのために、意図的に例外を起こしています。
|
||||
「U」が一つしか見つからなかったので、もう一個はRUBY\_COPYRIGHTの
|
||||
「Yukihiro Matsumoto」から取っています。
|
||||
|
||||
### Limitation
|
||||
|
||||
JRubyはreturnがエラーにならなくて、動きませんでした。
|
Loading…
Reference in a new issue