import ; import ; 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]);