Strange numbers

func generate_from_prefix(limit, p, base) {

    var seq = [p]

    for d in (base-1 -> primes) {
        for k in ([1, -1]) {
            var r = p[0]+(k*d)
            next if (r < 0)
            next if (r >= base)
            var t = [r, p...]
            if (t.digits2num(base) <= limit) {
                seq << __FUNC__(limit, t, base)...
            }
        }
    }

    return seq
}

func strange_numbers(limit, base = 10, digits = @(^base)) {
    digits.map {|p| generate_from_prefix(limit, [p], base)... }\
          .map {|t| t.digits2num(base) }\
          .sort.uniq
}

strange_numbers(500).grep { _ > 100 }.slices(10).each{
    .join(' ').say
}

Output:

Last updated

Was this helpful?