1
resposta

Desenvolvido Amigo Secreto

// Adiciona um novo amigo à lista exibida na tela
function adicionar() {
    // Captura o valor digitado no campo de texto
    let nome = document.getElementById("nome-amigo").value;

    // Validação: impede a adição de nomes vazios ou apenas com espaços
    if (nome.trim() === "") {
        alert("Por favor, insira um nome válido.");
        return; // Interrompe a função se o nome for inválido
    }

    // Seleciona o elemento onde a lista de amigos será mostrada
    let lista = document.getElementById("lista-amigos");

    // Cria um novo item de lista (<li>) na memória do navegador
    let item = document.createElement("li");
    item.textContent = nome; // Define o texto do item como o nome digitado

    // Adiciona o novo item criado dentro da lista no HTML
    lista.appendChild(item);

    // Limpa o campo de entrada para o próximo nome
    document.getElementById("nome-amigo").value = "";
}

// Algoritmo de Fisher-Yates para embaralhar os nomes de forma aleatória
function embaralhar(lista) {
    for (let i = lista.length - 1; i > 0; i--) {
        // O i representa o "limite" atual de onde estamos sorteando.
        // Escolhe um índice aleatório entre 0 e i
        const j = Math.floor(Math.random() * (i + 1));
        // Troca os elementos de posição (destructuring assignment)
        // Esta linha é um "truque" moderno do JavaScript chamado Atribuição por Desestruturação.
        // como se estivéssemos a dizer ao computador: "Pega no que está na mão direita e põe na esquerda, e o que está na esquerda põe na direita", tudo ao mesmo tempo. 
        [lista[i], lista[j]] = [lista[j], lista[i]];
    }
}

// Realiza o sorteio circular entre todos os amigos da lista
function sortear() {
    // Obtém a lista de amigos atual do HTML
    let listaHTML = document.getElementById("lista-amigos");
    
    // Converte os elementos HTML em uma Array de textos (nomes) puro
    // O .map extrai apenas o conteúdo textual de cada <li>
    let amigos = Array.from(listaHTML.children).map(item => item.textContent);

    // Validação: o Amigo Secreto precisa de pelo menos 2 participantes
    if (amigos.length < 2) {
        alert("Adicione pelo menos dois amigos para sortear.");
        return;
    }

    // Embaralha a ordem dos nomes para garantir um sorteio aleatório
    embaralhar(amigos);

    // Seleciona o campo de resultado e limpa sorteios anteriores
    let resultado = document.getElementById("lista-sorteio");
    resultado.innerHTML = ""; 

    // Loop para percorrer a lista e formar os pares
    for (let i = 0; i < amigos.length; i++) {
        // Lógica Circular:
        // Se for o último nome da lista, ele tira o primeiro (amigos[0])
        // Caso contrário, ele tira o próximo nome da lista (amigos[i + 1])
        if (i === amigos.length - 1) {
            resultado.innerHTML += amigos[i] + " --> " + amigos[0] + "<br>";
        } else {
            resultado.innerHTML += amigos[i] + " --> " + amigos[i + 1] + "<br>";
        }
    }
}

// Limpa todos os dados da tela para começar um novo jogo
function reiniciar() {
    document.getElementById("lista-amigos").innerHTML = "";
    document.getElementById("lista-sorteio").innerHTML = "";
}
1 resposta

Olá, Lucas! Tudo bem?

Meus parabéns pela conclusão do projeto e por compartilhar a sua solução com a comunidade! Seu código ficou excelente, muito bem estruturado e com uma lógica impecável.

O seu projeto está pronto e funcional!

Bons estudos!

Sucesso

Imagem da comunidade