忍者ブログ
Since 14.Jan.2009:08:29 プログラミングと絵のブログ
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


今日は初めてるびまゴルフに挑戦してみた

問題はるびまゴルフ第6回から、


seq という Unix コマンドがあります。このコマンドを使うと、数値を2つ引数にして、その間にある数を出力することができます。例えば 3 と 5 を引数として実行すると

% seq 3 5
3
4
5
というような実行結果になります。

今回はこのコマンドを実装してみて下さい。入力はコンマで区切られて標準入力から与えられるものとします。例えば

3,5
という入力に対して

3
4
5
と出力するようにして下さい。例えば

a,b=gets.split(',').map{|v|v.to_i}
a.upto(b){|i|puts i}
というようなコードと同じ出力が得られるようにして下さい。パーは 50Bytes とします。

また余力があれば、入力が

3 5
と空白区切りで与えられる場合、 seq のように引数として与えられる場合、つまり ARGV を使う場合も考えてみて下さい。





自分の解答


  1. gets=~/,/;puts ($`.to_i..$'.to_i).to_a #38Bytes

  2. gets=~/\s/;puts ($`.to_i..$'.to_i).to_a #39Bytes

  3. a,b=$*;puts (a..b).to_a #23Bytes



この3つ。
とりあえず1時間くらい頑張ってみたけどここまでだった。
とりあえずパーはクリアしたけど



添削タイム

終わった後、他の人のを見てみると、
(a..b).to_a => *a..b
にすると、3問とも6Bytes減らせるらしい。

あと1,2番はなんかうまく動かないからto_iメソッド使ってたんだけど、
getsで受け取ったら"3,5\n"になって、改行が入るみたい。
gets.chopで改行を取り除くとto_iがいらなくなって、

gets.chop=~/,/;puts *$`..$'
の27Bytes。
空白区切りなら28Bytes。

修正は↓の人を参考
http://rubyist.g.hatena.ne.jp/edvakf/20090702/1246522250

最後の詰めが甘かったw
方向性は合ってたんだけどなぁ・・・
次回はもっとがんばります。

evalとか使ってる人もいた。


  1. p *(eval"Range.new "+gets)

  2. eval"p *%d..%d"%gets.split



両方とも26Bytes。
evalは未だに良く分からん
文字列を動的にプログラムとして認識するんだっけか

てか何で
p [3,4,5]
#=> [3,4,5]
なのに、
p *3..5
#=> 3
4
5
なんだ。謎すぐる・・・
*はto_aとは微妙に違うということか・・・
PR

Comment
Name
Title
Mail
URL
Comment
Pass   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
無題
ゴルフやっていただいてありがとうございます。記事書いた人間です。

p *3..5 ですが、 * は splat 演算で、右っかわにあるものに to_a をした後に、配列の各要素を関数の第一、第二、第三、…引数として展開して関数を呼ぶ、というような動作をします。よって p *3..5 は p(3,4,5) という意味です。 splat 演算は他にも多重代入の時なんかにも使えます。 a,b,c=*3..5 など。
shinh 2009/07/15(Wed)02:46: 編集
ありがとうございます
コメントありがとうございます
実は記事投稿後に自己完結しました・・・すいません;;

次回以降も参加しようと思うのでよろしくおねがいします
・・・解ければ
uguisu_an 2009/07/17(Fri)07:33: 編集
この記事へのトラックバック
この記事にトラックバックする:
[60] [59] [58] [57] [56] [55] [54] [53] [52] [51] [50
«  Back :   HOME   : Next  »
カレンダー
11 2024/12 01
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
ブログ内検索
プロフィール
HN:
uguisu_an
年齢:
35
性別:
男性
誕生日:
1989/08/20
自己紹介:
基本的にテキトー
最新コメント
[10/01 くゆる]
[09/21 uguisu_an]
[09/17 mayigo]
[07/17 uguisu_an]
[07/15 shinh]
最新トラックバック
アクセス解析
フリーエリア
P R
忍者ブログ [PR]