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

Como Capturar dados de entrada no beecrowd

Por MARCUS VOGADO @MarcusVogado
    2023-10-21 16:34:55.630Z2023-10-22 03:20:23.644Z

    Várias pessoas estão com dificuldades quanto a captura de dados no beecrow, então preparei esse conteúdo para tentar explicar como funciona. espero ajudar.
    Vamos lá!

    No beecrowd existem 2 tipos de entrada, a entrada separada por números de linhas exemplo:
    Dadas as seguintes entradas
    10 -- "linha 1"
    20 -- "linha 2"
    30 -- "linha 3 "
    Cada linha pode ser atribuída à uma variável diferente exemplo:

    let a = parseInt(lines.shif())
    

    ("se for um número inteiro")

    let b = parseInt(lines.shif())
    

    ("se for um número inteiro")

    let c = parseInt(lines.shif())
    

    ("se for um número inteiro")

    que teríamos os seguintes resultados a(10), b(20) e c(30)
    ai sim poderíamos resolver oque foi pedido na questão utilizando e manipulando estas variáveis.

    E agora o segundo tipo de entrada no beecrowd, que é uma string contendo os dados necessários para a solução do problema, exemplo:
    Dada as seguintes entradas
    10 5 11.0 --"linha 1"
    5 8 10.8 -- "linha 2"
    Esses dados serão transformados em um array através do método (split())
    Resumo do que é um Array: Serve para armazenar valores do mesmo tipo sequencialmente, no JavaScript podemos armazena em um array tipos diferentes mas isso não é uma boa prática.

    O método split pode ser utilizado para criação de um array, passando o parâmetro definido para a separação desses dados, exemplo: let numerosSeparados="10, 5, 6".split(",") o parâmetro utilizado para separação é "," (vírgula) .
    No caso do beecrowd o parâmetro utilizado para fazer a separação destes dados é o " " (espaço) então é importante após a abertura de aspas você colocar o espaço.

    Vamos ao código para capturar e separar a entrada em um array.

    let numerosLinhaUm = lines.shift().split(" ")
    let numerosLinhaDois = lines.shift().split(" ")
    

    ao fazer isso nossas variáveis estão transformando os dados de entrada em um array, armazenando sequencialmente os dados em posições diferentes , exemplo:

    numerosLinhaUm[0] vai receber o valor (10) 
    numerosLinhaDois[1] vai receber o valor (5)
    numerosLinhaDois[2] vai receber o valor (11.0)
    

    Estes valores entre colchetes 0, 1, e 2 é o índice(posição) do array que estamos trabalhando.
    o índice em JavaScript começa em 0(zero)

    então agora posso separar esse array para as minhas variáveis acessando os valores pelo índice.

    linha Um
    
    let A1 = numerosLinhaUm [0]  
    let A2 =  numerosLinhaUm [1] 
    let A3 =  parseFloat(numerosLinhaUm [2]) //podemos utilizar o método parseFloat ou parseInt se for necessário a conversão dos dados.  
    
    
    
    linha dois 
    
    let B1 = numerosLinhaDois [0]  
    let B2 =  numerosLinhaDois[1] 
    let B3 =  parseFloat(numerosLinhaDois [2]) //podemos utilizar o método parseFloat ou parseInt se for necessário a conversão dos dados.  
    
    

    Agora sim podemos manipular esses dados e executar o que foi pedido no exercício.

    Existe a segunda formar de fazer tudo isso com menos linha de código mas o interessante é entender oque cada coisa está fazendo
    aqui vai o exemplo para fazer isso em apenas uma linha de código:

    const [A1, A2,A3] = lines.map(Number)
    const [B1, B2,B3] = lines.map(Number)
    
    

    Assim já estamos atribuindo o valor destas variáveis utilizando o map e convertendo para Number.

    • 18 respostas
    1. Um ponto a ressaltar do ultimo exemplo:

      Vemos isso no exercício 1010, por exemplo.

      Exemplos de Entrada
      "12 1 5.30"
      "16 2 5.10"
      

      Como lidar com isso em duas linhas?

      const [code1, qtd1, value1] = lines[0].split(" ");
      const [code2, qtd2, value2] = lines[1].split(" ");
      

      cada linha é uma posição do lines, então você pode fazer o split nelas acessando o índice do lines pelo colchete.

      lines[0] é "12 1 5.30"
      lines[1] é 16 2 5.10"

      1. Brenda Azevedo @brendaazevedo
          2023-10-24 04:45:02.993Z

          Maravilha Matheus, facilitou bastante!

        • Em resposta aMarcusVogado:
          alzira eva cavalcanti alves @eva
            2023-10-24 15:10:49.235Z

            Olá, tudo bem?
            Eu gostaria de entender melhor como funciona o método map, dessa linha de código :

            const [A1, A2,A3] = lines.map(Number)
            const [B1, B2,B3] = lines.map(Number)
            
            1. CCamila Vieira @CamilaVieira
                2023-10-25 21:57:24.192Z

                O método .map() faz um mapeamento de um array, ele pega cada item do array, modifica o item, e retorna o array com os itens modificados. Nesse caso ele está pegando os valores originais, convertendo para o tipo número (Number), e retornando um array com os itens convertidos para o tipo número.

                Dá pra fazer bastante coisa no .map(). Você pode ler mais sobre esse método aqui nesse link: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/map, talvez fica mais fácil pra entender!

                1. Em resposta aeva:
                  MARCUS VOGADO @MarcusVogado
                    2023-10-24 16:20:40.276Z

                    vou tentar explicar.
                    O método map vai pegar cada valor que está dentro do array e converter para o tipo Number
                    Exemplo:
                    sem o map
                    o nosso array estaria assim
                    A1 seu valor =('10') dentro da variável A1 seria armazenado o valor '10', dentro de aspas ele seria uma string e não do tipo Number tendo então que fazer a conversão utilizando (parseInt ou parseFloat)

                    Já com o .map o valor será transformado em um Number sem precisar fazer o (parseInt ou parseFloat) e ficaria assim:

                    A1 seu valor = (10) sem aspas.

                    utilizei a variável A1 como exemplo pois isso acontece com todas as variáveis que estão dentro do array, é importante que o conteúdo do array seja do mesmo tipo(Number)

                  • L
                    Em resposta aMarcusVogado:

                    Muito bom, com certeza vai me ajudar bastante na resolução de exercícios com array.

                    Apenas complementando, também temos a função 'parseFloat' para números decimais, exemplo:

                    let a = parseFloat(lines.shift());
                    
                    1. Em resposta aMarcusVogado:
                      Luiza Ferreira @luizaferreirafonseca
                        2023-10-21 20:04:47.738Z

                        Ótimo! Muito obrigada mesmo!

                        1. A
                          Em resposta aMarcusVogado:
                          Alfredo Neto @AlfredoNetoo
                            2023-10-21 20:33:38.504Z

                            Valeu pelas dicas Marcus, agora nunca mais erro no input lá do Beecrowd. 🤝

                            1. Em resposta aMarcusVogado:
                              Brenda Azevedo @brendaazevedo
                                2023-10-24 04:38:20.884Z

                                Muito obrigada Marcus, estava com muita dúvida nisso e já vim pro fórum perguntar, mas achei essa explicação que me ajudou bastante!!!

                                1. MARCUS VOGADO @MarcusVogado
                                    2023-10-24 04:40:09.813Z

                                    Feliz em poder ajudar.

                                  • K
                                    Em resposta aMarcusVogado:
                                    Kelly Felismino @keelly18
                                      2023-10-24 15:15:13.847Z

                                      Obrigada pela ajuda Marcos

                                      1. Em resposta aMarcusVogado:
                                        Renato Albuquerque @renatomalb
                                          2023-10-24 17:51:19.272Z

                                          Muito bacana as explicações, parabéns @MarcusVogado.

                                          1. M
                                            Em resposta aMarcusVogado:
                                            Maria Silva @mariaff.silva
                                              2023-10-24 21:29:21.192Z

                                              Me salvou demais essa postagem. Valeu, @MarcusVogado. Tu é brabooo!!

                                              1. MARCUS VOGADO @MarcusVogado
                                                  2023-10-24 21:40:15.529Z

                                                  Fico feliz em ter ajudado. Obrigado

                                                • D
                                                  Em resposta aMarcusVogado:
                                                  Dayane Trevisan @daytrevdev
                                                    2023-10-28 19:24:32.111Z

                                                    Obrigada por compartilhar!

                                                    1. C
                                                      Em resposta aMarcusVogado:
                                                      Camila Vieira @CamilaVieira
                                                        2023-10-21 19:52:43.310Z2023-10-23 13:37:53.334Z

                                                        Outra forma de pegar o valor de cada índice do array seria por desestruturação, por exemplo:

                                                        let numerosLinhaUm = lines.shift()
                                                        let [A, B, C] = numerosLinhaUm.split(" ").map(i => parseFloat(i))
                                                        

                                                        Nesse exemplo estou desestruturando o array, o valor de cada índice será passado para as variáveis A, B e C respectivamente, e estou utilizando o método .map() para converter cada valor para o tipo float.
                                                        Gosto bastante dessa forma, pois o código fica bem mais simples e funciona no Beecrowd também!

                                                        1. Progress
                                                          with doing this idea
                                                        2. Brena Alves @BrenaOliver
                                                            2023-10-25 00:19:40.749Z

                                                            Ajudou demais mesmo, obrigada!!!

                                                            1. MARCUS VOGADO @MarcusVogado
                                                                2023-10-25 00:21:03.790Zreplies toBrenaOliver:

                                                                Fico feliz em ter ajudado. Obrigado