Day 10.
This commit is contained in:
@@ -9,4 +9,5 @@
|
||||
- Day 7: 27:55 and 14:47 for leaderboard; okay, I would say
|
||||
- Day 8: 61:00 and 10:00 for leaderboard; I need template code for searching coordinate systems
|
||||
- Day 9: 58:00 and 7:32 for leaderboard; I need code for 2D stuff
|
||||
- Day 10:
|
||||
- Day 10: 25:20 and 12:17 for leaderboard; okay, okay
|
||||
- Day 11:
|
||||
|
||||
216
d10.py
Normal file
216
d10.py
Normal file
@@ -0,0 +1,216 @@
|
||||
import re
|
||||
from string import ascii_lowercase, ascii_uppercase
|
||||
|
||||
EXAMPLE = """
|
||||
addx 15
|
||||
addx -11
|
||||
addx 6
|
||||
addx -3
|
||||
addx 5
|
||||
addx -1
|
||||
addx -8
|
||||
addx 13
|
||||
addx 4
|
||||
noop
|
||||
addx -1
|
||||
addx 5
|
||||
addx -1
|
||||
addx 5
|
||||
addx -1
|
||||
addx 5
|
||||
addx -1
|
||||
addx 5
|
||||
addx -1
|
||||
addx -35
|
||||
addx 1
|
||||
addx 24
|
||||
addx -19
|
||||
addx 1
|
||||
addx 16
|
||||
addx -11
|
||||
noop
|
||||
noop
|
||||
addx 21
|
||||
addx -15
|
||||
noop
|
||||
noop
|
||||
addx -3
|
||||
addx 9
|
||||
addx 1
|
||||
addx -3
|
||||
addx 8
|
||||
addx 1
|
||||
addx 5
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx -36
|
||||
noop
|
||||
addx 1
|
||||
addx 7
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 2
|
||||
addx 6
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 1
|
||||
noop
|
||||
noop
|
||||
addx 7
|
||||
addx 1
|
||||
noop
|
||||
addx -13
|
||||
addx 13
|
||||
addx 7
|
||||
noop
|
||||
addx 1
|
||||
addx -33
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 2
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 8
|
||||
noop
|
||||
addx -1
|
||||
addx 2
|
||||
addx 1
|
||||
noop
|
||||
addx 17
|
||||
addx -9
|
||||
addx 1
|
||||
addx 1
|
||||
addx -3
|
||||
addx 11
|
||||
noop
|
||||
noop
|
||||
addx 1
|
||||
noop
|
||||
addx 1
|
||||
noop
|
||||
noop
|
||||
addx -13
|
||||
addx -19
|
||||
addx 1
|
||||
addx 3
|
||||
addx 26
|
||||
addx -30
|
||||
addx 12
|
||||
addx -1
|
||||
addx 3
|
||||
addx 1
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx -9
|
||||
addx 18
|
||||
addx 1
|
||||
addx 2
|
||||
noop
|
||||
noop
|
||||
addx 9
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx -1
|
||||
addx 2
|
||||
addx -37
|
||||
addx 1
|
||||
addx 3
|
||||
noop
|
||||
addx 15
|
||||
addx -21
|
||||
addx 22
|
||||
addx -6
|
||||
addx 1
|
||||
noop
|
||||
addx 2
|
||||
addx 1
|
||||
noop
|
||||
addx -10
|
||||
noop
|
||||
noop
|
||||
addx 20
|
||||
addx 1
|
||||
addx 2
|
||||
addx 2
|
||||
addx -6
|
||||
addx -11
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
"""
|
||||
|
||||
def clean(text: str) -> list[str]:
|
||||
return list(filter(lambda l: l.strip() != "", text.splitlines()))
|
||||
|
||||
def solve(lines: list[str]):
|
||||
res = 0
|
||||
inst_count = 0
|
||||
value_x = 1
|
||||
cycles = [20, 60, 100, 140, 180, 220]
|
||||
for i, line in enumerate(lines):
|
||||
inst_count_before = inst_count
|
||||
addx = 0
|
||||
if line.startswith("noop"):
|
||||
inst_count += 1
|
||||
elif line.startswith("addx"):
|
||||
v = int(line.split()[1])
|
||||
value_x += v
|
||||
inst_count += 2
|
||||
addx = v
|
||||
else:
|
||||
raise Exception("Unexpected {line}")
|
||||
|
||||
for c in cycles:
|
||||
if inst_count_before < c and inst_count >= c:
|
||||
strength = (value_x - addx) * c
|
||||
res += strength
|
||||
print(inst_count, strength)
|
||||
# 15:10
|
||||
return res
|
||||
|
||||
def solve2(lines: list[str]):
|
||||
x_values = [1]
|
||||
for _, line in enumerate(lines):
|
||||
if line.startswith("noop"):
|
||||
x_values.append(x_values[-1])
|
||||
elif line.startswith("addx"):
|
||||
x_values.append(x_values[-1])
|
||||
v = int(line.split()[1])
|
||||
x_values.append(x_values[-1] + v)
|
||||
|
||||
s = ""
|
||||
for i, x in enumerate(x_values):
|
||||
col = i % 40
|
||||
if col == 0:
|
||||
s += "\n"
|
||||
if col == x - 1 or col == x or col == x + 1:
|
||||
s += "#"
|
||||
else:
|
||||
s += " "
|
||||
print(s)
|
||||
# 25:20
|
||||
|
||||
|
||||
def main():
|
||||
example = clean(EXAMPLE)
|
||||
print("Example 1:", solve(example))
|
||||
|
||||
data = clean(open("i10.txt").read())
|
||||
print("Solution 1:", solve(data))
|
||||
|
||||
data = clean(open("i10.txt").read())
|
||||
print("Solution 2:", solve2(data))
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user