image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image
Matheus Santos
Matheus Santos31/01/2024 13:08
Compartilhe

Estou com erro ao entregar um desafio.

    Estou recebendo esse erro ao tentar entregar um desafio, todos os testes passaram porém o teste fechado acusa este erro:

    components.Codex.editor.run_tests_msg

    A baixo o código em questão:

    image

    Compartilhe
    Comentários (6)
    Gustavo Silva
    Gustavo Silva - 31/01/2024 14:53

    iihuul!  🤙🏽🚀

    tmj

    Matheus Santos
    Matheus Santos - 31/01/2024 14:47

    Realmente não me atentei a procedência das operações, a sua solução Gustavo Silva resolveu o problema. Agradeço a ajuda, e também ao Rubens Filipe pela disponibilidade em ajudar. Obrigado pessoal!

    Gustavo Silva
    Gustavo Silva - 31/01/2024 14:36

    Cálculo do Índice do Mineral:

    
    let minaIndex = i - 1 % minerais.length; 
    

    Usa o operador % (módulo) para calcular o índice do mineral. No entanto, há um erro de precedência de operadores aqui, o que pode levar a resultados inesperados. Deveria ser (i - 1) % minerais.length para garantir que a subtração seja realizada antes do módulo.


    O operador % (módulo) tem uma precedência menor do que o operador de subtração -. Isso significa que, se não houver parênteses, a subtração será realizada antes do módulo. Então, a expressão original:

    
    let minaIndex = i - 1 % minerais.length; 
    

    É avaliada como i - (1 % minerais.length) em vez de (i - 1) % minerais.length.

    Vamos dar um exemplo para ilustrar a diferença. Suponha que i seja 5 e minerais.length seja 4. Com a expressão original:

    
    let minaIndex = 5 - 1 % 4; 
    

    O operador % tem uma precedência maior, então a subtração é realizada primeiro:

    
    let minaIndex = 5 - (1 % 4); 
    

    Neste caso, 1 % 4 é igual a 1, então a expressão é avaliada como:

    
    let minaIndex = 5 - 1; 
    

    O resultado final é 4.

    Se corrigirmos a precedência com parênteses:

    
    let minaIndex = (i - 1) % minerais.length; 
    

    Agora a subtração é realizada antes do módulo:

    
    let minaIndex = (5 - 1) % 4; 
    

    E o resultado final será 0, que é o comportamento desejado para calcular o índice do mineral no array.



    Apenas uma sugestão... se continuar dando erro fala aí


    Matheus Santos
    Matheus Santos - 31/01/2024 13:44

    Posso sim, segue a descrição e o código completo:


    Descrição

    Você é um mestre construtor em um mundo de blocos e tem a tarefa de gerar biomas em diferentes regiões do mundo. Cada bioma tem características únicas, como tipos de solo, vegetação e clima.

    Tarefa: Sua tarefa é coletar minérios enquanto ataca uma rocha com sua picareta. Use loops e lógica de programação para representar cada golpe na rocha e determinar qual minério foi obtido.

    Entrada

    O programa irá solicitar que você digite um número inteiro positivo representando a quantidade de golpes que você deseja dar com a picareta.

    Saída

    Para cada golpe que você der, o programa exibirá uma mensagem indicando o resultado do golpe. Será mostrado o número do golpe e o minério obtido, que pode ser 1: Carvao, 2: Ferro, 3: Diamante e 4: Pedra.


    Código completo:


    //Desafios JavaScript na DIO têm funções "gets" e "print" acessíveis globalmente:

    //- "gets" : lê UMA linha com dado(s) de entrada (inputs) do usuário;

    //- "print": imprime um texto de saída (output), pulando linha.


    // Lê a quantidade de golpes informada pelo usuário. 

    // O parseInt(()) vai converter os valores de entrada(string) para um valor numérico(Int).

    const quantidadeGolpes = parseInt(gets(5));


    //TODO: Defina aqui os tipos de minerais Carvao, Ferro, Diamante e Pedra

    let minerais = ["Carvao", "Ferro", "Diamante", "Pedra"];


    // Loop para cada golpe, de 1 até a quantidade informada

    for (let i = 1; i <= quantidadeGolpes; i++) {

     // Calcula o índice do mineral usando o operador de módulo (%) para garantir que o índice esteja dentro do tamanho do array

     let minaIndex = i - 1 % minerais.length;

      

     //TODO: Agora exiba o índice i, concatene com o caractere ":", após, concatene com tipo de minerais[minaIndex]:

     console.log(`${i}: ${minerais[minaIndex]}`);

    }

    Rubens Filipe
    Rubens Filipe - 31/01/2024 14:00

    Fala Matheus beleza, depois coloca o texto do desafio para que possamos entender e te ajudar tá certo.

    Quando estou fazendo os desafios da dio tento testar na minha maquina ai só para você entender no desafio tem 2 funções gets e a print que você pode criar da sua maneira. Tinha criado desta forma:

    /**
    A função gets() começa dividindo a entrada em linhas usando o método split('\n').
    Em seguida, a função verifica se a propriedade indiceAtual existe em gets. Se não existir, ela é definida como 0.
    A função então define a constante valorAtual como a linha atual da entrada, que é obtida usando a propriedade indiceAtual.
    A propriedade indiceAtual é incrementada em 1.
    A função retorna o valor atual.
    */
    function gets() {
      const lines = entrada.trim().split('\n');
      gets.indiceAtual = gets.indiceAtual || 0;
      const valorAtual = lines[gets.indiceAtual].trim();
      gets.indiceAtual++;
      return valorAtual;
    }
    
    //para o retorno
    function print(texto) {
      console.log(texto)
    }
    
    

    Ai para resolver este desafio, fiz isso:

    //A questão desta variavel é mais uma questão de teste poderia ser um outro valor
    let entrada = `
    5
    `
    function gets() {
      const lines = entrada.trim().split('\n');
      gets.indiceAtual = gets.indiceAtual || 0;
      const valorAtual = lines[gets.indiceAtual].trim();
      gets.indiceAtual++;
      return valorAtual;
    }
    
    
    function print(texto) {
      console.log(texto)
    }
    
    
    const quantidadeGolpes = parseInt(gets(5))
    let minerais  = ["Carvao", "Ferro","Diamante","Pedra"]
    
    
    for( let i = 1;i < quantidadeGolpes; i++){
      let minaIndex = i - 1 % minerais.length
      /**deixe deste jeito pois acontece do sistema não enteder ou dar algum tipo de erro
      mais você pode tentar do jeito que você fez anteriormente
       */
      print(i + ": " + minerais[minaIndex]) 
    }
    
    

    Tenta ai sem a variável de entrada, faz teus teste localmente, colocar o texto da pergunta depois aqui tá certo?!

    Gustavo Silva
    Gustavo Silva - 31/01/2024 13:16

    Poderia compartilhar a descrição do desafio e o código completo? Posso tentar ajudar. Valeu!