Humble numbers: Difference between revisions

Content added Content deleted
Line 2,712: Line 2,712:


===Orders of magnitude faster===
===Orders of magnitude faster===
Generate humble numbers directly
Generate humble numbers directly.
{{trans|Zkl}}
{{trans|Zkl}}
<lang ruby>def humble(digits)
<lang ruby>def humble(digits)
Line 2,719: Line 2,719:
i, j, k, l = 0, 0, 0, 0
i, j, k, l = 0, 0, 0, 0
n = 0
n = 0
while n += 1 # ruby >= 2.6: (1..).each do |n|
while n += 1 # ruby => 2.6: (1..).each do |n|
x = [x2, [x3, [x5, x7].min].min].min
x = [x2, [x3, [x5, x7].min].min].min
break if x.to_s.size > digits
break if x.to_s.size > digits
Line 2,734: Line 2,734:
h = humble(digits) # humble numbers <= digits size
h = humble(digits) # humble numbers <= digits size
count = h.size # the total humble numbers count
count = h.size # the total humble numbers count
counts = h.map { |n| n.to_s.size }.tally # hash of digits counts 1..digits
#counts = h.map { |n| n.to_s.size }.tally # hash of digits counts 1..digits: Ruby => 2.7
counts = h.map { |n| n.to_s.size }.group_by(&:itself).transform_values(&:size) # Ruby => 2.4
print "First 50 Humble Numbers: \n"; (0...50).each { |i| print "#{h[i]} " }
print "First 50 Humble Numbers: \n"; (0...50).each { |i| print "#{h[i]} " }
print "\n\nOf the first #{count} humble numbers:\n"
print "\n\nOf the first #{count} humble numbers:\n"