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

25 lines
548 B
Smalltalk

|next isHappy happyNumbers|
next :=
[:n |
(n printString collect:[:ch | ch digitValue squared] as:Array) sum
].
isHappy :=
[:n | | t already |
already := Set new.
t := n.
[ t == 1 or:[ (already includes:t)]] whileFalse:[
already add:t.
t := next value:t.
].
t == 1
].
happyNumbers := OrderedCollection new.
try := 1.
[happyNumbers size < 8] whileTrue:[
(isHappy value:try) ifTrue:[ happyNumbers add:try].
try := try + 1
].
happyNumbers printCR