#* http://rosettacode.org/wiki/Kaprekar_numbers
  Find Kaprekar numbers
*#
include :seq

kaprekar = { limit |
  seq.range(1, limit).select { num |
    num == 1 || {
      sqr = (num ^ 2).to_s

      seq.range(0, (sqr.length - 1)).any? { i |
        lhs = sqr[0,i].to_i
        rhs = sqr[i + 1,-1].to_i

        (rhs > 0) && { lhs + rhs == num }
      }
    }
  }
}

p "Kaprekar numbers below 10,000:"
p kaprekar(10000).to_array

p "Number of Kaprekar numbers below 1,000,000:"
p kaprekar(1000000).count