var upto =1000var base =10var list = (^upto -> grep {.digits(base).contains(.sumdigits(base).digits(base)...)})say "Numbers under #{upto} whose sum of digits is a substring of themselves:"list.each_slice(8, {|*a| say a.map { '%3s'% _ }.join(' ')})say "\n#{list.len} such numbers found."
Output:
Numbers under 1000 whose sum of digits is a substring of themselves:
0 1 2 3 4 5 6 7
8 9 10 20 30 40 50 60
70 80 90 100 109 119 129 139
149 159 169 179 189 199 200 300
400 500 600 700 800 900 910 911
912 913 914 915 916 917 918 919
48 such numbers found.