diff --git a/README.md b/README.md index a47835f..75f9a22 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,13 @@ # Times -- Day 1: 7:52 ... so slow brah :/ top 100 required 2:05... -- Day 2: 22:30 ... I mistyped the first and second was just bad top 100 would have been 6:16 (doable?) -- Day 3: 13:08 actually decent but top 100 required 5:24 -- Day 4: 7:08 but top 100 required 3:33 still okay -- Day 5: 11:56 but 7:58 for top 100... getting better? -- Day 6: 3:50 but 2:25 for leaderboard :D -- 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 1: 7:52 ... so slow brah :/ top 100 required 2:05... +- Day 2: 22:30 ... I mistyped the first and second was just bad top 100 would have been 6:16 (doable?) +- Day 3: 13:08 actually decent but top 100 required 5:24 +- Day 4: 7:08 but top 100 required 3:33 still okay +- Day 5: 11:56 but 7:58 for top 100... getting better? +- Day 6: 3:50 but 2:25 for leaderboard :D +- 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: 25:20 and 12:17 for leaderboard; okay, okay +- Day 11: diff --git a/d10.py b/d10.py new file mode 100644 index 0000000..d64896e --- /dev/null +++ b/d10.py @@ -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() diff --git a/i10.txt b/i10.txt new file mode 100644 index 0000000..6402c1a --- /dev/null +++ b/i10.txt @@ -0,0 +1,145 @@ +noop +noop +noop +addx 3 +addx 7 +noop +noop +noop +noop +addx 6 +noop +addx -1 +noop +addx 5 +addx 1 +noop +addx 4 +noop +noop +noop +noop +addx 6 +addx -1 +noop +addx 3 +addx -13 +addx -22 +noop +noop +addx 3 +addx 2 +addx 11 +addx -4 +addx 11 +addx -10 +addx 2 +addx 5 +addx 2 +addx -2 +noop +addx 7 +addx 3 +addx -2 +addx 2 +addx 5 +addx 2 +addx -2 +addx -8 +addx -27 +addx 5 +addx 2 +addx 21 +addx -21 +addx 3 +addx 5 +addx 2 +addx -3 +addx 4 +addx 3 +addx 1 +addx 5 +noop +noop +noop +noop +addx 3 +addx 1 +addx 6 +addx -31 +noop +addx -4 +noop +noop +noop +noop +addx 3 +addx 7 +noop +addx -1 +addx 1 +addx 5 +noop +addx 1 +noop +addx 2 +addx -8 +addx 15 +addx 3 +noop +addx 2 +addx 5 +noop +noop +noop +addx -28 +addx 11 +addx -20 +noop +addx 7 +addx -2 +addx 7 +noop +addx -2 +noop +addx -6 +addx 11 +noop +addx 3 +addx 2 +noop +noop +addx 7 +addx 3 +addx -2 +addx 2 +addx 5 +addx 2 +addx -16 +addx -10 +addx -11 +addx 27 +addx -20 +noop +addx 2 +addx 3 +addx 5 +noop +noop +noop +addx 3 +addx -2 +addx 2 +noop +addx -14 +addx 21 +noop +addx -6 +addx 12 +noop +addx -21 +addx 24 +addx 2 +noop +noop +noop