mirror of
https://github.com/ershisan99/advent-of-code.git
synced 2025-12-16 20:49:24 +00:00
2015 day 6 refactored a bit
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user