Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   массив со случайными числами (https://javascript.ru/forum/misc/47757-massiv-so-sluchajjnymi-chislami.html)

Aetae 06.06.2014 15:58

рони, то же что у jsnb, только в профиль. Опять потенциально бесконечный цикл, при неудачном рандоме. И чем массив долинее тем шансы на это больше.

dwarf 07.06.2014 17:03

Aetae, а если так оформить рендом.... все равно может в бесконечность уйти ?
var random = Math.round(min - 0.5 + Math.random()*(max-min+1));

рони 07.06.2014 17:12

Aetae,
:)
<script language="JavaScript" type="text/javascript">
function random(val,min,max,l)
{var arr = [],m = [],n = void(0), len = max-min;
  l--;
  if (len < l) return;
  for (var i=0; i<= len; i++){
      m[i] = i + min;
      m[i] == val && (n = i);
  }
  n !=  void(0) &&  m.splice(n,1)
  for (var i=0; i<l; i++) {n = Math.floor(Math.random()*(m.length)); arr[i]=m.splice(n,1);};
  n = Math.floor(Math.random()*(arr.length));
  arr.splice(n,0,val)
  return arr
}
document.write(random(3,0,20,4))
</script>

источник )))

Aetae 07.06.2014 18:29

рони, вот, другое дело. Кончено при слишком большом диапазоне в памяти будет висеть гигантский массив, и я всё ещё считаю свой вариант лучше, но хоть так.)

рони 07.06.2014 21:42

Цитата:

Сообщение от Aetae
но суть должна быть понятна.

Цитата:

Сообщение от Aetae
for(index = j; index && resultSorted[index-1] <= random; index--) random++;

а что делает эта строка?

Aetae 07.06.2014 23:38

рони,
Пока есть среди уже подобранных(и отсортированных) числа меньше или равные числу сгенерированному на текущей итерации - инкрементируем оное.
Т.о. не допускается повторов, и при этом соблюдается нормальное распределение.

В моём коде две проблемы: наличие дублирующего, но отсортированного массива и использование условно-медленного splice.


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