mirror of https://github.com/exaloop/codon.git
46 lines
770 B
Python
46 lines
770 B
Python
# FANNKUCH benchmark
|
|
from math import factorial as fact
|
|
from sys import argv
|
|
from time import time
|
|
|
|
def perm(n, i):
|
|
p = [0] * n
|
|
|
|
for k in range(n):
|
|
f = fact(n - 1 - k)
|
|
p[k] = i // f
|
|
i = i % f
|
|
|
|
for k in range(n - 1, -1, -1):
|
|
for j in range(k - 1, -1, -1):
|
|
if p[j] <= p[k]:
|
|
p[k] += 1
|
|
|
|
return p
|
|
|
|
n = int(argv[1])
|
|
max_flips = 0
|
|
|
|
t0 = time()
|
|
for idx in range(fact(n)):
|
|
p = perm(n, idx)
|
|
flips = 0
|
|
k = p[0]
|
|
|
|
while k:
|
|
i = 0
|
|
j = k
|
|
while i < j:
|
|
p[i], p[j] = p[j], p[i]
|
|
i += 1
|
|
j -= 1
|
|
|
|
k = p[0]
|
|
flips += 1
|
|
|
|
max_flips = max(flips, max_flips)
|
|
|
|
print(f'Pfannkuchen({n}) = {max_flips}')
|
|
t1 = time()
|
|
print(t1 - t0)
|