Files
python-aoc-2020/day16/part1-v2.py
2020-12-16 17:48:26 +01:00

27 lines
779 B
Python

#!/usr/bin/env python3
import re
import numpy as np
lines = (x.strip() for x in open("input.txt"))
REGEX_RANGES = re.compile(r"^([a-z ]+): (\d+)-(\d+) or (\d+)-(\d+)$")
groups = []
tickets = []
for line in lines:
match = REGEX_RANGES.match(line)
if match:
m_groups = match.groups()
groups.append(list(map(int, m_groups[1:])))
if "," in line:
tickets.append(tuple(map(int, line.split(','))))
groups = np.array(groups)
tickets = np.array(tickets, dtype=np.int32)
ranges = np.concatenate((groups[:, :2], groups[:, 2:]), axis=0)
valids = np.full(tickets.shape, False)
for idx, elem in np.ndenumerate(tickets):
valids[idx] = np.any(np.logical_and(ranges[:, 0] <= elem, elem <= ranges[:, 1]))
print(np.ma.array(tickets, mask=valids).sum())