RosettaCodeData/Task/Happy-numbers/Ruby/happy-numbers-1.rb
Ingy döt Net db842d013d A-M baby
2013-04-10 21:29:02 -07:00

19 lines
546 B
Ruby

require 'set' # Set: Fast array lookup / Simple existence hash
@seen_numbers = Set.new
@happy_numbers = Set.new
def happy?(n)
return true if n == 1 # Base case
return @happy_numbers.include?(n) if @seen_numbers.include?(n) # Use performance cache, and stop unhappy cycles
@seen_numbers << n
digit_squared_sum = n.to_s.each_char.inject(0) { |sum, c| sum + c.to_i**2 } # In Rails: n.to_s.each_char.sum { c.to_i**2 }
if happy?(digit_squared_sum)
@happy_numbers << n
true # Return true
else
false # Return false
end
end