Ruby 生成不同的随机数组合
在尝试使用Ruby并查看它能做什么的同时,我编写了这个程序来生成假彩票号码 我正在尝试生成所有可能的组合,但它似乎不起作用,你能看到我哪里出错了吗Ruby 生成不同的随机数组合,ruby,Ruby,在尝试使用Ruby并查看它能做什么的同时,我编写了这个程序来生成假彩票号码 我正在尝试生成所有可能的组合,但它似乎不起作用,你能看到我哪里出错了吗 lotto = [rand(1...50), rand(1...50), rand(1...50), rand(1...50), rand(1...50), rand(1...50)].uniq lotto_results = lotto.combination(6).cycle.to_a puts "----START----" count
lotto = [rand(1...50), rand(1...50), rand(1...50), rand(1...50), rand(1...50), rand(1...50)].uniq
lotto_results = lotto.combination(6).cycle.to_a
puts "----START----"
count = 0
lotto_results.each do |x|
count += 1
puts "Comination #{count}: #{x}"
puts "-------------"
end
puts "----FINISH----"
请尝试以下方法:
lotto = (1..50).to_a.shuffle[0..5]
附录
正如马克·安德烈·拉福琼所指出的
(1..50).to_a.sample(6)
更好。如果要打印所有可能的组合,只需执行以下操作:
(1..50).to_a.combination(6).each_with_index do |c, idx|
puts "combination #{idx}: #{c}"
end
有什么不起作用?您是否收到错误消息?输出不正确(意外)?不,他没有中彩票!当它循环时,它只返回在第一次调用中从数组=>lotto生成的相同数字,而不是每次重新生成它们。假设
lotto=[rand(1…5),rand(1…5),rand(1…5)]
。我得到了lotto
,所以lotto.composition(2)。to a
与[2,3,2]相同。composition(2)。to a
[[2,3],[2,2],[3,2]。看到问题了吗?当所有组合都被输出时,我怎么能用它来停止?这不太正确b/c结果“loto”数最多只能有一个给定的数。@Alex.Bullard这就是洗牌的结果。数字1-50按随机顺序排列,取前6个。这在很大程度上保证了唯一性。但这永远不会产生有效的loto编号[1,1,1,1,1]
,我敢打赌OP根本不知道会有多少。这仍然是一个很好的编程练习;只是不要把它们全部打印出来。
lotto = (1..50).to_a[0..50].combination(5)
count = 0
lotto.each do |x|
count += 1
puts "Combination #{count}: #{x}"
end