2012年4月19日木曜日

Rubyをはじめました(2)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
与えられた配列の奇数番目の要素の合計を求めるメソッドf(xs)の実装
f([0, 1, 2, 3, 4]) = 1 + 3 = 4
f(['a', 'b', 'c', 'd', 'e']) = 'b' + 'd' = 'bd'
Enumeratorを読みながら irbで試行錯誤しながらたどり着いた答え。
[0, 1, 2, 3, 4].each_with_index.select{|v, k| k.odd?}.map{|v,k| v}.inject{|x, y| x+y}
これの「Ruby の Enumerable モジュールにはたくさんのメソッドが定義されている」も参考になる。
リストが空のとき困るpythonはポテト言語。reduceとかmapとかは飾りです。書ける人にそれがわからんのです。
他の解法
xs.drop(1).each_slice(2).map(&:first).inject :+

twitterで同じような問題をやっている人がいた。
問題:乱数で生成した0~9の文字をカウントせよ。
100.times.map{rand(10)}.group_by { |i| i%10}.map {|k, v| [k, v.length]}.sort 
100.times.map{rand(10)}.inject(Hash.new(0)) {|h, r| h[r] += 1; h }

0 件のコメント: