Own digits power sum

func armstrong_numbers(n, base=10) {
 
    var D = @(^base)
    var P = D.map {|d| d**n }
 
    var list = []
 
    D.combinations_with_repetition(n, {|*c|
        var v = c.sum {|d| P[d] }
        if (v.digits(base).sort == c) {
            list.push(v)
        }
    })
 
    list.sort
}
 
for n in (3..10) {
    say ("For n = #{'%2d' % n}: ", armstrong_numbers(n))
}

Output:

Last updated

Was this helpful?