Olá pessoal, alguém pode me ajudar a encontrar o erro de lógica da minha resolução, por favor?
var input = require('fs').readFileSync('stdin', 'utf8');
var lines = input.split('\n');
let numero = [];
let indice = 0;
let maior = 0;
for( let i = 1; i <= 100; i++ ){
numero[i] = lines.shift();
if(numero[i] > maior){
indice = i ;
maior = numero[i];
}
}
/let numeroOrdenado = numero.sort();/
console.log(maior);
console.log(indice);
Mensagem de erro:
files dont match - see output
*** 1080-a.out 2023-03-14 01:43:54.272574308 +0000
--- 1080/1080-a.sol 2014-10-14 11:47:35.671034000 +0000
*** 1,2 ****
! 923
! 5
--- 1,2 ----
! 33323413
! 7
Differences were found
files dont match - see output
*** 1080-b.out 2023-03-14 01:43:55.784576556 +0000
--- 1080/1080-b.sol 2015-06-05 18:51:33.118369000 +0000
*** 1,2 ****
! 923
! 5
--- 1,2 ----
! 33323413
! 100
Differences were found
André Filipe @andresantosComo o Thiago escreveu, é preciso converter os itens do array para inteiro. Além disso, o caminho correto do
stdinno beecrowd é/dev/stdinSobre o índice do array, mesmo que o beecrowd aceite a população do array a partir do índice 1, o correto é iniciar pela posição zero. Fazendo isso, a "posição de entrada" será
indice + 1, com as devidas correções
Em resposta aTais⬆:Carolina Castilhos @carolinacastilhosobrigadaaaaaaa pessoal! O meu estava dando erro também, e era por causa da posição, não percebi do + 1. Muito obrigada pelas explicações, muito boas!
- TThiago Nebuloni @thiagonebuloni
Eu também demorei um pouco até perceber isso kkkk
- TEm resposta aTais⬆:Thiago Nebuloni @thiagonebuloni
Oi Tais!
Não entendi o motivo do erro, mas se reparar, nos outputs dos testes do Beecrowd, o seu código sempre retorna os mesmos valores: 923 e 5.
Eu testei o seu código e aconteceu a mesma coisa. Acho que alguma confusão com o shift. Como ele remove o item do array, deve bagunçar os índices.Eu consegui fazer funcionar colocando a seguinte linha logo no começo do código, depois dos inputs:
let numero = lines.map((x) => parseInt(x));Isso usa a função map para converter cada número do array para inteiro com o parseInt.
Aí removi a linha do shift, já que ela não era mais necessária.
E o resto mantive, o for com o if comparando numero[i] > maiorSó alguns adendos:
- Você usou seu for com i começando em 1, não entendi porque. Assim já está eliminando a primeira posição de índice 0.
- É uma boa prática dentro do for usar uma variável para definir o limite das iterações, assim fica mais fácil de alterar o código se necessário. Por exemplo, ao invés de
i <= 100pode fazer
i < lines.lengthAssim não importa quantos valores forem inseridos, sempre irá até o final do array.
- Outra coisa, e isso é importante para o exercício. O Beecrowd pede a posição do maior número, não o índice. Então no final precisa acrescentar 1 à variável indice. Fiz a mesma coisa no meu e só depois percebi isso.
Espero que tenha conseguido te ajudar!
Taís Saito @TaisThiago, consegui usando suas dicas, muito obrigada :)
- TThiago Nebuloni @thiagonebuloni
Fico feliz por isso =)