40 lines
594 B
Text
40 lines
594 B
Text
-V MAX = 12
|
||
|
||
[Char] sp
|
||
V count = [0] * MAX
|
||
V pos = 0
|
||
|
||
F factSum(n)
|
||
V s = 0
|
||
V x = 0
|
||
V f = 1
|
||
L x < n
|
||
f *= ++x
|
||
s += f
|
||
R s
|
||
|
||
F r(n)
|
||
I n == 0
|
||
R 0B
|
||
V c = :sp[:pos - n]
|
||
I --:count[n] == 0
|
||
:count[n] = n
|
||
I !r(n - 1)
|
||
R 0B
|
||
:sp[:pos++] = c
|
||
R 1B
|
||
|
||
F superPerm(n)
|
||
:pos = n
|
||
V len = factSum(n)
|
||
I len > 0
|
||
:sp = [Char("\0")] * len
|
||
L(i) 0 .. n
|
||
:count[i] = i
|
||
L(i) 1 .. n
|
||
:sp[i - 1] = Char(code' ‘0’.code + i)
|
||
L r(n) {}
|
||
|
||
L(n) 0 .< MAX
|
||
superPerm(n)
|
||
print(‘superPerm(#2) len = #.’.format(n, sp.len))
|