Rosetta Code

Digital root

Compute the digital root and additive persistence of a non-negative integer.

Source rosettacode/popular/digital_root.vibe
# title: Digital root
# source: https://rosettacode.org/wiki/Digital_root
# category: Rosetta Code
# difficulty: Easy
# summary: Compute the digital root and additive persistence of a non-negative integer.
# tags: popular, math, loops
# vibe: 0.2

def digit_sum(n)
  total = 0
  remaining = n
  while remaining > 0
    total = total + (remaining % 10)
    remaining = remaining / 10
  end
  total
end

def digital_root(n)
  persistence = 0
  value = n
  while value >= 10
    value = digit_sum(value)
    persistence = persistence + 1
  end
  { root: value, persistence: persistence }
end

def run
  numbers = [627615, 39, 999999999, 0, 10, 493193]
  results = []
  i = 0
  while i < numbers.size
    dr = digital_root(numbers[i])
    results = results.push({
      number: numbers[i],
      root: dr[:root],
      persistence: dr[:persistence]
    })
    i = i + 1
  end
  results
end
Output
Press run to execute run from this example.
rosetta-code popular math loops browser-runner