image

Acesse bootcamps ilimitados e +650 cursos pra sempre

60
%OFF
Article image
Matheus Santos
Matheus Santos31/01/2024 13:08
Compartilhe
WEX - End to End EngineeringRecomendados para vocêWEX - End to End Engineering

Estou com erro ao entregar um desafio.

  • #JavaScript

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
Recomendados para você
GFT Start #6 - Lógica de Programação
Potência Tech iFood - Desenvolvimento de Jogos
Potência Tech iFood - Programação do Zero
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!

Recomendados para vocêWEX - End to End Engineering