Erro NaN e posição negativa (beecrowd 1180 Lowest Number and Position)
Boa noite pessoal, não estou conseguindo identificar onde está o problema que está fazendo com que a a variável "menor" esteja retornado = NaN e a variável posicao esteja retornado o número negativo -1
Julio @JulioIsso esta acontecendo porque esta pegando os números de uma forma que não é a correta. Nesse for da linha 13, tu esta acessando posições da variável lines que não existe, por isso está recebendo NaN.
A sua entrada é:
10 1 2 3 4 -5 6 7 8 9 10Logo, para receber os números corretamente deve-se fazer:
let N = parseInt(lines.shift()) let numeros = lines.shift().split(' ').map(num => parseInt(num))Agora o a variável N estará com a quantidade de números a ser comparada e a variável numeros é um array(ou vetor) com todos os números a serem testados.
Qualquer coisa, estou a disposição.- AAlan @alandias
Olá, Essas duas linhas que você sugeriu, é dentro do laço for? ou antes do laço?
O que significa esse "num" ?
preciso alterar algo mais na estrutura do meu código?let N = parseInt(lines.shift())
let numeros = lines.shift().split(' ').map(num => parseInt(num))
Julio @JulioTu pode remover da linha 9 a 17 e colocar esse pedaço de código que passei, e lembre-se de trocar na linha 18 e 19, arr por numeros.
Esse num é apenas uma variável qualquer.
O método( ou função) .map(), é um método de Arrays, em que ele percorre todo o array que o chama, e retorna um novo com base na informação que lhe foi fornecida. Nesse caso em especifico:let numeros = lines.shift().split(' ').map(num => parseInt(num))lines.shift()
------> Retorna uma string com os números a serem testados..split(' ')
------> O método .split(' ') separa a string que o chama onde encontrar um espaço, que é o argumento que estou passando(' '), e retorna um Array..map(num => parseInt(num))
------> O método .map() ele vasculha todo o Array que o chamou e retorna um novo Array com base no argumento que é passado. Nesse caso, eu especifico que para todo elemento(num) que ele encontrar no Array converta ele para inteiro.Essa linha de código poderia ser escrita dessa maneira:
let stringCompleta = lines.shift(); let arrayDeStringSemEspaco = stringCompleta.split(' '); let arrayDeNumeros = arrayDeStringSemEspaco.map(elemento => return parseInt(elemento));Acredito que tenha ficado um pouco confuso, porque o estou fazendo uso de uma funcionalidade que se chama callback, creio que iremos ver isso mais para frente com calma.
Um callback nada mais é que uma função que é passada como parâmetro para outra função. No JS vai ser comum o uso desse mecanismo e diversos métodos fazem uso dessa funcionalidade, principalmente os que lidam com Array. Como map, filter, forEach, some, reduce, entre outros.Pode parecer confuso, mas vai por mim, no começo todo mundo acha que é. Com o tempo tu vai perceber que não é nada de mais, é apenas um argumento qualquer que tu passa para uma função.
Espero que tenha esclarecido um pouco.
- AAlan @alandias
Olá, Bom dia !
Eu substitui o código da linha 9 a 17 como você sugeriu, mas continua retornando o mesmo erro.

Natália Stoll Nogueira @nataliastollTem que fazer o for para preencher seu array.
Uma forma de fazer é a seguinte:
- Crie um array que tenha o tamanho de n (o sistema te dá esse número):
\\ Pegar o número do tamanho do array var n = parseInt(lines.shift()); \\ Criar um array com o tamanho de n var vet = new Array(n);- Faça a entrada dos demais números que irão preencher seu array:
\\ Criar variável para pegar os demais números para preencher o array var ln = lines.shift().split(` `);- Faço um loop para preencher o array:
for (let i = 0; i <vet.length; i++) { vet[i] = parseInt(ln.shift()); }O restante vc fez certinho, se não me engano...
Que é pegar o menor valor e a posição.Testa e me fala.
E se não entendeu alguma coisa, manda aqui que explico melhor.
- AAlan @alandias
Olá, Natália, sua solução funcionou direitinho aqui, já estava com medo de ser reprovado depois de tantas tentativas, Muito Obrigado !!!!
Ainda tô apanhando com a forma de captura de entrada do Beecrowd, o primeiro código que mandei aqui, funciona sem problemas no navegador, e trás o resultado Correto, mas quando vou pra o Beecrowd me atrapalho todinho rsrsrsrs
Muito Obrigado mais uma vez.
Natália Stoll Nogueira @nataliastollÉ chatinho mesmo entender essas entradas né?
Fiz um resuminho pra me ajudar, mas mesmo assim, às vezes enrosco e erro nisso.
Mas que bom que deu certo!
No que eu puder ajudar, estou por aqui! #vamosJuntos!
- Em resposta aalandias⬆:
Julio @JulioDesculpe, mas se não funcionou não sei o que pode ser então. Mas o que eu fiz foi exatamente o que a solução da Natalia esta fazendo, só que em duas linhas. Pode ter algum problema de espaçamento no .split(' '), é apenas um espaço, pode ter digitado com dois, acredito. Enfim, fico feliz que a Natália pode lhe auxiliar.
- AAlan @alandias
Imagina amigo, Obrigado pela disposição em ajudar, mais um degrauzinho avançado, agora é só partir pra os próximos desafios. Obrigado !