-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsolution.py
46 lines (34 loc) · 1.94 KB
/
solution.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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# Alright, detective, one of our colleagues successfully observed our target person, Robby the robber.
# We followed him to a secret warehouse, where we assume to find all the stolen stuff.
# The door to this warehouse is secured by an electronic combination lock.
# Unfortunately our spy isn't sure about the PIN he saw, when Robby entered it.
# The keypad has the following layout:
# ┌───┬───┬───┐
# │ 1 │ 2 │ 3 │
# ├───┼───┼───┤
# │ 4 │ 5 │ 6 │
# ├───┼───┼───┤
# │ 7 │ 8 │ 9 │
# └───┼───┼───┘
# │ 0 │
# └───┘
# He noted the PIN 1357, but he also said,
# it is possible that each of the digits he saw could actually be another adjacent digit
# (horizontally or vertically, but not diagonally).
# E.g. instead of the 1 it could also be the 2 or 4.
# And instead of the 5 it could also be the 2, 4, 6 or 8.
# He also mentioned, he knows this kind of locks.
# You can enter an unlimited amount of wrong PINs, they never finally lock the system or sound the alarm.
# That's why we can try out all possible (*) variations.
# * possible in sense of: the observed PIN itself and all variations considering the adjacent digits
# Can you help us to find all those variations?
# It would be nice to have a function, that returns an array (or a list in Java and C#)
# of all variations for an observed PIN with a length of 1 to 8 digits.
# We could name the function getPINs (get_pins in python, GetPINs in C#).
# But please note that all PINs, the observed one and also the results, must be strings,
# because of potentially leading '0's. We already prepared some test cases for you.
# Detective, we count on you!
from itertools import product
variants = ('08', '124', '2135', '326', '4157', '52468', '6359', '748', '85790', '968')
def get_pins(observed):
return [''.join(p) for p in product(*(variants[int(d)] for d in observed))]