2
respostas

Exercício de Lógica

Encontrei esse problema na internet mas estou com algumas dificuldades para fazer a repetição dos números sem os que já foram mortos (em JavaScript), alguém tem ideia de uma forma de escrever o código que se pede? Segue abaixo...

  • O historiador Flavius Josephus relata como, no conflito Romano-Judaico em 67 D.C., os romanos tomaram a cidade de Jotapata, onde ele era comandante. Após ter escapado de Jotapata, Josephus encontrou-se preso em uma caverna com mais 40 companheiros. Os romanos descobriram o esconderijo e fizeram um convite para que ele se rendesse, mas seus companheiros se recusaram a permitir que ele fizesse isso. Ele então sugeriu que fizessem uma espécie de suicídio coletivo, onde um por um, todos seriam mortos, em uma ordem a ser definida pelo grupo e um seria morto pelo outro. Todos ficaram em círculo e virados para o centro. Começando em um determinado ponto, em sentido horário, cada terceira pessoa seria morta. O único sobrevivente foi Josephus, que se rendeu aos romanos. Isso nos leva a questão: Josephus já sabia exatamente onde ficar para que fosse o único sobrevivente?

Para se preparar para uma situação como essa, escreva um programa que determine qual posição você deve ficar no círculo para poder sobreviver. Você deverá informar a quantidade de pessoas no círculo (n > 0), a posição da pessoa que irá começar o suicídio (1 <= i <= n) e o "passo", isto é, de quantas em quantas pessoas, uma deverá ser morta (k > 0).

· n > 0 pessoas são organizada em um círculo, viradas para o centro e numeradas de 1 a n em sentido horário;

· Iniciando na pessoa i, conta-se no sentido horário, até que se chegue na pessoa de valor k (k > 0), que é morta imediatamente;

· Continuamos a contar k pessoas no sentido horário, a partir da pessoa a esquerda da que foi morta; Esse processo é repetido indefinidamente, até que apenas uma pessoa seja a sobrevivente.

2 respostas

Oi Alvaro tudo bem?

Gostei desse exercício de lógica.

Me propus a resolver também. Porém estou indo por outra abordagem. Dá uma olhadinha de como estou indo. Não está pronto ainda.

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>DeathCircle</title>
</head>
<script>

    function randomVogal() {

        let vogais = "AEIOU";
        return vogais[Math.round(Math.random() * (vogais.length - 1))];


    }

    function randomConsoantes() {

        let vogais = "BCDFGHJKLMNPQRSTVXYZ";
        return vogais[Math.round(Math.random() * (vogais.length - 1))];


    }
    function createRandomName() {
        return randomConsoantes()+randomVogal()+randomConsoantes()+randomVogal()+randomConsoantes()+randomVogal()+" "+randomConsoantes()+randomVogal()+randomConsoantes()+randomVogal()
    }


    function createPerson(){
        pessoa=document.createElement("p");
        pessoa.innerText=createRandomName();
        document.body.appendChild(pessoa);
    }

    function criarCirculo(quantidadeDePessoas){
        for (let i=1; i<=quantidadeDePessoas;i++){
            createPerson();
        }
    }

    function morte(numeroDaPessoa){
        pessoas=document.getElementsByTagName("p");
        pessoas[numeroDaPessoa].outerHTML="";
    }




</script>

<body>
    <input id="numeroCriados" number min="1" step="1" style="width: 300px" placeholder="Digite aqui o número de pessoas para serem criadas">
    <button onclick="criarCirculo(document.getElementById('numeroCriados').value);">Criar</button>
    <input id="numeroMorte" number min="1" step="1" style="width: 300px" placeholder="Digite aqui o número da pessoa a ser morta">
    <button onclick="morte(document.getElementById('numeroMorte').value);">Matar</button>
</body>

</html>

Hoje cheguei até aqui. To ajustando ainda a função de iterar.

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>DeathCircle</title>
</head>
<script>

    function randomVogal() {

        let vogais = "AEIOU";
        return vogais[Math.round(Math.random() * (vogais.length - 1))];


    }

    function randomConsoantes() {

        let vogais = "BCDFGHJKLMNPQRSTVXYZ";
        return vogais[Math.round(Math.random() * (vogais.length - 1))];


    }
    function createRandomName() {
        return randomConsoantes()+randomVogal()+randomConsoantes()+randomVogal()+randomConsoantes()+randomVogal()+" "+randomConsoantes()+randomVogal()+randomConsoantes()+randomVogal()
    }

    function createPerson(){
        pessoa=document.createElement("p");
        pessoas=document.getElementsByTagName("p");
        pessoa.innerText=pessoas.length;
        document.body.appendChild(pessoa);
    }

    function criarCirculo(quantidadeDePessoas){
        for (let i=1; i<=quantidadeDePessoas;i++){
            createPerson();
        }
    }

    function morte(numeroDaPessoa){
        pessoas=document.getElementsByTagName("p");
        pessoas[numeroDaPessoa].outerHTML="";
    }

    function interacaoJogo(){
        proximaMorte=document.getElementById("proximaMorte").innerText*1;
        passoDaMorte=document.getElementById("numeroPassoDaMorte").value*1;
        posicaoInicial=document.getElementById("numeroPosicaoInicial").value*1;

        if (proximaMorte.length==undefined){
            morte(posicaoInicial);
            document.getElementById("turno").innerText= document.getElementById("turno").innerText*1+1;
            document.getElementById("proximaMorte").innerText=posicaoInicial+passoDaMorte-1;
        } else {
            morte(proximaMorte);
            document.getElementById("turno").innerText= document.getElementById("turno").innerText*1+1;
            document.getElementById("proximaMorte").innerText=proximaMorte-1+passoDaMorte;
            while ( document.getElementById("proximaMorte").innerText*1>=document.getElementsByTagName("p").length-1){
                document.getElementById("proximaMorte").innerText=document.getElementById("proximaMorte").innerText*1-document.getElementsByTagName("p").length;
            }
        }
    }




</script>

<body>
    <input id="numeroCriados" number min="1" step="1" style="width: 300px" placeholder="Digite aqui o número de pessoas para serem criadas">
    <button onclick="criarCirculo(document.getElementById('numeroCriados').value);">Criar</button>
    <input id="numeroMorte" number min="0" step="1" style="width: 300px" placeholder="Digite aqui o número da pessoa a ser morta">
    <button onclick="morte(document.getElementById('numeroMorte').value);">Matar</button>
    <br>
    <input id="numeroPosicaoInicial" number min="0" step="1" style="width: 300px" placeholder="Digite aqui a primeira pessoa a ser morta">

    <input id="numeroPassoDaMorte" number min="1" step="1" style="width: 300px" placeholder="Digite aqui o passo da pessoa a ser morta">
    <button onclick="interacaoJogo();">Iterar</button>
    <br>
    <span>Turno:</span>
    <span id="turno">0</span>
    <br>
    <span>Número próxima pessoa a morrer:</span>
    <span id="proximaMorte"></span>
</body>

</html>