Files
adventofcode2022/day04/part2.py
2022-12-06 07:14:27 +01:00

59 lines
1.3 KiB
Python

from __future__ import annotations
import argparse
import os.path
import pytest
import support
INPUT_TXT = os.path.join(os.path.dirname(__file__), 'input.txt')
from string import ascii_letters
def compute(s: str):
counter = 0
for line in s.split('\n'):
try:
first, second = line.split(',')
except ValueError:
continue
start, end = first.split('-')
enc_start, enc_end = second.split('-')
start, end, enc_start, enc_end = int(start), int(end), int(enc_start), int(enc_end)
rg = range(start, end + 1)
enc_rg = list(range(enc_start, enc_end + 1))
for i in rg:
if i in enc_rg:
counter += 1
break
return counter
@pytest.mark.parametrize(
('input_s', 'expected'),
(
('2-8,3-7', 1),
('2-6,4-8\n2-8,3-7', 2),
)
)
def test(input_s: str, expected: int) -> None:
assert compute(input_s) == expected
def main() -> int:
parser = argparse.ArgumentParser()
parser.add_argument('data_file', nargs='?', default=INPUT_TXT)
args = parser.parse_args()
with open(args.data_file) as f, support.timing():
print(compute(f.read()))
return 0
if __name__ == '__main__':
raise SystemExit(main())