|
|
@@ -0,0 +1,73 @@
|
|
|
+#!/usr/bin/env python
|
|
|
+from itertools import permutations
|
|
|
+
|
|
|
+codes = [319, 680, 180, 690, 129, 620, 762, 689, 762, 318, 368, 710, 720, 710,
|
|
|
+ 629, 168, 160, 689, 716, 731, 736, 729, 316, 729, 729, 710, 769, 290,
|
|
|
+ 719, 680, 318, 389, 162, 289, 162, 718, 729, 319, 790, 680, 890, 362,
|
|
|
+ 319, 760, 316, 729, 380, 319, 728, 716]
|
|
|
+
|
|
|
+def indices(partial):
|
|
|
+ ind = []
|
|
|
+ start = 0
|
|
|
+
|
|
|
+ for c in partial:
|
|
|
+ index = passcode[start:].find(c)
|
|
|
+
|
|
|
+ if index == -1:
|
|
|
+ return []
|
|
|
+
|
|
|
+ ind.append(index + start)
|
|
|
+ start = index + 1
|
|
|
+
|
|
|
+ return ind
|
|
|
+
|
|
|
+def match(code):
|
|
|
+ partials = (code, code[1:], code[:2], code[::2], code[0], code[1], code[2])
|
|
|
+
|
|
|
+ for i, partial in enumerate(partials):
|
|
|
+ ind = indices(partial)
|
|
|
+
|
|
|
+ if ind:
|
|
|
+ return partial, i, ind
|
|
|
+
|
|
|
+ return None, None, None
|
|
|
+
|
|
|
+#codes.sort()
|
|
|
+codes = map(str, set(codes))
|
|
|
+passcode = codes.pop(0)
|
|
|
+print passcode
|
|
|
+
|
|
|
+while len(codes):
|
|
|
+ possibilities = [(0, -1, [])]
|
|
|
+
|
|
|
+ for index, code in enumerate(codes):
|
|
|
+ partial, i, ind = match(code)
|
|
|
+
|
|
|
+ if ind:
|
|
|
+ #print code, partial, ind
|
|
|
+ possibilities.append((index, i, ind, partial))
|
|
|
+
|
|
|
+ possibilities.sort(lambda a, b: cmp(len(a[2]), len(b[2])))
|
|
|
+ #print possibilities
|
|
|
+ index, i, ind, partial = possibilities[-1]
|
|
|
+ code = codes.pop(index)
|
|
|
+
|
|
|
+ if i == 1:
|
|
|
+ passcode = code[0] + passcode
|
|
|
+ elif i == 2:
|
|
|
+ passcode += code[2]
|
|
|
+ elif i == 3:
|
|
|
+ passcode = passcode[:ind[0]] + code[1] + passcode[ind[0]:]
|
|
|
+ elif i == 4:
|
|
|
+ passcode += code[1:]
|
|
|
+ elif i == 5:
|
|
|
+ passcode = code[0] + passcode + code[2]
|
|
|
+ elif i == 6:
|
|
|
+ passcode = code[:2] + passcode
|
|
|
+ elif i == -1:
|
|
|
+ passcode += code
|
|
|
+
|
|
|
+ print code, partial, passcode
|
|
|
+
|
|
|
+ #print len(passcode), len(codes) * 3, passcode
|
|
|
+ #print passcode
|