days 3 and some of 4
This commit is contained in:
parent
d6c1d10fca
commit
55c0fa7151
33
2018/03.py
Normal file
33
2018/03.py
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
from collections import defaultdict
|
||||||
|
import re
|
||||||
|
|
||||||
|
|
||||||
|
def iter_claim(c):
|
||||||
|
ident, left, top, width, height = c
|
||||||
|
for v in range(height):
|
||||||
|
for h in range(width):
|
||||||
|
yield left + h, top + v
|
||||||
|
|
||||||
|
|
||||||
|
with open('data/03.txt') as f:
|
||||||
|
data = [r for r in f]
|
||||||
|
|
||||||
|
regex = re.compile(r'#(\d+) @ (\d+),(\d+): (\d+)x(\d+)')
|
||||||
|
pixels = defaultdict(set)
|
||||||
|
claims = []
|
||||||
|
for line in data:
|
||||||
|
claim = tuple(int(x) for x in regex.match(line).groups())
|
||||||
|
claims.append(claim)
|
||||||
|
|
||||||
|
for coords in iter_claim(claim):
|
||||||
|
pixels[coords].add(claim[0])
|
||||||
|
|
||||||
|
print(f'Part 1: {sum(1 for i in pixels.values() if len(i) > 1)}\n')
|
||||||
|
|
||||||
|
for claim in claims:
|
||||||
|
if all(len(pixels[coords]) == 1 for coords in iter_claim(claim)):
|
||||||
|
print(f'Part 2: {claim[0]}\n')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
26
2018/04.py
Normal file
26
2018/04.py
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
from collections import defaultdict
|
||||||
|
from datetime import datetime
|
||||||
|
import re
|
||||||
|
|
||||||
|
|
||||||
|
with open('data/04.txt') as f:
|
||||||
|
regex = re.compile(r'\[(\d{4}-\d{2}-\d{2} \d{2}:\d{2})\](?: Guard #(\d+)){0,1} (.+ .+)')
|
||||||
|
events = []
|
||||||
|
for line in f:
|
||||||
|
dt, guard_id, event_type = regex.match(line).groups()
|
||||||
|
dt = datetime.strptime(dt, '%Y-%m-%d %H:%M')
|
||||||
|
guard_id = 0 if guard_id is None else int(guard_id)
|
||||||
|
events.append([dt, guard_id, event_type])
|
||||||
|
events.sort(key=lambda e: e[0])
|
||||||
|
|
||||||
|
|
||||||
|
by_minute = defaultdict(lambda: defaultdict(list))
|
||||||
|
by_guard = defaultdict(lambda: defaultdict(list))
|
||||||
|
total_time_asleep = defaultdict(int)
|
||||||
|
|
||||||
|
current_guard_id = None
|
||||||
|
spans = []
|
||||||
|
for event in events:
|
||||||
|
dt, guard_id, event_type = event
|
||||||
|
if event_type = 'begins shift':
|
||||||
|
current_guard_id = guard_id
|
1247
2018/data/03.txt
Normal file
1247
2018/data/03.txt
Normal file
File diff suppressed because it is too large
Load Diff
1041
2018/data/04.txt
Normal file
1041
2018/data/04.txt
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user