No internet connection
  1. Home
  2. Exercícios do Beecrowd

Maior Posição 1080

Por Taís Saito @Tais
    2023-03-14 01:48:18.441Z

    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

    Resolvido no post #2, clique para visualizar
    • 6 respostas
    1. André Filipe @andresantos
        2023-03-14 13:09:32.865Z

        Como o Thiago escreveu, é preciso converter os itens do array para inteiro. Além disso, o caminho correto do stdin no beecrowd é /dev/stdin

        Sobre 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

        1. Em resposta aTais:

          obrigadaaaaaaa 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!

          1. TThiago Nebuloni @thiagonebuloni
              2023-03-15 10:23:42.524Z

              Eu também demorei um pouco até perceber isso kkkk

            • T
              Em resposta aTais:
              Thiago Nebuloni @thiagonebuloni
                2023-03-14 11:27:24.569Z

                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] > maior

                Só 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 <= 100
                

                pode fazer

                i < lines.length
                

                Assim 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!

                1. Taís Saito @Tais
                    2023-03-14 23:35:17.428Z

                    Thiago, consegui usando suas dicas, muito obrigada :)

                    1. TThiago Nebuloni @thiagonebuloni
                        2023-03-15 10:23:26.147Z

                        Fico feliz por isso =)