gpt4 book ai didi

javascript - JS secret 圣诞老人算法

转载 作者:行者123 更新时间:2023-12-03 08:13:12 26 4
gpt4 key购买 nike

我想用 js 制作一个小脚本,其中包含一个用户列表,一个用户必须向另一个用户赠送礼物。

通过应用以下约束:

  1. 如果“a”是圣诞老人并向“c”送礼物,则反之亦然。所以“c”不可能是“a”的圣诞老人。

  2. 它必须同时适用于偶数和奇数用户。

您认为,尝试最小化比较次数(即加快脚本速度)的正确方法是什么。

我在想这样的事情开始,但后来我不知道如何继续:

let name = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];

let a = [...name];
let group1 = [];
let groupSanta = [];
let groupUser = [];

for (var i = 0; i < name.length / 2 - 1; i++) {
let santaClaus = a[Math.floor(Math.random() * a.length)];
a = a.filter(item => item !== santaClaus);
let user = a[Math.floor(Math.random() * a.length)];
a = a.filter(item => item !== user);
group1.push({ santaClaus, user });
}

console.log(a, group1);

最佳答案

您可以对数组进行随机排序,并将每个人分配给下一个人。然后将第一个人分配给数组中的最后一个

// Define names
const names = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];

// Function to shuffle array
const shuffle = (arr) => {
for (let i = arr.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[arr[i], arr[j]] = [arr[j], arr[i]];
}
return arr;
}

const randomNames = shuffle(names);

// Match each person with the next one, folding over at the end
const matches = randomNames.map((name, index) => {
return {
santa: name,
receiver: randomNames[index + 1] || randomNames[0],
}
});

console.log(matches);

关于javascript - JS secret 圣诞老人算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70262468/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com