Comment detail

自然数の分割 (Nested Flatten)

たまには Pnuts などを

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function sum_perms(n, m) {
    if (m == 1) {
        yield [n]
    }
    else if (n == 0) {
        yield new int[m]
    }
    else {
        for (i : n..0) {
            for (rest : sum_perms(n - i, m - 1)) {
                yield [i] + rest
            }
        }
    }
}

function main(args) {
    if (args.length == 2) {
        n, m = project(args, function(o) { int(o) })
    }
    else {
        n, m = [5, 3]
    }

    for (t : sum_perms(n, m)) {
        println(join(' ', t))
    }
}

main($args[1..])

Index

Feed

Other

Link

Pathtraq

loading...