Numbers with same digit set in base 10 and base 16

Simple solution:

^1e5 -> grep { Set(.digits...) == Set(.digits(16)...) }.say

Recursively generate the numbers (2x faster):

func generate_from_prefix(limit, p, base, digits) {

    var seq = [p]

    for d in (digits) {
        var t = [d, p...]
        if (t.digits2num(base) <= limit) {
            seq << __FUNC__(limit, t, base, digits)...
        }
    }

    return seq
}

func numbers_with_same_digitset(limit, base = 10) {

    (1..9).map  {|p| generate_from_prefix(limit, [p], base, @(0..9))... }\
          .map  {|t| digits2num(t, base) }\
          .grep {|t| Set(t.digits...) == Set(t.digits(base)...) }\
          .sort\
          .prepend(0)
}

say numbers_with_same_digitset(1e5, 16)

Output:

Last updated