Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Resolução de Atividades - "05 Faça como eu fiz: lógica para embaralhar a lista de amigos"

Então. Eu não sei como fazer esse código. Eu estava fazendo de um jeito, porém não deu certo, então eu fui tentar usar o código que o professor mandou e ficou essa bagunça kkkk. Conseguem me ajudar?

let listaAmigos = [];
let listaAmigosSorteados = [];
let contador = 0;

function adicionar() {

    let campoNomeAmigo = document.getElementById ("nome-amigo");
    let nomeAmigo = document.getElementById ("nome-amigo").value;
    listaAmigos.push (` ${nomeAmigo}`);
    
    let listaIncluidos = document.getElementById ("lista-amigos");
    listaIncluidos.textContent = listaAmigos;
    campoNomeAmigo.value = "";
    contador++;

}

function sortear() {

    embaralhar (listaAmigos);
    alert (embaralhar (listaAmigos));
    // let numeroSorteado1 = obterNumeroAleatorio (0, listaAmigos.length - 1);
    // let numeroSorteado2 = obterNumeroAleatorio (0, listaAmigos.length - 1);
    // let amigoSorteado = listaAmigos [numeroSorteado1];
    // let amigoSorteadoPresente = listaAmigos [numeroSorteado2];

    // if (listaAmigosSorteados.includes (amigoSorteado)) {

    //     if (contador == 0) {
            
    //         return;
    //     }

    //     else {

    //         sortear();
    //     }
    // }

    // else {
        
    //     listaAmigosSorteados.push (`${amigoSorteado}`);
    //     let campoSorteados = document.getElementById ("lista-sorteio");
    //     campoSorteados.textContent = `${amigoSorteado} -> ${amigoSorteadoPresente}`;
    //     i--;
    // }
}

// function obterNumeroAleatorio (min, max) {

//     return Math.floor(Math.random() * (max - min + 1)) + min;
// }


function embaralhar(lista) {
    for (let indice = lista.length; indice; indice--) {
        const indiceAleatorio = Math.floor(Math.random() * indice);
        [lista[indice - 1], lista[indiceAleatorio]] = [lista[indiceAleatorio], lista[indice - 1]];
    }
}
2 respostas
solução!

Olá, Victor. Tudo bem?

Primeiro, percebi que você está chamando a função embaralhar duas vezes na função sortear. Isso pode estar causando confusão, pois você só precisa embaralhar a lista uma vez. Além disso, o alert está chamando a função embaralhar novamente, o que não é necessário. Vamos corrigir isso:

function sortear() {
    embaralhar(listaAmigos);
    alert(listaAmigos.join(', ')); // Exibe a lista embaralhada
}

Agora, sobre o sorteio dos amigos, você já tem a função embaralhar funcionando corretamente. Se o seu objetivo é apenas embaralhar a lista e mostrar o resultado, o código acima já resolve isso. No entanto, se você deseja sortear pares de amigos, você pode descomentar e ajustar a parte do código que estava comentada, mas para isso, é importante garantir que os amigos sorteados não sejam repetidos.

Aqui está um exemplo de como você poderia fazer isso:

function sortear() {
    embaralhar(listaAmigos);
    
    if (listaAmigos.length < 2) {
        alert("Você precisa de pelo menos dois amigos na lista para sortear.");
        return;
    }

    let resultado = '';
    for (let i = 0; i < listaAmigos.length; i += 2) {
        if (i + 1 < listaAmigos.length) {
            resultado += `${listaAmigos[i]} -> ${listaAmigos[i + 1]}\n`;
        } else {
            resultado += `${listaAmigos[i]} não tem par\n`;
        }
    }
    
    alert(resultado);
}

Esse código embaralha a lista e depois forma pares de amigos. Se houver um número ímpar de amigos, o último ficará sem par.

Espero ter entendido e consegiudo ajudar. Qualquer dúvida manda aqui.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!

Obrigado por responder. Eu sei que faz 1 mês, a correria do dia a dia não tá ajudando muito kkk. Mas obrigade pelas dicas. Estou pensando em refazer o código. Vamos ver o que vai dar. então você vai me ver de novo aqui no fórum kkkk