Bom dia PedroPontes, obrigado por compartilhar seu problema matemático.
Essa é minha primeira interação, primeira resposta no TabNews, espero que lhe seja útil.
O legal de problemas de lógica assim, é que você pode resolver com qualquer linguagem, a lógica é a mesma.
Porém o JS tem uma magia que nos ajuda a resolver o problema de uma forma mais elegante, se posso chamar assim, apesar de menos legível de primeiro momento.
Logo quando vi esse problema, de cara me lembrou os problemas do CodeWars. Se não conhece, sugiro dar uma olhada!
Vou deixar uma solução aqui para o seu problema e vou mostrar o que cada etapa faz! No começo pode parecer BEM CONFUSO, talvez seja mesmo, mas eu acho bem bacana. Vamos lá!!!
function digitalRoot(num){
return num.toString().split('').map((item) => parseInt(item)).reduce((a,b) => a + b);
}
console.log(digitalRoot(1234)); // 10
console.log(digitalRoot(124354435)); // 31
Passo a passo da function:
-
num.toString() // transforma o número em string
-
.split('') // divide a string em substrings procurando pelo padrão passado na chamada do split, nesse caso, '' faz com que separe um por um e adiciona num array.
-
.map((item) => parseInt(item)) // transforma cada item desse array em número novamente.
-
.reduce((a, b) => a + b); // simplificando, o reduce faz a mágica de somar cada item do array, considerando o 'a' como acumulador e o 'b' como o valor atual, ele passa por cada item do array e vai somando, até restar somente um item, por esse motivo, o reduce sempre nos retorna um único valor.
Quando olhei seu problema, logo pensei que poderia resolver em poucas linhas, porém eu não tinha certeza EXATAMENTE do que fazer até testar no codepen ali, essa é a magia da tecnologia, poder resolver um problema de muitas formas diferentes, e nessa tentativa de te ajudar, estudei também a utilização desses métodos, obrigado.
Espero que eu possa ter ajudado de alguma forma a ver o problema e espero que tenha compreendida a solução proposta.
Qualquer coisa pode me chamar no Discord quando quiser. Manozzo#6762
Abraços,
Manozzo