Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,30 @@
|
|||
def missing_permutation(arr):
|
||||
"Find the missing permutation in an array of N! - 1 permutations."
|
||||
|
||||
# We won't validate every precondition, but we do have some basic
|
||||
# guards.
|
||||
if len(arr) == 0: raise Exception("Need more data")
|
||||
if len(arr) == 1:
|
||||
return [arr[0][1] + arr[0][0]]
|
||||
|
||||
# Now we know that for each position in the string, elements should appear
|
||||
# an even number of times (N-1 >= 2). We can use a set to detect the element appearing
|
||||
# an odd number of times. Detect odd occurrences by toggling admission/expulsion
|
||||
# to and from the set for each value encountered. At the end of each pass one element
|
||||
# will remain in the set.
|
||||
missing_permutation = ''
|
||||
for pos in range(len(arr[0])):
|
||||
s = set()
|
||||
for permutation in arr:
|
||||
c = permutation[pos]
|
||||
if c in s:
|
||||
s.remove(c)
|
||||
else:
|
||||
s.add(c)
|
||||
missing_permutation += list(s)[0]
|
||||
return missing_permutation
|
||||
|
||||
given = '''ABCD CABD ACDB DACB BCDA ACBD ADCB CDAB DABC BCAD CADB CDBA
|
||||
CBAD ABDC ADBC BDCA DCBA BACD BADC BDAC CBDA DBCA DCAB'''.split()
|
||||
|
||||
print missing_permutation(given)
|
||||
Loading…
Add table
Add a link
Reference in a new issue