У меня есть список, содержащий 100 «друзей». Отчасти это выглядит так:
Tetris.friends =
[
{
name: "Haroon Bean",
file_name: "haroon_bean"
},
{
name: "Nathan Cain",
file_name: "nathan_cain"
},
{
name: "Ashley Burns",
file_name: "ashley_burns"
},
{
name: "Dennis Clay",
file_name: "dennis_clay"
},
У меня также есть список из 16 «сил». Отчасти это выглядит так:
Tetris.friend_powers =
[
{
name: "speed_2",
description: "Speed * 2"
},
{
name: "speed_3",
description: "Speed * 3"
},
{
name: "speed_4",
description: "Speed * 4"
},
Что я хочу сделать, так это чтобы каждое имя всегда возвращало одну и ту же силу, даже если порядок списка друзей изменился. Таким образом, я могу гарантировать, что каждый друг всегда будет возвращать одно и то же, даже если по какой-то причине список меняется по соображениям согласованности.
Итак, что я сейчас делаю, так это:
let n = Tetris.get_random_int
(
{
min: 0,
max: Tetris.friends.length - 1,
seed: Tetris.random_3
}
)
let friend = Tetris.friends[n]
...
let name = friend.file_name
let seed = new Math.seedrandom(name)
let n = Tetris.get_random_int
(
{
min: 0,
max: Tetris.friend_powers.length - 1,
seed: seed
}
)
let power = Tetris.friend_powers[n]
Так что в основном я сначала получаю друга с глобальным начальным числом, затем создаю начальное число на основе имени и использую его для получения индекса списка случайных полномочий.
Это работает. Проблема в том, что когда я запускаю тест со всеми списками друзей, это дистрибутив:
score_2: 7
score_2_d: 4
score_3: 3
score_3_d: 4
score_4: 5
score_4_d: 1
score_5: 6
score_5_d: 7
speed_2: 9
speed_2_d: 5
speed_3: 15
speed_3_d: 3
speed_4: 8
speed_4_d: 9
speed_5: 4
speed_5_d: 10
Как видите, вероятность не равна или близка для каждой степени.
Поэтому мой вопрос: как я могу распределить вероятность более равномерно, но при этом, если имя друга всегда будет возвращать одну и ту же способность, независимо от ее индекса, возможно ли это? В противном случае я мог бы просто использовать некоторые основанные на индексе условия и попытаться не изменять порядок списка.