Codecamp - Desafio Plantando o Futuro – Do enunciado ao código
Olá, dev!
Nesta semana foi iniciada uma nova ferramenta didática na DIO: o Codecamp, evento de programação que conta com vários desafios de código em Javascript.
Estou escrevendo este artigo porque vi que muitos usuários iniciantes estão com dificuldade de elaborar seus códigos. Algumas vezes, a dificuldade está na falta de conhecimento com a linguagem, mas em outras a dúvida se dá no entendimento do enunciado.
O objetivo deste artigo é ajudar estes iniciantes na leitura atenta do enunciado do problema, elaborar um algoritmo que possa resolvê-lo e, finalmente, transformá-lo em código Javascript, gerando as respostas pedidas no enunciado.
O que você vai ler aqui:
1. Introdução
2. O Enunciado do Desafio: Plantando o Futuro
3. A Criação do Algoritmo
4. A Escrita do código
5. Conclusão
1 – Introdução
Nesta semana foi iniciada uma nova ferramenta didática na DIO: o Codecamp, evento de programação que conta com vários desafios de código em Javascript, inclusive com premiação em dinheiro e períodos de assinatura DIO PRO.
Eu vi que muitos usuários iniciantes com dificuldade de elaborar seus códigos e conseguir aprovação nos testes. Muitas vezes, a dificuldade está no entendimento do enunciado, de modo que eles nem chegam a codificá-lo.
Este artigo procura ajudar os usuários iniciantes na leitura atenta do enunciado do problema, na elaboração de um algoritmo e na codificação em Javascript, gerando as respostas pedidas no enunciado e aprová-lo nos testes.
O Codecamp oferece 9 desafios de código. Como o objetivo deste artigo é apenas ajudar os usuários iniciantes no entendimento do problema, eu não vou tratar aqui de todos os desafios, mas apenas um, escolhido para esclarecer o processo, além de dar a resposta codificada.
O desafio escolhido, ”Plantando o Futuro”, faz parte do segundo módulo (Chegando ao Acampamento) do Codecamp.
2 – O Enunciado do Desafio: Plantando o Futuro
Como já foi dito, este foi o desafio escolhido como exemplo para esta explicação didática. O enunciado completo do desafio é o seguinte:
Pela manhã, com todos descansados, sua primeira missão será aumentar a plantação de jacarandás, árvore fundamental para a magia do vale. Para isso, é necessário plantá-los a uma certa distância um pé do outro para que nenhuma muda roube o nutriente da outra, fazendo com que algumas não se desenvolvam. Nesse sentido, é necessário que cada pé esteja a exatos 10 metros de distância um do outro, assim conseguiremos plantar todas as mudas e evitar que algumas não se desenvolvam.
Crie um código que, com as entradas de distâncias dos buracos avaliadas pelo drone, verifique se o espaço entre um buraco e outro é igual a 10 metros. Se for, imprima no console "Plantar!". Se não for, imprima no console a distância que o buraco deve retroceder ou avançar para chegar ao número ideal.
Para esse desafio os métodos Math do Javascript podem ser muito úteis.
⛺ Entradas e Saídas
As entradas serão quantos metros o drone verificou entre um buraco e outro. A saída deverá ser, dependendo da distância dos buracos analisados pelo drone, se os CleanCoders podem plantar ou se o buraco deve avançar ou retroceder uma quantia X de metros.
Explicando o enunciado:
- Devem ser feitos buracos a cada 10 metros, para plantar as mudas;
- Um drone marca o local do próximo buraco, que deve estar a exatos 10 metros do buraco anterior;
- Se o drone já passou da posição de onde o novo buraco deve ser feito, ele deve voltar uma determinada distância até chegar a 10 metros do buraco anterior;
- De forma semelhante, se o drone ainda não chegou na posição correta onde o novo buraco deve ser feito, ele deve voar uma determinada distância até chegar a exatos 10 metros do buraco anterior;
- O único dado de entrada é a distância que o drone está da posição do último buraco feito.
Na figura de exemplo acima, a explicação para cada saída é dada na tabela abaixo:
Com esta explicação, vamos criar um algoritmo, com os passos a seguir para tentar resolver o problema. A figura abaixo ilustra o processo da escolha da posição do buraco pelo drone e as decisões que devem ser tomadas pelo código:
A figura mostra 2 buracos já feitos e um terceiro buraco a fazer. A posição do drone determina a distância entre o novo buraco e o buraco anterior, chamada aqui de id (como no enunciado e no código sugerido na plataforma), como mostra a seta vermelha.
Na figura, o drone já passou da posição correta (a 10 metros do buraco anterior), portanto ele precisa se mover para trás para chegar à posição correta (10 metros do buraco anterior), ou seja, deverá se mover de (d – 10) metros, como mostra a seta azul.
De maneira semelhante, se o drone ainda não tivesse chegado na posição correta (a 10 metros do buraco anterior), ele precisaria se mover para a frente até chegar à posição correta (10 metros do buraco anterior), ou seja, deveria se mover de (10 - d) metros.
Caso ele já estivesse na posição correta (a 10 metros do buraco anterior), bastaria fazer o buraco lá.
A decisão de usar os termos (id – 10) e (10 – id) garante que os resultados dessas operações sejam sempre positivos, dependendo de id ser maior ou menor do que 10, para não trabalharmos com números negativos, por simplificação.
3 - A Criação do Algoritmo
Com Base na figura e nestas explicações, vamos elaborar um algoritmo para o problema:
- Ler o dado de entrada;
- Testar a distância do drone ao buraco anterior e realizar uma das 3 ações seguintes, dependendo da distância testada;
- Se o drone já estiver a 10 metros do buraco anterior, é a posição correta;
- informar a mensagem de saída, para plantar nesta posição;
- Se o drone já estiver passado da distância exigida de 10 metros, calcular a distância que ele deve voltar para ficar na posição correta do novo buraco;
- informar a mensagem de saída, registrando a distância e o sentido em que o drone deve se mover;
- Se o drone já ainda não tiver chegado na distância exigida de 10 metros, calcular a distância que ele deve avançar para ficar na posição correta do novo buraco;
- informar a mensagem de saída, registrando a distância e o sentido em que o drone deve se mover;
4 – A Escrita do Código
Com este algoritmo, vamos passar a elaborar o código, relacionando cada passo do algoritmo para uma linha de código ou mais de uma. Só que vamos escrever um pseudo-código, bem parecido com o código Javascript.
Pelo pseudo-código escrito, podemos escrever um código Javascript equivalente:
let id = parseInt( gets() );
if( id == 10) print( “Plantar!” );
if( id > 10 ) print( “O buraco deve retroceder ” + id-10 + “ metros” );
if( id < 10 ) print( “O buraco deve avançar ” + 10-id + “ metros” );
Na primeira linha de código, a variável id é declarada (comando let), a função gets() lê o valor da distância do drone ao buraco anterior, automaticamente, cujo texto lido (caracteres representando a quantidade) é convertido para número pela função parseInt() e, finalmente, o valor é atribuído à variável id.
Inclusive, na minha opinião, o nome desta variável deveria ser mais significativo para este problema, podendo ser chamada distancia ao invés de id.
Na segunda linha, o valor da distância (variável id) é comparado com 10; se o valor for igual, o drone está exatamente sobre o local correto do buraco novo e deve ser escrita a mensagem que informa essa situação.
Na minha opinião, ao invés de usar a função print(), criada para a plataforma, é melhor usar a função console.log(), que faz o mesmo efeito e deve ter um desempenho melhor.
Na terceira linha, testa-se se o valor da distância (variável id) é maior que 10; se for, o drone já passou do local correto do buraco novo e deve se mover para trás até chegar à posição correta; deve ser escrita a mensagem que informa essa situação e o quanto ele deve se mover para trás.
Na quarta, e última, linha, testa-se se o valor da distância (variável id) é menor que 10; se for, o drone ainda não chegou ao local correto do buraco novo e deve se mover para a frente até chegar à posição correta; deve ser escrita a mensagem que informa essa situação e o quanto ele deve se mover para a frente.
Atualizando o código anterior com as dicas dadas, chegamos ao seguinte código:
let distancia = parseInt( gets() );
if( distancia == 10) console.log( “Plantar!” );
if( distancia > 10 ) console.log( “O buraco deve retroceder ” + distancia-10 + “ metros” );
if( distancia < 10 ) console.log( “O buraco deve avançar ” + 10-distancia + “ metros” );
Usando uma técnica de formatação literal (template srtings), mais apropriada para a impressão, chegamos ao código final:
let distancia = parseInt( gets() );
if( distancia == 10) console.log( `Plantar!` );
if( distancia > 10 ) console.log( `O buraco deve retroceder ${distancia-10} metros` );
if( distancia < 10 ) console.log( `O buraco deve avançar ${10-distancia} metros` );
Neste caso, o caractere usado na formação do string de impressão é o acento grave (`) ao invés das aspas e concatenação de strings com o caractere (+).
Agora, você pode copiar e colar esse código que ele irá passar em todos os testes.
E use essa lógica para resolver os outros desafios desse Codecamp e também dos cursos da plataforma.
5 - Conclusão
Nesta semana foi iniciada uma nova ferramenta didática na DIO: o Codecamp, evento de programação que conta com vários desafios de código em Javascript, inclusive com premiação em dinheiro e períodos de assinatura DIO PRO.
Eu vi que muitos usuários iniciantes com dificuldade de elaborar seus códigos e conseguir aprovação nos testes. Muitas vezes, a dificuldade está no entendimento do enunciado, de modo que eles nem chegam a codificá-lo.
Este artigo procura ajudar os usuários iniciantes na leitura atenta do enunciado do problema, a elaborar um algoritmo e codificá-lo em Javascript, gerando as respostas pedidas no enunciado e aprová-lo nos testes.
Foi escolhido um dos desafios para explicar, passo a passo, como fazer um desafio de código e ser aprovado em todos os testes.
O desafio escolhido, ”Plantando o Futuro”, faz parte do segundo módulo (Chegando ao Acampamento) do Codecamp.
Além da explicação do enunciado e a criação do algoritmo, foi dado todo o código das solução, para que o usuário iniciante pudesse fazer a associação do algoritmo ao código criado.
Além disso, foram dadas dicas finais de melhoramento do código criado inicialmente, em legibilidade e desempenho do código final.
Mas já aviso: nos próximos artigos sobre desafios, só vou dar o algoritmo, nada de código! Essa parte é com você!!