Diary - Comment書き込み - 2009年06月30日

書き込み対象の日記

Tags:  Ruby  CodeGolf

るびまゴルフ【第6回】

Rubyist Magazine最新号(26号)に載っていた「るびまゴルフ【第6回】」が何かおもしろそうだったので挑戦してみた。

お題は,Unixで言うところのseqを実装しろ,というもの。標準入力から

5,9

のような文字列を入力したときに,きちんと

5
6
7
8
9

みたいな出力を返しなさいよ,というもの。

色々頑張ったけど,結局

gets[/,/]='..';$><<eval($_).to_a*$/ # 35bytes for problem 1&2

までしか縮められなかった。Rangeだとevalしたりto_aしたりするから長くなってしまうんだけど,かといって制御構造でuptoとかするのはsplitが必要になるから……。。。。

gets.to_iで初期値は取得できるけど,じゃあ終端は,と言われると$_.sub(/.*,/,"").to_iと長くなってしまう。結局Rangeが一番楽そうだった。


7月1日追記

2bytes 短くすることができた。

gets[/,/]='..';$><<[*eval($_)]*$/ # 33bytes for problem 1&2

7月2日追記

maraigueさん(っていうか@h_hiro)の成果パクって参考にして,更に短縮してみた。

puts *eval(gets.sub",","..") # 28bytes for problem 1&2 (unofficial)

括弧の省略とかwwwwきめぇwwww。あとputsって配列渡すとそれ順番にputsしてくれんのな。良い奴。

参考文献:Maraigue. [Ruby] Rubyist Magazine 0026号 るびまゴルフ第6回に挑戦. (2009.07.01)


7月2日追記

ついでに,seqと同様に標準入力から与えた場合についてもやってみた。

puts *eval($**'..') # 19bytes for problem 3 (unofficial)

Maraigueさんのputs techniqueを用いている。

~:> ruby seq.rb 8 12
8
9
10
11
12

Commentを書き込む[ Trackback URL : http://www.misho-web.com/diary/Trackback/20090630 ]

書き込みform

名前
(必須)
削除password
(必須)
内容
(Tagは使えません)

名前と削除passを保存する