Reorganize makefile and scripts.
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
def fannkuch(n)
|
||||
p = (0..n).to_a
|
||||
s = p.dup
|
||||
q = p.dup
|
||||
sign = 1
|
||||
sum = maxflips = 0
|
||||
while(true)
|
||||
# flip.
|
||||
|
||||
if (q1 = p[1]) != 1
|
||||
q[0..-1] = p
|
||||
flips = 1
|
||||
until (qq = q[q1]) == 1
|
||||
q[q1] = q1
|
||||
if q1 >= 4
|
||||
i, j = 2, q1 - 1
|
||||
while i < j
|
||||
q[i], q[j] = q[j], q[i]
|
||||
i += 1
|
||||
j -= 1
|
||||
end
|
||||
end
|
||||
q1 = qq
|
||||
flips += 1
|
||||
end
|
||||
sum += sign * flips
|
||||
maxflips = flips if flips > maxflips # New maximum?
|
||||
|
||||
end
|
||||
# Permute.
|
||||
|
||||
if sign == 1
|
||||
# Rotate 1<-2.
|
||||
|
||||
p[1], p[2] = p[2], p[1]
|
||||
sign = -1
|
||||
else
|
||||
# Rotate 1<-2 and 1<-2<-3.
|
||||
|
||||
p[2], p[3] = p[3], p[2]
|
||||
sign = 1
|
||||
i = 3
|
||||
while i <= n && s[i] == 1
|
||||
return [sum, maxflips] if i == n # Out of permutations.
|
||||
|
||||
s[i] = i
|
||||
# Rotate 1<-...<-i+1.
|
||||
|
||||
t = p.delete_at(1)
|
||||
i += 1
|
||||
p.insert(i, t)
|
||||
end
|
||||
s[i] -= 1 if i <= n
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
n = 9
|
||||
sum, flips = fannkuch(n)
|
||||
printf "%d\nPfannkuchen(%d) = %d\n", sum, n, flips
|
||||
Reference in New Issue
Block a user