func mdroot(n) { var (mdr, persist) = (n, 0) while (mdr >= 10) { mdr = mdr.digits.prod ++persist } [mdr, persist] } say "Number: MDR MP\n====== === ==" [123321, 7739, 893, 899998].each{|n| "%6d: %3d %3d\n" \ .printf(n, mdroot(n)...) } var counter = Hash() Inf.times { |j| counter{mdroot(j).first} := [] << j break if counter.values.all {|v| v.len >= 5 } }   say "\nMDR: [n0..n4]\n=== ========" 10.times {|i| "%3d: %s\n".printf(i, counter{i}.first(5)) }