forked from adnanaziz/EPIJudge
-
Notifications
You must be signed in to change notification settings - Fork 0
/
apply_permutation.py
30 lines (23 loc) · 938 Bytes
/
apply_permutation.py
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
from test_framework import generic_test
def apply_permutation(perm, A):
for i in range(len(A)):
# Check if the element at index i has not been moved by checking if
# perm[i] is nonnegative.
next = i
while perm[next] >= 0:
A[i], A[perm[next]] = A[perm[next]], A[i]
temp = perm[next]
# Subtracts len(perm) from an entry in perm to make it negative,
# which indicates the corresponding move has been performed.
perm[next] -= len(perm)
next = temp
# Restore perm.
perm[:] = [a + len(perm) for a in perm]
def apply_permutation_wrapper(perm, A):
apply_permutation(perm, A)
return A
if __name__ == '__main__':
exit(
generic_test.generic_test_main("apply_permutation.py",
"apply_permutation.tsv",
apply_permutation_wrapper))