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

在尝试使用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 = 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