Rubyの勉強してます。
会社で昼休みに昼飯を選ぶアプリを作っているのですが、
DBから取得した昼飯リストの中から、なんかいい方法で
選択できないかなー? と情報を漁っていると
弾さんのブログで良い情報があったので、Rubyで書いてみました。
make_random_picker.rb
#! ruby
class DUP
def initialize(name, age)
@name = name
@age = age
end
attr_accessor :name,:age
end
def make_random_picker(dup)
dup.sort{|a,b| a.age <=> b.age}
age_sum = 0
dup.each do |d|
age_sum += d.age
end
dup.each do |d|
d.age /= age_sum
end
r = rand()
sum = 0
dup.each do |d|
sum += d.age
return d if r < sum
end
return dup[dup.length - 1]
end
20.times do
p make_random_picker([DUP.new("digiko", 10.0),
DUP.new("usada", 14.0),
DUP.new("puchiko", 5.0),
DUP.new("piyoko", 7.0),
DUP.new("rinna", 10.0),
DUP.new("mike", 10.0)]).name
end
実行結果は
$ ruby weight_random.rb | sort | uniq -c | sort -r
とかで計測します。とりあえず、1000回回すと
result.sh
274 "usada"
179 "digiko"
171 "rinna"
171 "mike"
130 "piyoko"
75 "puchiko"
となったので、まあ悪くない結果だと思います。
しかし、一番結果の上位に出てくるのがうさだとは、どういうことにょ!?
目からビィーーーーム!!