在2个列表之间更好地分配种子随机性

问题描述 投票:0回答:1

我有一个包含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

正如您所看到的,每个功率之间的概率不相等或接近。所以我的问题是,我怎样才能更均匀地分配概率,但仍然知道朋友的名字将始终返回相同的能力,无论其索引如何,甚至可能?如果不是,我可以使用一些基于索引的条件并尝试不更改列表的顺序。

javascript random probability random-seed
1个回答
0
投票

正如评论中所建议的那样,我只是要给每个朋友硬编码。

{
    name: "Robin Camacho",
    file_name: "robin_camacho",
    power: "score_5_d"
}
© www.soinside.com 2019 - 2024. All rights reserved.