Я борюсь с (возможно, простым) алгоритмом перетасовки и генерации массива.Упорядочить массив определенным образом (элементы колеса рулетки)
Я создаю простой бэкэнд (PHP/MySQL) для игры в рулетку (JS/HTML). Рулетка не имеет числовых значений, как обычно, вместо этого есть четыре приза, которые пользователь может выиграть, распределенные в 12 сегментах рулетки.
мне нужен массив так:
// Note that PRIZE4 is listed only once as it is valuable prize.
// PRIZE3 is less valuable so it is listed twice, etc.
// Prizes are skipping each other so you should never see two identic prizes next each other.
var items = [PRIZE1, PRIZE2, PRIZE1, PRIZE2, PRIZE1, PRIZE2, PRIZE1, PRIZE2, PRIZE1, PRIZE3, PRIZE4, PRIZE3];
И у меня есть призы в таблице SQL, как это:
+----+------------+--------------+
| id | name | giveaway_cap |
+----+------------+--------------+
| 1 | PRIZE1 | 255 |
| 2 | PRIZE2 | 300 |
| 3 | PRIZE3 | 30 |
| 4 | PRIZE4 | 15 |
+----+------------+--------------+
4 rows in set (0.00 sec)
Колонка giveaway_cap
определяет, как многие из каждого приза можно выиграть (Я храню эти счета в другой таблице), но может использоваться как вес каждого приза.
Мне нужен алгоритм (желательно PHP), который будет генерировать массив, как описано выше на основе этой таблицы.
Спасибо.
Если «giveaway_cap» из 3 призов очень низок, а 1 приза очень высок, невозможно создать массив, где не две одинаковые цены находятся рядом друг с другом. – pbaldauf
Псевдокод: for (array_length) {rand между 1 и 3; if (так же, как и раньше) rand (между оставленными значениями)} – Comum
Поскольку @Comum предлагает использовать случайную функцию. Выделяется ли значение между 0 и 1 ценой 1. Между 1 и 2 = цена 2. Между 2 и 2.5 цена 3. Между 2.5 и 2.95 цена 3. Между 2.95 и 3 цена 4 .... – pbaldauf