Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Модификация функции random (https://javascript.ru/forum/misc/62370-modifikaciya-funkcii-random.html)

UhWhat 07.04.2016 12:36

Модификация функции random
 
День добрый всем , подскажите пожалуйста в реализации логики а именно, модифицированной функции random:

Просто есть задача в случайном порядке попарно вывести числа N раз(расположение парных чисел тоже определяется случайным образом, они не следуют друг за другом), где при условии что N всегда чётное число .

И желательно что б функция за один вызов не возвращала массив чисел, а при каждом отдельном вызове возвращала одно число, как это делает функция random.

К примеру :

var n=8 // функция myRandom должна сгенерировать 4 случайные пары чисел
myRandom(n);

for(var i=0; i < n; i++){
alert(myRandom()); // Вывод будет к примеру 6,8,1,8,6,3,3,1
}



Заранее всем спасибо за то что уделили время на прочтение.

рони 07.04.2016 13:21

Цитата:

Сообщение от UhWhat
Вывод будет к примеру 6,8,1,8,6,3,3,1

а потом?

UhWhat 07.04.2016 13:30

А потом я буду использовать эти числа дальше в программе, мне просто необходимы числа удовлетворяющие этим требованиям как выше.

В целом мне необходимо вывести на экран попарные картинки, всё упёрлось щас в переписывании функции random с заданными , как выше. требованиями

рони 07.04.2016 13:42

UhWhat,
что будет если запустить в 9 раз?

рони 07.04.2016 13:42

UhWhat,
<script>
Array.prototype.shuffle = function(min,max) {
  min = min || 0;
  max = ++max || this.length;
  var len = max - min;
  max = len - this.length;
  this.length = len;
    for (var a = this.length-1; 0 <= a; a--) {
       if(a < max) {break}
        var b = Math.floor(Math.random() * a),
            c = void 0 === this[b] ? (b + min) : this[b];
            this[b] = void 0 === this[a] ? (a + min) : this[a];
            this[a] = c
    }
    this.reverse();
    this.length -= max;
    return this
};
function myRandom(n) {
    var arr = [],
        i = 0;
    return function() {
        if (i == arr.length) {
            i = 0;
            arr = Array(n / 2).shuffle(0, 9);
            arr = arr.concat(arr.slice()).shuffle()
        }
        var a = arr[i];
        i++;
        return a
    }
};
var s = myRandom(8);
for (var i=0; i<80; i++)  { document.write(s()+""); if(!((i+1) % 8) ) document.write("<br>")}

  </script>

UhWhat 07.04.2016 13:50

в условии чётко оговорено что функция будет запускаться строго чётное количество раз, ну а если не чётное то я думаю одно число будет непарным.

Ух, спасибо тебе большое Рони, буду изучать сейчас, тобой написанный код. Спасибо мужик !


Часовой пояс GMT +3, время: 12:19.