Генерирует случайное число до п-1 и добавить его, по модулю исходный диапазон (сдвиг, поскольку мин не 0):
i = some random int from 2 to 5
delta = randInt(3) // range of possible values from 2 to 5 is 4, minus 1 to
// prevent getting all the way round to i again
nextval = (i-2+delta)%4+2 // shift i down by the minimum, add the
// delta and modulo the range
Это работает, потому что он добавляет до 1 ниже диапазона , поэтому он никогда не сможет вернуться к исходному номеру. Например, i = 3, случайный int 0 до 2, поэтому max равен (i-2 + 2)% 3 + 2 = 3% 3 + 2 = 0 + 2 = 2.
function differentRandInt(min,max,current) {
var shiftedcurrent = current-min;
var range = max-min+1;
var delta = Math.floor((Math.random()*(range-1))+1);
return (shiftedcurrent + delta)%range + min;
}
Так что, если я = 3, то я-мин равен 1, диапазон после добавления дельты является 2,3,4, по модулю 4 с получением 2,3,0, так что добавление минимальный дают нам 4, 5,2.
«Я не хочу, два 3-х подряд , или два 5 в ряд ». - тогда это не было бы случайным :) – jbabey
Так что вы хотите получить случайное число из списка номеров и удалить этот номер из списка после его появления? – andlrc
jbabey: Это не будет равномерно распределенное, некоррелированное случайное число, но оно все еще стохастично. –