Алгоритм жеребьёвки
Задача написать генератор жеребьёвки для турниров. То есть надо сопоставить первые пары.
Алгоритм таков, что генерируем число от 1 до 16 и проверяем его в массиве arr. Если не найдено - запишем в исключающий массив arr и в массив первых команд в паре mas1. Аналогично и для вторых команд пары. и так прохожу 16 раз, пока не заполнятся все массивы mas1 mas2. В исключающий массив arr пишет всё подряд без разбора, хоть оно даже там и есть уже. Код:
<div class = "zad"> |
И в чем вопрос?
Надо отладить скрипт и исправить ошибки? Или же подсказать лучшее решение? Ну для начала скажу, что выбрать случайное число в диапазоне min - max нужно не так. Ваш алгоритм плохой, т.к. вероятность выпадения min или max в два раза меньше, чем других чисел. Вот, взгляните: var min = 1, max = 10, r, i, rCount = Array(max-min+1); for( i = 0; i < rCount.length; ++i ) rCount[i] = 0; for( i = 0; i < 100000; ++i ) { // считаем количество выпадений r = Math.round((Math.random() * (max - min) + min)); ++rCount[ r - min ]; } for( i = 0; i < rCount.length; ++i ) // считаем вероятности rCount[i] /= 100000; alert( rCount ); А вот если вместо Math.round((Math.random() * (max - min) + min)) ; написать Math.floor( Math.random() * (max-min+1) + min ) ; то шансы уровняются. |
Вот вам алгоритм:
var min = 1, max = 16, r, i, tmp, mas = Array(max-min+1); for( i = 0; i < mas.length; ++i ) // заполняем массив номерами команд mas[i] = i+min; for( i = 0; i < mas.length; ++i ) { // тасуем r = Math.floor( Math.random() * (max-min+1) ); tmp = mas[i]; mas[i] = mas[r]; mas[r] = tmp; } // Внимание, нет никакой защиты на случай, если количество команд нечетное. for( i = mas.length - 2; i >= 0; i -= 2 ) // группируем попарно mas.splice( i, 2, [ mas[i], mas[i+1] ] ); alert( mas.join( "\n" ) ); |
DJZT-а тебе для чего?
Просто,есть файл в excel,где есть календари на любое количество команд.Просто,вписываешь название команд и календарь готов.Или тебе другое нужно? |
Вариант...
var max = 16, arr = []; max++; while (--max) { var i = arr.length; var num = Math.floor(Math.random() * (++i)); arr.splice(num, 0, max); } alert(arr.join(",").match(/\d+,\d+/g).join("\n")) |
рони,
!!!!!!!!!!!!!!!!!!!!!!!!!!! Хотя...... |
Цитата:
|
Цитата:
var max = 16, arr = []; max++; while (--max) { var i = arr.length; var num = Math.floor(Math.random() * (i+/*!!!!!!!!*/1)); arr.splice(num, 0, max); } alert(arr.join(",").match(/\d+,\d+/g).join("\n")) |
Часовой пояс GMT +3, время: 20:45. |