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)
|