66 lines
1.9 KiB
Python
66 lines
1.9 KiB
Python
|
#!/bin/python3
|
||
|
import sys,time,re
|
||
|
from pprint import pprint
|
||
|
sys.path.insert(0, '../../')
|
||
|
from fred import list2int,get_re,nprint,lprint,loadFile
|
||
|
start_time = time.time()
|
||
|
|
||
|
input_f = 'input'
|
||
|
|
||
|
#########################################
|
||
|
# #
|
||
|
# Part 1 #
|
||
|
# #
|
||
|
#########################################
|
||
|
def part1():
|
||
|
instructions = []
|
||
|
with open(input_f) as file:
|
||
|
for line in file:
|
||
|
instructions.append(list(line.rstrip()))
|
||
|
|
||
|
keys = []
|
||
|
locks = []
|
||
|
|
||
|
for i in range(0,len(instructions),8):
|
||
|
tmp = []
|
||
|
# lock
|
||
|
if instructions[i] == list('#####'):
|
||
|
|
||
|
for l in range(5):
|
||
|
tmp.append(sum(element == '#' for element in [row[l] for row in instructions[i:i+7]])-1)
|
||
|
if tmp not in locks:
|
||
|
locks.append(tmp)
|
||
|
|
||
|
# key
|
||
|
elif instructions[i] == list('.....'):
|
||
|
for l in range(5):
|
||
|
tmp.append(sum(element == '#' for element in [row[l] for row in instructions[i:i+7]])-1)
|
||
|
if tmp not in keys:
|
||
|
keys.append(tmp)
|
||
|
fits = 0
|
||
|
works = True
|
||
|
for k in keys:
|
||
|
for l in locks:
|
||
|
for i in range(5):
|
||
|
if k[i] + l[i] > 5:
|
||
|
works = False
|
||
|
if works:
|
||
|
fits += 1
|
||
|
works = True
|
||
|
|
||
|
return fits
|
||
|
|
||
|
start_time = time.time()
|
||
|
print('Part 1:',part1(), '\t\t', round((time.time() - start_time)*1000), 'ms')
|
||
|
|
||
|
|
||
|
#########################################
|
||
|
# #
|
||
|
# Part 2 #
|
||
|
# #
|
||
|
#########################################
|
||
|
def part2():
|
||
|
return
|
||
|
|
||
|
start_time = time.time()
|
||
|
print('Part 2:',part2(), '\t\t', round((time.time() - start_time)*1000), 'ms')
|