···11+import fileinput
22+from itertools import product
33+44+from utils import transposed
55+66+77+KEYS = []
88+LOCKS = []
99+1010+block = []
1111+for line in fileinput.input():
1212+ if line == '\n':
1313+ if block[0][0] == '#':
1414+ KEYS.append(transposed(block))
1515+ else:
1616+ LOCKS.append(transposed(block))
1717+ block = []
1818+ else:
1919+ block.append(line.strip())
2020+2121+# The last image is a lock.
2222+LOCKS.append(block)
2323+2424+# Solve problem.
2525+KEYS = [[pin.count('#') for pin in key] for key in KEYS]
2626+LOCKS = [[pin.count('#') for pin in lock] for lock in LOCKS]
2727+print("Part 1:", sum(1 if all(a + b <= 7 for a, b in zip(key, lock)) else 0 for key, lock in product(KEYS, LOCKS)))