This commit is contained in:
2025-12-01 17:19:26 -05:00
parent b170ca2412
commit 8c047db9e5
2 changed files with 4117 additions and 0 deletions

81
2025/01/solution.py Executable file
View File

@@ -0,0 +1,81 @@
#!/usr/bin/env python3
import sys
import pathlib
def read_input():
path = pathlib.Path(sys.argv[1]) if len(sys.argv) > 1 else pathlib.Path("input.txt")
return path.read_text().rstrip("\n")
def parse(data):
return data.splitlines()
def part1(data):
password = 0
postion = 50
for rotation in data:
direction = rotation[0]
dist = int(rotation[1:])
if direction == "R":
postion += dist
else: # left case
postion -= dist
postion %= 100
if postion == 0:
password += 1
return password
def part2(data):
password = 0
pos = 50
modulo = 100
for rotation in data:
direction = rotation[0]
num = int(rotation[1:])
old_pos = pos
if direction == 'L':
pos -= num
else:
pos += num
if old_pos != pos:
old = old_pos
new = pos
if old < new:
first = (old // modulo + 1) * modulo
last = (new // modulo) * modulo
if first <= new:
crosses = (last - first) // modulo + 1
else:
crosses = 0
else:
if new % modulo == 0:
first = new
else:
first = (new // modulo + 1) * modulo
last = ((old - 1) // modulo) * modulo
if first <= last:
crosses = (last - first) // modulo + 1
else:
crosses = 0
else:
crosses = 0
password += crosses
return password
def main():
raw = read_input()
data = parse(raw)
r1 = part1(data)
r2 = part2(data)
print(r1)
print(r2)
if __name__ == "__main__":
main()