根据结果​​预测中奖号码?

时间:2015-04-06 14:22:04

标签: ruby

我希望根据我在CSV上的最新彩票结果生成最可能的数字。

我有这个脚本:

h = Hash.new
f = File.open('numbers.csv', "r")
f.each_line { |line|
  numbers = line.split
  numbers.each { |w|
    if h.has_key?(w)
      h[w] = h[w] + 1
    else
      h[w] = 1
    end
  }
}

# sorteamos el hash por valor, y lo pintamos según la concurrencia
h.sort{|a,b| a[1]<=>b[1]}.each { |elem|
  puts "\"#{elem[0]}\" tiene #{elem[1]} concurrencia"
}

这将告诉我哪些数字具有最多的数字。 我想&#34;样品&#34;取决于最有可能的这些结果的数字。

我怎样才能做到这一点?谢谢!

1 个答案:

答案 0 :(得分:2)

我不认为Ruby有一种内置的优雅方式。您可以将散列视为一堆二进制数,其中每个数字的出现次数是二进制文件大小。然后,您可以计算总仓宽,获取随机样本,并迭代以找出样本所在的仓。

def weighted_sample h
  weight = h.values.reduce(:+)
  sample = rand weight
  h.each do |n, w|
    return n if sample < w
    sample -= w
  end
end

Array.new(10) { weighted_sample({1 => 8, 2 => 4, 3 => 2}) }
# [2, 2, 1, 1, 1, 3, 1, 1, 1, 1]

提示:有更好的方法来构建该哈希值

h = Hash.new 0
# ...
h[w] += 1