DEV Community

Gabriel J
Gabriel J

Posted on

2

Zerando HackerRank ( 20 )

E no vigésimo episódio desta serie que queima os miolos, vamos abordar um problema envolvendo o crescimento de uma árvore que cresce de uma forma um tanto diferente.

Neste problema temos uma árvore utópica que passa por 2 ciclos de crescimento a cada ano. Na primavera dobra de altura e no verão aumenta em 1 de altura (seja qual for o sistema de medição que você queira usar). O objetivo da função é gerar a altura da árvore após um certo número de ciclos de crescimento.

Se quisermos saber a altura da árvore após 5 ciclos de crescimento, calcularemos atribuindo este valor a variável n da seguinte forma:

Image description

Nossa entrada n é a variável que conterá o número de ciclos de crescimento. Contamos a altura da árvore a partir do ciclo de crescimento 0.

No ciclo 0, a altura inicial da árvore é 1.

No ciclo 1, a árvore dobra de altura, então sua altura agora é 2.

No ciclo 2, a árvore aumenta de altura em 1. A altura da árvore é 3.

No ciclo 3, a árvore dobra de altura novamente, então sua altura agora é 6.

No ciclo 4, a árvore aumenta de altura em 1. A altura da árvore agora é 7.

No ciclo final, a árvore dobra de altura, tornando a altura da árvore 14.

A função produzirá 14.

Começamos a ver um padrão ao ver como chegamos à nossa resposta. Começando no ciclo 1, se o número do ciclo for ímpar, a árvore dobra de altura. Se for par, a árvore só aumenta de altura em 1.

Para trabalhar isso na nossa função, atribuiremos isso a duas variáveis desta forma:

Image description

Nossa variável de ciclo nos ajudará a rastrear a altura da árvore em cada ciclo de crescimento conforme contamos de 1 a n. Conhecemos a altura inicial da árvore no ciclo 0, então queremos começar a medir a altura da árvore a partir do ciclo 1.

A variável de altura manterá a altura da árvore. A função produzirá esta variável. Começamos a contar por 1, pois é a altura inicial da árvore.

Em seguida, usamos um loop while desta forma:

Image description

Queremos que nosso loop while continue em loop até que nossa variável de ciclo não seja maior que nossa entrada n.

Em nosso exemplo acima, notamos que se o ciclo de crescimento for um número ímpar, a árvore dobrará de altura. Portanto, independentemente da altura atual da árvore, nós a multiplicamos por 2.

OBS: A equação dentro da instrução if, height *= 2;, é uma forma abreviada de escrever height = height * 2;.

Se o ciclo de crescimento for um número par, incrementamos a altura da árvore em 1.

Depois que o loop passa pela instrução if, incrementamos a variável do ciclo para podermos medir a altura da árvore no próximo ciclo de crescimento.

Depois que o loop é feito, retornamos a variável de altura.

Nossa função completa vai ficar desta forma:

Image description

E assim fechamos mais um desafio.

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

Billboard image

Create up to 10 Postgres Databases on Neon's free plan.

If you're starting a new project, Neon has got your databases covered. No credit cards. No trials. No getting in your way.

Try Neon for Free →

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay