diff --git a/2025/d07.py b/2025/d07.py new file mode 100644 index 0000000..d12f63f --- /dev/null +++ b/2025/d07.py @@ -0,0 +1,59 @@ +from lib import get_data, Grid2D +from collections import defaultdict + + +data = """.......S....... +............... +.......^....... +............... +......^.^...... +............... +.....^.^.^..... +............... +....^.^...^.... +............... +...^.^...^.^... +............... +..^...^.....^.. +............... +.^.^.^.^.^...^. +...............""" +data = get_data(__file__) + +g = Grid2D(data) +beams = [g.find('S')[0][1]] + +splits = 0 +for row in range(1, g.n_rows - 1): + new_beams = set() + for beam in beams: + field = g[(row, beam)] + if field == "^": + splits += 1 + new_beams.add(beam - 1) + new_beams.add(beam + 1) + elif field == ".": + new_beams.add(beam) + else: + assert False, "unexpected field" + beams = list(new_beams) + # print(beams) + +print(splits) + +beams = {g.find('S')[0][1]: 1} +for row in range(1, g.n_rows - 1): + new_beams = defaultdict(int) + for beam, count in beams.items(): + field = g[(row, beam)] + if field == "^": + new_beams[beam - 1] += count + new_beams[beam + 1] += count + elif field == ".": + new_beams[beam] += count + else: + assert False, "unexpected field" + beams = new_beams + +print(sum(beams.values())) + diff --git a/README.md b/README.md index cf8fdc5..7ab1536 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,13 @@ stressful and this will actually be more fun. Thank you Eric Wastl and let's go! time because I always kind of avoid that. I could probably decrease the complexity from O(n^2) to O(n log(n)) but I am happy that I've implemented merging at all. -- Day 6: +- Day 6: Transposing some rows and cols. Fun and good to keep the brain fit + but not really hard. I would have been way too slow for the leaderboard + in pre-AI years. +- Day 7: Grid puzzle that required non-naiv implementation for part 2. Took + me a second to realize that I could not save the coordinates by list but + had to use a count to be efficient. +- Day 8: ## AoC 2024