Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
63
Task/Happy-numbers/Smalltalk/happy-numbers-1.st
Normal file
63
Task/Happy-numbers/Smalltalk/happy-numbers-1.st
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
Object subclass: HappyNumber [
|
||||
|cache negativeCache|
|
||||
HappyNumber class >> new [ |me|
|
||||
me := super new.
|
||||
^ me init
|
||||
]
|
||||
init [ cache := Set new. negativeCache := Set new. ]
|
||||
|
||||
hasSad: aNum [
|
||||
^ (negativeCache includes: (self recycle: aNum))
|
||||
]
|
||||
hasHappy: aNum [
|
||||
^ (cache includes: (self recycle: aNum))
|
||||
]
|
||||
addHappy: aNum [
|
||||
cache add: (self recycle: aNum)
|
||||
]
|
||||
addSad: aNum [
|
||||
negativeCache add: (self recycle: aNum)
|
||||
]
|
||||
|
||||
recycle: aNum [ |r n| r := Bag new.
|
||||
n := aNum.
|
||||
[ n > 0 ]
|
||||
whileTrue: [ |d|
|
||||
d := n rem: 10.
|
||||
r add: d.
|
||||
n := n // 10.
|
||||
].
|
||||
^r
|
||||
]
|
||||
|
||||
isHappy: aNumber [ |cycle number newnumber|
|
||||
number := aNumber.
|
||||
cycle := Set new.
|
||||
[ (number ~= 1) & ( (cycle includes: number) not ) ]
|
||||
whileTrue: [
|
||||
(self hasHappy: number)
|
||||
ifTrue: [ ^true ]
|
||||
ifFalse: [
|
||||
(self hasSad: number) ifTrue: [ ^false ].
|
||||
cycle add: number.
|
||||
newnumber := 0.
|
||||
[ number > 0 ]
|
||||
whileTrue: [ |digit|
|
||||
digit := number rem: 10.
|
||||
newnumber := newnumber + (digit * digit).
|
||||
number := (number - digit) // 10.
|
||||
].
|
||||
number := newnumber.
|
||||
]
|
||||
].
|
||||
(number = 1)
|
||||
ifTrue: [
|
||||
cycle do: [ :e | self addHappy: e ].
|
||||
^true
|
||||
]
|
||||
ifFalse: [
|
||||
cycle do: [ :e | self addSad: e ].
|
||||
^false
|
||||
]
|
||||
]
|
||||
].
|
||||
7
Task/Happy-numbers/Smalltalk/happy-numbers-2.st
Normal file
7
Task/Happy-numbers/Smalltalk/happy-numbers-2.st
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
|happy|
|
||||
happy := HappyNumber new.
|
||||
|
||||
1 to: 31 do: [ :i |
|
||||
(happy isHappy: i)
|
||||
ifTrue: [ i displayNl ]
|
||||
].
|
||||
25
Task/Happy-numbers/Smalltalk/happy-numbers-3.st
Normal file
25
Task/Happy-numbers/Smalltalk/happy-numbers-3.st
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
|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
|
||||
Loading…
Add table
Add a link
Reference in a new issue