Como Capturar dados de entrada no beecrowd
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.
Linked from:
Matheus V. Zarpellon @matheuszarpellonUm 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"
Brenda Azevedo @brendaazevedoMaravilha Matheus, facilitou bastante!
Em resposta aMarcusVogado⬆:alzira eva cavalcanti alves @evaOlá, 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)- CCamila Vieira @CamilaVieira
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!
- Em resposta aeva⬆:
MARCUS VOGADO @MarcusVogadovou 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)
- LEm resposta aMarcusVogado⬆:Ligia Paranhos Alcanfor Rosa @ligiarosa
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());
Em resposta aMarcusVogado⬆:Luiza Ferreira @luizaferreirafonsecaÓtimo! Muito obrigada mesmo!
- AEm resposta aMarcusVogado⬆:Alfredo Neto @AlfredoNetoo
Valeu pelas dicas Marcus, agora nunca mais erro no input lá do Beecrowd. 🤝
Em resposta aMarcusVogado⬆:Brenda Azevedo @brendaazevedoMuito obrigada Marcus, estava com muita dúvida nisso e já vim pro fórum perguntar, mas achei essa explicação que me ajudou bastante!!!
MARCUS VOGADO @MarcusVogadoFeliz em poder ajudar.
- KEm resposta aMarcusVogado⬆:Kelly Felismino @keelly18
Obrigada pela ajuda Marcos
Em resposta aMarcusVogado⬆:Renato Albuquerque @renatomalbMuito bacana as explicações, parabéns @MarcusVogado.
- MEm resposta aMarcusVogado⬆:Maria Silva @mariaff.silva
Me salvou demais essa postagem. Valeu, @MarcusVogado. Tu é brabooo!!
MARCUS VOGADO @MarcusVogadoFico feliz em ter ajudado. Obrigado
- DEm resposta aMarcusVogado⬆:Dayane Trevisan @daytrevdev
Obrigada por compartilhar!
- CEm resposta aMarcusVogado⬆:Camila Vieira @CamilaVieira
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! - Progresswith doing this idea
MARCUS VOGADO @MarcusVogadoFico feliz em ter ajudado. Obrigado
