From e8052778c18eef07e5ef3403e234923ed5018333 Mon Sep 17 00:00:00 2001 From: mame Date: Wed, 25 Dec 2013 03:45:15 +0000 Subject: * 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 --- sample/trick2013/README.md | 13 ++++ sample/trick2013/kinaba/authors.markdown | 3 + sample/trick2013/kinaba/entry.rb | 1 + sample/trick2013/kinaba/remarks.markdown | 37 +++++++++++ sample/trick2013/mame/authors.markdown | 3 + sample/trick2013/mame/entry.rb | 97 +++++++++++++++++++++++++++++ sample/trick2013/mame/music-box.mp4 | Bin 0 -> 580724 bytes sample/trick2013/mame/remarks.markdown | 47 ++++++++++++++ sample/trick2013/shinh/authors.markdown | 2 + sample/trick2013/shinh/entry.rb | 10 +++ sample/trick2013/shinh/remarks.markdown | 4 ++ sample/trick2013/yhara/authors.markdown | 3 + sample/trick2013/yhara/entry.rb | 28 +++++++++ sample/trick2013/yhara/remarks.en.markdown | 23 +++++++ sample/trick2013/yhara/remarks.markdown | 24 +++++++ 15 files changed, 295 insertions(+) create mode 100644 sample/trick2013/README.md create mode 100644 sample/trick2013/kinaba/authors.markdown create mode 100644 sample/trick2013/kinaba/entry.rb create mode 100644 sample/trick2013/kinaba/remarks.markdown create mode 100644 sample/trick2013/mame/authors.markdown create mode 100644 sample/trick2013/mame/entry.rb create mode 100644 sample/trick2013/mame/music-box.mp4 create mode 100644 sample/trick2013/mame/remarks.markdown create mode 100644 sample/trick2013/shinh/authors.markdown create mode 100644 sample/trick2013/shinh/entry.rb create mode 100644 sample/trick2013/shinh/remarks.markdown create mode 100644 sample/trick2013/yhara/authors.markdown create mode 100644 sample/trick2013/yhara/entry.rb create mode 100644 sample/trick2013/yhara/remarks.en.markdown create mode 100644 sample/trick2013/yhara/remarks.markdown (limited to 'sample') diff --git a/sample/trick2013/README.md b/sample/trick2013/README.md new file mode 100644 index 0000000000..65f1d3b8ad --- /dev/null +++ b/sample/trick2013/README.md @@ -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 diff --git a/sample/trick2013/kinaba/authors.markdown b/sample/trick2013/kinaba/authors.markdown new file mode 100644 index 0000000000..84c011ee05 --- /dev/null +++ b/sample/trick2013/kinaba/authors.markdown @@ -0,0 +1,3 @@ +* kinaba + * kiki@kmonos.net + * cctld: jp diff --git a/sample/trick2013/kinaba/entry.rb b/sample/trick2013/kinaba/entry.rb new file mode 100644 index 0000000000..f7348a94dc --- /dev/null +++ b/sample/trick2013/kinaba/entry.rb @@ -0,0 +1 @@ +!@THEqQUICKbBROWNfFXjJMPSvVLAZYDGgkyz&[%r{\"}mosx,4>6]|?'while(putc 3_0-~$.+=9/2^5;)<18*7and:`# \ No newline at end of file diff --git a/sample/trick2013/kinaba/remarks.markdown b/sample/trick2013/kinaba/remarks.markdown new file mode 100644 index 0000000000..e35550e9af --- /dev/null +++ b/sample/trick2013/kinaba/remarks.markdown @@ -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. diff --git a/sample/trick2013/mame/authors.markdown b/sample/trick2013/mame/authors.markdown new file mode 100644 index 0000000000..e99cd71554 --- /dev/null +++ b/sample/trick2013/mame/authors.markdown @@ -0,0 +1,3 @@ +* Yusuke Endoh + * mame@tsg.ne.jp + * cctld: jp diff --git a/sample/trick2013/mame/entry.rb b/sample/trick2013/mame/entry.rb new file mode 100644 index 0000000000..cc88a959ef --- /dev/null +++ b/sample/trick2013/mame/entry.rb @@ -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<<<->(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 } diff --git a/sample/trick2013/yhara/remarks.en.markdown b/sample/trick2013/yhara/remarks.en.markdown new file mode 100644 index 0000000000..bd821e882c --- /dev/null +++ b/sample/trick2013/yhara/remarks.en.markdown @@ -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. diff --git a/sample/trick2013/yhara/remarks.markdown b/sample/trick2013/yhara/remarks.markdown new file mode 100644 index 0000000000..99cb4b557c --- /dev/null +++ b/sample/trick2013/yhara/remarks.markdown @@ -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ãŒã‚¨ãƒ©ãƒ¼ã«ãªã‚‰ãªãã¦ã€å‹•ãã¾ã›ã‚“ã§ã—ãŸã€‚ -- cgit v1.2.3