Лучшее распределение семян по случайному принципу между 2 списками - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть список, содержащий 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

Как видите, вероятность не равна или близка для каждой степени. Поэтому мой вопрос: как я могу распределить вероятность более равномерно, но при этом, если имя друга всегда будет возвращать одну и ту же способность, независимо от ее индекса, возможно ли это? В противном случае я мог бы просто использовать некоторые основанные на индексе условия и попытаться не изменять порядок списка.

1 Ответ

0 голосов
/ 10 апреля 2019

Как предлагается в комментариях, я просто собираюсь жестко закодировать силу для каждого друга.

{
    name: "Robin Camacho",
    file_name: "robin_camacho",
    power: "score_5_d"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...