2015 day 6 refactored a bit

This commit is contained in:
2024-12-15 21:22:50 +01:00
parent 1d5966de0f
commit 87efe262dd
2 changed files with 27 additions and 21 deletions

View File

@@ -1,15 +1,13 @@
import os import os
import re import re
from collections import defaultdict
file_path = os.path.join(os.path.dirname(__file__), "./input.txt") file_path = os.path.join(os.path.dirname(__file__), "./input.txt")
# file_path = os.path.join(os.path.dirname(__file__), "./test-input.txt") # file_path = os.path.join(os.path.dirname(__file__), "./test-input.txt")
input = open(file_path).read().strip() input = open(file_path).read().strip()
lines = input.split("\n") lines = input.split("\n")
lights = dict() lights = defaultdict(bool)
for i in range(0, 1000):
for j in range(0, 1000):
lights[(i, j)] = 0
for line in lines: for line in lines:
match = re.findall(r"(.*?)(\d*,\d*) through (\d*,\d*)", line) match = re.findall(r"(.*?)(\d*,\d*) through (\d*,\d*)", line)
if not match: if not match:
@@ -21,14 +19,11 @@ for line in lines:
for i in range(start[0], end[0] + 1): for i in range(start[0], end[0] + 1):
for j in range(start[1], end[1] + 1): for j in range(start[1], end[1] + 1):
if instruction == "turn on": if instruction == "turn on":
lights[(i, j)] += 1 lights[(i, j)] = True
elif instruction == "turn off": elif instruction == "turn off":
if lights[(i, j)] == 0: lights[(i, j)] = False
continue
else:
lights[(i, j)] -= 1
else: else:
lights[(i, j)] += 2 lights[(i, j)] = not lights[(i, j)]
count = 0 count = 0
for v in lights.values(): for v in lights.values():
count += v count += v

View File

@@ -1,3 +1,4 @@
from collections import defaultdict
import os import os
import re import re
@@ -6,17 +7,27 @@ file_path = os.path.join(os.path.dirname(__file__), "./input.txt")
input = open(file_path).read().strip() input = open(file_path).read().strip()
lines = input.split("\n") lines = input.split("\n")
count = 0 lights = defaultdict(int)
for line in lines: for line in lines:
if not any( match = re.findall(r"(.*?)(\d*,\d*) through (\d*,\d*)", line)
[ if not match:
len(re.findall(pair, line)) >= 2
for pair in {line[i] + line[i + 1] for i in range(len(line) - 1)}
]
) or not any([line[i + 2] == line[i] for i in range(len(line) - 2)]):
continue continue
instruction, start, end = match[0]
count += 1 instruction = instruction.strip()
start = tuple(map(int, start.split(",")))
end = tuple(map(int, end.split(",")))
for i in range(start[0], end[0] + 1):
for j in range(start[1], end[1] + 1):
if instruction == "turn on":
lights[(i, j)] += 1
elif instruction == "turn off":
if lights[(i, j)] == 0:
continue
else:
lights[(i, j)] -= 1
else:
lights[(i, j)] += 2
count = 0
for v in lights.values():
count += v
print(count) print(count)