書き込み対象の日記
Permanent Link: http://www.misho-web.com/diary/200906.html#Diary30
るびまゴルフ【第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 ]