当前位置: 首页 > 知识库问答 >
问题:

Js秘密圣诞老人算法

汝吕恭
2023-03-14

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

通过应用以下约束:

>

  • 如果“a”是圣诞老人,给“c”送礼物,那就不能反过来了。所以“c”不可能是“a”的圣诞老人。

    它必须同时处理偶数和奇数用户。

    在你看来,什么是正确的方法来尽量减少比较的数量,也就是说,加快脚本的速度。

    我本来想这样开始,但后来我不知道该怎么做:

    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);
  • 共有2个答案

    甘英光
    2023-03-14
    let players = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
    
    players = shuffleArray(players)
    
    // Now place the santas, players[0] is the santa of players[1], 1 of 2 ... n is santa of 0 ;)
    
    function shuffleArray(array) {
        let currentIndex = array.length, randomIndex
    
        while (currentIndex != 0) {
            randomIndex = Math.floor(Math.random() * currentIndex)
            currentIndex--
            [array[currentIndex], array[randomIndex]] = [array[randomIndex], array[currentIndex]]
        }
    
        return array
    }
    
    console.log(players)
    仰经武
    2023-03-14

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

    // 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);
     类似资料:
    • 我们被要求创建一个程序,可以用于游戏"秘密圣诞老人": 这是我开发的程序。到目前为止,如果我输入3个人(例如Bob、Ben、Bill),它将返回“Ben为Bill购买”,而没有人为Ben或Bob购买。我目前正试图让它输出“Bob为Ben买东西,Ben为Bill买东西,Bill为Bob买东西”,但到目前为止还没有成功。如果有人能给我一个提示/设置这个的基础,我将不胜感激。另外,如果我的代码中有任何错

    • 我正在做一个程序,它将模拟秘密圣诞老人的分类帽。我试图让程序有一个错误陷阱,以防止人们获得自己的名字,但我无法让程序在有人获得自己的名字时选择一个新的名字。我遇到的另一个问题是,程序一直过早退出。 这是我的代码:

    • 我决定制作一个程序,根据硬编码限制(例如,某人不能得到他的妻子)生成秘密圣诞老人配对。我的家人都很忙,所以很难组织每个人随机画帽子。 我的程序崩溃seldomly,因为不幸的随机配对使剩余的不合法(然而,我抓住他们在测试脚本部分)。把它想象成一个重新绘制的人。 然而,当我的程序成功时,我知道配对是正确的,而不必亲自查看它们,因为我的程序测试有效性。明天,我将不得不找到一种方法,使用配对从我的电子邮

    • 我想做一个秘密圣诞老人节目。理想情况下,程序应该要求至少三个名字,然后程序会询问是否有更多的名字。如果是,打开另一个文本字段并将其添加到名称列表中。如果没有,打破循环,创建一个单独的列表,其中包含名称,打乱第二个名称列表,并将它们与原始列表中的名称配对。 例如,如果John、Elliot、Sarah和Jenny输入了他们的名字,程序将他们的名字打乱,它应该输出这样的内容: 但我得到的是: 代码如下

    • 本文向大家介绍java 实现简单圣诞树的示例代码(圣诞节快乐),包括了java 实现简单圣诞树的示例代码(圣诞节快乐)的使用技巧和注意事项,需要的朋友参考一下 代码如下: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

    • 1)能不能帮我用蝴蝶结扎一下辫子呀?我想成为你的圣诞节礼物诶✨ 2)我是铃儿你是叮当~因为铃儿想叮当✨ 3)在等雪花圣诞树新年烟火和更好的我们✨ 4)世界上哪有圣诞老人,礼物都是来自爱你的人✨ 5)希望到圣诞节那天你能和我说Merry Christmas还有Merry me✨