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:
Acesse bootcamps ilimitados e +650 cursos pra sempre
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:
iihuul! 🤙🏽🚀
tmj
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!
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í
Posso sim, segue a descrição e o código completo:
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.
O programa irá solicitar que você digite um número inteiro positivo representando a quantidade de golpes que você deseja dar com a picareta.
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]}`);
}
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?!
Poderia compartilhar a descrição do desafio e o código completo? Posso tentar ajudar. Valeu!