2015-10-18 32 views
2

随机数我想要生成的随机数withing一个范围,但也对必须不包含在对数组我有,所以你基本上可以认为任务作为产生随机配对例外。我知道你可以用loop做到这一点,但我被告知只有一个级别的缩进是可能的。我一直在寻找类似的东西,到目前为止没有结果。你的帮助将非常有用,欢呼。生成例外

+0

有多大范围?根据可能的组合,一个简单的解决方案可能是生成所有可能的配对,然后使用Array#sample从中随机选取一个。接下来,您可以删除该对,以免再次提取。 –

+0

你是否在绘制每对的元素,是否带有替换?例如,你可以随机选择'[5,5]'(带替换)吗?如果你已经绘制了[4,5],那么'[3,5]'是否是一个有效的绘制?最后,为什么急于选择答案? –

+0

范围会相对较小,最多20个20.是的,这将是一个有效的平局。我很快就选择了一个随机答案,因为我有一个截止日期,并且他已经达到了。 – Robert

回答

3

非常低效的,但表现力和短:

range = (1..3).to_a 
undesired_pairs = [[1, 1], [2, 2], [3, 3]] 
(range.product(range) - undesired_pairs).sample # => [1, 3] 
0

另一种解决方案:创建一个随机对,直到你有一个结果,那就是不undesired_pa​​irs:

undesired_pairs = [[1, 1], [2, 2], [3, 3]] 
until ! undesired_pairs.include?(hit =[rand(3)+1,rand(3)+1]) 
end 
p hit