RosettaCodeData/Task/Happy-numbers/Ruby/happy-numbers-1.rb
2023-07-01 13:44:08 -04:00

19 lines
465 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.digits.sum{|n| n*n}
if happy?(digit_squared_sum)
@happy_numbers << n
true # Return true
else
false # Return false
end
end