Nim
That was the rough first day for me. Part 1 was ok.
For part 2 I didn't want to go the easy route, so I was trying to find simple formulaic solution, but my answer was always off by some amount. And debugging was hard, because I I was getting the right answer for example input.
After 40 minutes I wiped everything clean and wrote a bruteforce.
Later that day I returned and solved this one properly. I had to draw many schemes and consider all the edge cases carefully to come up with code below.
type
AOCSolution[T,U] = tuple[part1: T, part2: U]
proc solve(input: string): AOCSolution[int, int] =
var dial = 50
for line in input.splitLines():
let value = parseInt(line[1..^1])
let sign = if line[0] == 'L': -1 else: 1
let offset = value mod 100
result.part2 += value div 100
if dial != 0:
if sign < 0 and offset >= dial or
sign > 0 and offset >= (100-dial): inc result.part2
dial = (dial + offset * sign).euclmod(100)
if dial == 0: inc result.part1
Full solution at Codeberg: solution.nim