Показать сообщение отдельно
  #11 (permalink)  
Старый 26.03.2014, 14:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,127

Aetae,
это понятно - ещёб я знал как это правильно назвать
так пойдёт?
основное каждый следующий неповторит предыдущий - цепочка бесконечна - нет лишних генераций -- все значения выпадают равномерно .
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
</head>

<body>
<script>
function rund(len, min) {
        function shuffle(arr) {
            for (var i = len = arr.length, elem; elem = arr[--i];) {
                var num = Math.floor(Math.random() * len);
                    arr[i] = arr[num];
                    arr[num] = elem;
            }
            return arr
        } //функция для перемешивания массива
        var base = [], // основной массив
            temp = [], // запасной массив
            i ;
        for (i = 0; i < len; i++) base[i] = i + min; // формирование значений основного массива[1, 2, 3, 4, 5]
        shuffle(base); // первый раз перемешали основной массив [4, 3, 2, 1, 5]
        return function () {
            var elem = base.shift(); // берём первый элемент основного массива
            temp.push(elem); //добавляем в запасной
            1 == base.length && (shuffle(temp), base = base.concat(temp), temp = []);
            // если в основном остался 1 элемент, перемешиваем запасной и добавляем к основному, очищаем запасной 
            return elem 
        }
    };

 var len = 5,  // длина массива
     min = 1,  // значение 1 элемента массива
     z = rund(len,min),
     i;

 for (i = 0; i < 40; i++) {
     document.write(z()+' '); //для примера
 }
</script>

</body>
</html>

Последний раз редактировалось рони, 26.03.2014 в 14:27.
Ответить с цитированием