Article image
Fernando Araujo
Fernando Araujo17/03/2023 11:10
Compartilhe

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.


    image

    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:

    image

    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:

     

    image

    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:


    1. Ler o dado de entrada;
    2. Testar a distância do drone ao buraco anterior e realizar uma das 3 ações seguintes, dependendo da distância testada;
    3. Se o drone já estiver a 10 metros do buraco anterior, é a posição correta;
    4. informar a mensagem de saída, para plantar nesta posição; 
    5. 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;
    6. informar a mensagem de saída, registrando a distância e o sentido em que o drone deve se mover;
    7. 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;
    8. 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.


    image

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

    Compartilhe
    Comentários (8)
    Tawara Martins
    Tawara Martins - 18/03/2023 12:46

    Parabéns pelo artigo, Fernando! Me ajudou muito!

    Fernando Araujo
    Fernando Araujo - 18/03/2023 09:52

    Opa, Caio!

    Obrigado pelo comentário. É uma honra ser lido pelo criador dos desafios,

    E ser ouvido. A gente se sente parete do processo!

    Valeu!

    Fico feliz por ter lido meu artigo,o objetivo dele foi justamente ajudar os iniciantes.

    E parabéns pela criação do Codecamp e dos desafios.

    Foi uma ótima iniciativa!

    Estavam ótimos e em um nível adequado, básico e intermediário.

    Já estou aguardando o próximo!

    (Vou torcer para que seja em Python... ou javascript novamente) :-)


    Fernando Araujo
    Fernando Araujo - 17/03/2023 11:57

    Concordo em tudo, Luis!

    Eu não acho certo mostrar o código, mas só até o algoritmo.

    Mas como neste artigo eu queria explicitar a relação entre o enunciado e o algoritmo, e também a relação entre o algoritmo e o código, precisei mostrar também o código.

    Mas, nos próximos, irei só até o algoritmo!

    Caio Longo
    Caio Longo - 17/03/2023 15:15

    Fernando, esse artigo foi excelente e com certeza vai ajudar os participantes. Nos próximos codecamps vou tentar melhorar ainda mais os enunciados para não haver nenhuma dúvida quanto a quaisquer dados e sobre a atividade proposta.


    Muito obrigado por compartilhar esse artigo tão excelente com a gente!

    Fernando Araujo
    Fernando Araujo - 17/03/2023 13:39

    Obrigado, Luiz e João.


    O foco é mesmo ajudar os iniciantes, explicação nível Massinha 1!!

    Joao Batista
    Joao Batista - 17/03/2023 13:09

    Ótimo artigo!

    Luiz Café
    Luiz Café - 17/03/2023 12:47

    Parabéns Fernando pela ótima didática na sua explicação. Realmente mio iniciantes podem encontrar dificuldades na elaboração do código.

    Luis Zancanela
    Luis Zancanela - 17/03/2023 11:43

    Colocar como construiu o pensamento para solução do problema é legal, ajuda a quem está no início a ter uma visão de como resolver problema. Colocar código ajuda tbm, mas o problema é se a preguiça de quem pegar acabar batendo e só copiar e colar, aí não aprende com o desafio de fato. Quem pegar código a sugestão é tentar entender o que cada linha faz mesmo que já está pronto. Copiar e colar vai ajudar a entregar, mas não pensar no problema e na solução vai pesar quando pegar problema real.