[py] Port 2016_03

This commit is contained in:
Joscha 2022-12-06 19:56:13 +01:00
parent a3d046c572
commit c8f033b32f
3 changed files with 47 additions and 46 deletions

View file

@ -1,45 +0,0 @@
import re
import sys
TRIANGLE_RE = r"\s*(\d+)\s+(\d+)\s+(\d+)\n"
def load_triangles(filename):
triangles = []
with open(filename, "r") as f:
for line in f:
match = re.fullmatch(TRIANGLE_RE, line)
a, b, c = match.groups()
a, b, c = int(a), int(b), int(c)
triangles.append((a, b, c))
return triangles
# PART 1
def is_valid(triangle):
a, b, c = sorted(triangle)
return a + b > c
def count_valid(triangles):
return len(list(filter(is_valid, triangles)))
# PART 2
def transform_triangles(triangles):
new_triangles = []
while triangles:
t1, t2, t3 = triangles[:3]
triangles = triangles[3:]
new_triangles.extend(zip(t1, t2, t3))
return new_triangles
def main(filename):
triangles = load_triangles(filename)
print(f"Solutions for {filename}")
valid = count_valid(triangles)
print(f"Part 1: {valid}")
valid_2 = count_valid(transform_triangles(triangles))
print(f"Part 2: {valid_2}")
if __name__ == "__main__":
for filename in sys.argv[1:]:
main(filename)

View file

@ -2,7 +2,7 @@ import sys
import argparse
from pathlib import Path
from .y2016 import d01, d02
from .y2016 import d01, d02, d03
from .y2017 import d01, d02, d03, d04, d05, d06, d07, d08, d09
from .y2018 import d01, d02, d03, d04, d05, d06, d07, d08, d09, d10, d11
from .y2020 import d10
@ -12,6 +12,7 @@ from .y2022 import d01, d02, d03, d04, d05, d06
DAYS = {
"2016_01": y2016.d01.solve,
"2016_02": y2016.d02.solve,
"2016_03": y2016.d03.solve,
"2017_01": y2017.d01.solve,
"2017_02": y2017.d02.solve,
"2017_03": y2017.d03.solve,

45
py/aoc/y2016/d03.py Normal file
View file

@ -0,0 +1,45 @@
import re
TRIANGLE_RE = r"\s*(\d+)\s+(\d+)\s+(\d+)"
def load_triangles(inputstr):
triangles = []
for line in inputstr.splitlines():
match = re.fullmatch(TRIANGLE_RE, line)
a, b, c = match.groups()
a, b, c = int(a), int(b), int(c)
triangles.append((a, b, c))
return triangles
# PART 1
def is_valid(triangle):
a, b, c = sorted(triangle)
return a + b > c
def count_valid(triangles):
return len(list(filter(is_valid, triangles)))
# PART 2
def transform_triangles(triangles):
new_triangles = []
while triangles:
t1, t2, t3 = triangles[:3]
triangles = triangles[3:]
new_triangles.extend(zip(t1, t2, t3))
return new_triangles
def solve(inputstr):
triangles = load_triangles(inputstr)
valid = count_valid(triangles)
print(f"Part 1: {valid}")
valid_2 = count_valid(transform_triangles(triangles))
print(f"Part 2: {valid_2}")