Exercism — Rust — Número Narcisista

Tudo bem, pessoal?

Estou aprendendo a linguagem Rust e estou utilizando a plataforma Exercism para resolver problemas dentro desta linguagem e gostaria de trazer para vocês minha experiência com o problema Armstrong Numbers, do Exercism.

Sobre o Rust

Aqui você pode ver como ele desempenha em relação a linguagem C, Clang, C++ e Go.

Só de bater de frente com o próprio C já demonstra o poder de processamento dessa linguagem. Apesar da verbosidade, possui muitas vantagens.

Problema

Então, o desafio é saber separar cada digito de um número, neste caso inteiro, identificar sua posição e aplicar a fórmula. Mais fácil dizer do que fazer ¬¬.

Solução

Por isso, passei para essa abordagem. Aqui segue o código feito em Rust baseado na solução encontrada na página de números narcísicos acima.

Minha solução se encontra aqui, também pode encontrar esse e outros exercícios no meu repositório.

Como você pode perceber ela envolve duas fases, cada uma com dois loops. O primeiro método, ppdif, é responsável por:

  1. Definir a quantidade de dígitos pelo primeiro loop
  2. No segundo loop ele aplica a fórmula para achar o total

O segundo método, ppdif_cycle, que se faz muito importante.

  1. O primeiro loop aplica o primeiro método até que ele encontre um número que se repita, nesse caso ele repete até achar um número que não esteja no vetor seen.
  2. O segundo loop pega esse número que se repetiu e aplica mais um ciclo tentando encontrar um número narcísico até que se repita.

Essa abordagem utiliza do método Cycle Detection que tenta otimizar a busca por números dentro de um conjunto finito de dados, vale muito a pena estudar o conteúdo.

Conclusão

Assim, consegui terminar mais um desafio do exercism, gostei muito dessa solução, minha implementação está longe de ser perfeita, porém acho que possui alguns pontos fortes, como a não utilização de textos.

Acredito que mesmo que não consigamos a solução perfeita é muito bom experimentar coisas novas, abrir os horizontes e compartilhar isso nos ajuda a fortalecer nossos conhecimentos e recolher feedbacks interessantes.

Gostou? Dá um like e comenta. E você, como resolveria esse problema? Vamos dividir a experiência!

Originally published at https://www.linkedin.com.

Writing to make ourselves better programmers.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store