Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Amigo Secreto

Eu ainda não assisti a resolução da aula mas o meu código ficou assim

/Primeiro precisamos fazer a função adicionar, onde adicionamos os nomes a uma lista

//Botão reiniciar que reseta tudo ao ser clicado 
let listaDeNomes = []

function adicionar(){
    let nomeDeAmigo = document.getElementById("nome-amigo").value;

    if (nomeDeAmigo == "") {
        alert("Digite um nome antes de adicionar.");
        return;
    }

    listaDeNomes.push(nomeDeAmigo);

    document.getElementById("lista-amigos").textContent = listaDeNomes.join(", ");
    document.getElementById("nome-amigo").value = "";
}

// Busquei na documentação como embaralhar uma lista 
function embaralhar(array) {
  let indiceAtual = array.length;

  while (indiceAtual !== 0) {
   
    let indiceAleatorio = Math.floor(Math.random() * indiceAtual);
    indiceAtual--;

    // Troca o elemento atual com o elemento aleatório
    [array[indiceAtual], array[indiceAleatorio]] = [
      array[indiceAleatorio], array[indiceAtual]
    ];
  }
  return array;
}

//Segundo passo é a função sortear juntando cada nome da lista com outro nome de forma aleatória porém sem repetir

function sortear(){

     if (listaDeNomes.length < 2) {
        alert("Adicione pelo menos 2 participantes para realizar o sorteio.");
        return;
    }

    let listaSorteada = [...listaDeNomes];

    do {
        embaralhar(listaSorteada);
    } while (
        listaDeNomes.some((nome, indice) => nome === listaSorteada[indice])
    );

    document.getElementById("lista-sorteio").innerHTML = "";

for (let i = 0; i < listaDeNomes.length; i++) {
    document.getElementById("lista-sorteio").innerHTML += 
        `${listaDeNomes[i]} tirou ${listaSorteada[i]}<br>`;
}

}
//Criar a função reiniciar para zerar todos os campos
function reiniciar() {
     document.getElementById("nome-amigo").value = "";
     listaDeNomes = []
     document.getElementById("lista-amigos").textContent = "";
     document.getElementById("lista-sorteio").innerHTML = ""
}
1 resposta

Olá Stella!
Ficou ótimo, ainda mais para uma solução criada antes de ver a resposta da aula. Dois pontos se destacam: o uso do algoritmo de Fisher-Yates para embaralhar, que você buscou na documentação e é a solução realmente correta, em vez de um Math.random() simples; e o do...while garantindo que ninguém tire a si mesmo, cobrindo um edge case que muitos esquecem. Vale notar que, em listas muito pequenas (como 2 pessoas), o do...while pode precisar de várias tentativas até encontrar uma combinação válida, improvável travar, mas é um detalhe que pode surgir em entrevistas técnicas. No mais, o código está limpo, bem comentado e com ótima separação de responsabilidades entre as três funções.

Continua postando no forum e assim que puder, assista a aula pra complementar! Parabens pelo esforço, bons estudos!