19 lines
402 B
Crystal
19 lines
402 B
Crystal
def digital_root_with_persistence(n : Int) : {Int32, Int32}
|
|
n = n.abs
|
|
persistence = 0
|
|
|
|
until n <= 9
|
|
persistence += 1
|
|
|
|
digit_sum = (0..(Math.log10(n).floor.to_i)).sum { |i| (n % 10**(i + 1) - n % 10**i) // 10**i }
|
|
|
|
n = digit_sum
|
|
end
|
|
|
|
{n, persistence}
|
|
end
|
|
|
|
puts digital_root_with_persistence 627615
|
|
puts digital_root_with_persistence 39390
|
|
puts digital_root_with_persistence 588225
|
|
|