Oie, boa tarde! Há algum tempo atrás, eu criei um código, só que estava dando muitos problemas, então decidi recriar do zero com outra lógica. O osrteio ficou bastante diferente do algoritmo do professor -- eu não utilizei o Fisher-Yates. A única parte é que ele não imprime os sorteados separados por linhas, mas fora isso, está quase completo:
let amigosIncluidos = [];
let campoAmigosIncluidos = document.getElementById ("lista-amigos");
let amigosSorteados = [];
let campoSorteados = document.getElementById ("lista-sorteio");
let campoNomeDigitado = document.getElementById ("nome-amigo");
function adicionar() {
let nomeDigitado = document.getElementById ("nome-amigo").value;
amigosIncluidos.push (` ${nomeDigitado}`);
campoAmigosIncluidos.textContent = amigosIncluidos;
campoNomeDigitado.value = "";
}
function sortear() {
amigosSorteados = [];
let numeroParticipantes = amigosIncluidos.length;
for (n = 0; n <= numeroParticipantes - 1; n++) {
let numeroSorteado = obterNumeroAleatorio (0, numeroParticipantes - 1);
if (amigosSorteados.includes (amigosIncluidos[numeroSorteado])) {
while (amigosSorteados.includes (amigosIncluidos[numeroSorteado])) {
numeroSorteado = obterNumeroAleatorio (0, numeroParticipantes - 1);
}
}
if (amigosIncluidos[n] == amigosIncluidos[numeroSorteado]) {
while (amigosIncluidos[n] == amigosIncluidos[numeroSorteado]) {
numeroSorteado = obterNumeroAleatorio (0, numeroParticipantes - 1);
}
}
amigosSorteados[n] = amigosIncluidos[numeroSorteado];
}
// Dessa parte para frente, o problema é que ele não separa por linhas as pessoas sorteadas. Não está errado, mas também não está 100% certo.
let listaFinal = [];
for (n = 0; n <= numeroParticipantes - 1; n++) {
listaFinal[n] = `${amigosIncluidos[n]} -> ${amigosSorteados[n]}`;
}
campoSorteados.textContent = listaFinal;
}
function reiniciar() {
campoAmigosIncluidos.textContent = "";
amigosIncluidos = [];
amigosSorteados = [];
campoSorteados.textContent = "";
listaFinal = [];
}
function obterNumeroAleatorio (min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}