From Wikipedia, the free encyclopedia:

 A happy number is defined by the following process:
 Starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process until the number equals   1   (where it will stay),   or it loops endlessly in a cycle which does not include   1.   


 Those numbers for which this process end in   1   are       happy   numbers,   
 while   those numbers   that   do   not   end in   1   are   unhappy   numbers. 


Task

Find and print the first   8   happy numbers.

Display an example of your output here on this page.



See also

   The OEIS entry:   The     happy numbers:   A007770
   The OEIS entry:   The unhappy numbers;   A031177


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