Rubyの勉強してます。
会社で昼休みに昼飯を選ぶアプリを作っているのですが、
DBから取得した昼飯リストの中から、なんかいい方法で
選択できないかなー? と情報を漁っていると
DBから取得した昼飯リストの中から、なんかいい方法で
選択できないかなー? と情報を漁っていると
弾さんのブログで良い情報があったので、Rubyで書いてみました。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! 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回回すと
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
274 "usada" | |
179 "digiko" | |
171 "rinna" | |
171 "mike" | |
130 "piyoko" | |
75 "puchiko" |
となったので、まあ悪くない結果だと思います。
しかし、一番結果の上位に出てくるのがうさだとは、どういうことにょ!?
目からビィーーーーム!!
0 件のコメント:
コメントを投稿