Day 1: Secret Entrance
Megathread guidelines
- Keep top level comments as only solutions, if you want to say something other than a solution put it in a new post. (replies to comments can be whatever)
- You can send code in code blocks by using three backticks, the code, and then three backticks or use something such as https://topaz.github.io/paste/ if you prefer sending it through a URL
FAQ
- What is this?: Here is a post with a large amount of details: https://programming.dev/post/6637268
- Where do I participate?: https://adventofcode.com/
- Is there a leaderboard for the community?: We have a programming.dev leaderboard with the info on how to join in this post: https://programming.dev/post/6631465


Python
Solved part 1 in a matter of minutes, spent literal days tinkering with part 2 before resorting to brute force, just to finally get a correct result, which allowed me to fix the more optimised approach. Brute force still turned out surprisingly performant, scaling linearly in time with the rotation distance and sub-linearly in memory.
from itertools import accumulate from math import copysign from pathlib import Path from typing import List def parse_input(input: str) -> List[int]: return list(map(lambda s: int(f"{'-' if s[0] == 'L' else ''}{s[1:]}"), input.splitlines())) def part_one(input: str) -> int: return len(list(filter(lambda x: x == 0, accumulate(parse_input(input), lambda v, i: (i + v) % 100, initial=50)))) def part_two(input: str) -> int: v, c = 50, 0 for i in parse_input(input): c += i // (d := int(copysign(100, i))) # full rotations count_underflow = v != 0 # was counted in previous iteration v += (i % d) # remainder if count_underflow: c += abs(v // 100) # under-/overflows if v == 0: c += 1 v %= 100 return c if __name__ == "__main__": input = Path("_2025/_1/input").read_text("utf-8") print(part_one(input)) print(part_two(input))Brute force part 2
def part_two(input: str) -> int: from itertools import chain return len(list(filter( lambda x: x == 0, accumulate(chain(*[[int(copysign(1, i))] * abs(i) for i in parse_input(input)]), lambda v, i: (i + v) % 100, initial = 50) )))