27 lines
765 B
Text
27 lines
765 B
Text
import <Utilities/Math.sl>;
|
|
import <Utilities/Conversion.sl>;
|
|
|
|
main(argv(2)) := findHappys(stringToInt(head(argv)));
|
|
|
|
findHappys(count) := findHappysHelper(count, 1, []);
|
|
|
|
findHappysHelper(count, n, happys(1)) :=
|
|
happys when size(happys) = count
|
|
else
|
|
findHappysHelper(count, n + 1, happys ++ [n]) when isHappy(n)
|
|
else
|
|
findHappysHelper(count, n + 1, happys);
|
|
|
|
isHappy(n) := isHappyHelper(n, []);
|
|
|
|
isHappyHelper(n, cache(1)) :=
|
|
let
|
|
digits[i] := (n / integerPower(10, i - 1)) mod 10
|
|
foreach i within 1 ... ceiling(log(10, n + 1));
|
|
newN := sum(integerPower(digits, 2));
|
|
in
|
|
false when some(n = cache)
|
|
else
|
|
true when n = 1
|
|
else
|
|
isHappyHelper(newN, cache ++ [n]);
|