Skip to content

Instantly share code, notes, and snippets.

@igorvanloo
Created July 24, 2021 13:23
Show Gist options
  • Save igorvanloo/77539febee5cbd7891381380846e0261 to your computer and use it in GitHub Desktop.
Save igorvanloo/77539febee5cbd7891381380846e0261 to your computer and use it in GitHub Desktop.
Problem 79
def all_numbers(alist):
nums = set()
for x in alist:
for y in x:
nums.add(y)
return list(nums)
def method1():
possible_numbers = (all_numbers(keys))
possible_passcode = list(itertools.permutations(possible_numbers))
for y in range(len(possible_passcode)):
count = 0
for x in range(len(keys)):
a, b, c = keys[x][0], keys[x][1], keys[x][2]
a_index = possible_passcode[y].index(a)
b_index = possible_passcode[y].index(b)
c_index = possible_passcode[y].index(c)
if a_index < b_index and b_index < c_index:
count += 1
if count == len(keys):
temp_var = "".join(str(possible_passcode[y][i]) for i in range(len(possible_passcode[y])))
return temp_var
def method2():
possible_numbers = sorted(all_numbers(keys))
mydict = {}
for x in possible_numbers:
mydict[x] = set()
for key in keys:
mydict[key[2]].add(key[1])
mydict[key[1]].add(key[0])
passcode = ""
while len(possible_numbers) != 0:
for x in possible_numbers:
if len(mydict[x]) == 0:
passcode += str(x)
possible_numbers.remove(x)
del mydict[x]
break
for y in possible_numbers:
try:
mydict[y].remove(x)
except KeyError:
pass
return passcode
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment