Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

150
Vistas
Algoritmo de santa claus secreto de js

Quería hacer un pequeño script en js que tenga una lista de usuarios, un usuario tiene que hacer un regalo a otro.

Aplicando las siguientes restricciones:

  1. Si "a" es el papa noel y le da un regalo a "c" no puede ser al revés. Entonces "c" no puede ser el Papá Noel de "a".

  2. Debe funcionar con un número par e impar de usuarios.

En su opinión, ¿cuál podría ser el enfoque correcto para intentar minimizar el número de comparaciones, es decir, acelerar el script?

Estaba pensando en algo como esto para empezar, pero después no estoy seguro de cómo proceder:

 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);

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Puede ordenar aleatoriamente la matriz y asignar a cada persona a la siguiente. Luego asigne la primera persona a la última en la matriz

 // 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);

about 4 years ago · Juan Pablo Isaza Denunciar

0

 let players = ['a', 'b', 'c', 'd', 'e', 'f', 'g']; players = shuffleArray(players) const matches = players.map((name, index) => { return { santa: name, receiver: players[index + 1] || players[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(matches)

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda