#!/usr/bin/ruby

#
## https://rosettacode.org/wiki/Happy_numbers
#

func happy(n) is cached {
    static seen = Hash();

    return true  if n.is_one;
    return false if seen.has_key(n);

    seen{n} = 1;
    happy(n.digits »**» 2 -> sum)
}

var count = 0;
{ |i|
    happy(i) ? say i : next;
    ++count == 8 && break;
} * Inf;
