Implement main logic for counting crossings and determining final position in the lock mechanism

This commit is contained in:
2025-12-07 14:10:08 +01:00
parent 10b1cb92a6
commit 33422840a9
4 changed files with 33 additions and 1 deletions

4036
Day1/Part1/input.txt Normal file

File diff suppressed because it is too large Load Diff

30
Day1/Part1/main.py Normal file
View File

@@ -0,0 +1,30 @@
START_POS = 50
MODULO = 100
position = START_POS
anzahl_null = 0
with open("input.txt", encoding="utf-8") as f:
for line in f:
line = line.strip()
if not line:
continue
richtung = line[0].upper()
schritte = int(line[1:])
if richtung == "L":
position = (position - schritte) % MODULO
elif richtung == "R":
position = (position + schritte) % MODULO
else:
raise ValueError(f"Unbekannte Richtung in Zeile: {line}")
if position == 0:
anzahl_null += 1
print("Anzahl, wie oft 0 erreicht wird:", anzahl_null)
print("Endposition:", position)
# times 0 is reached: 984
# end position: 90

4036
Day1/Part2/input.txt Normal file

File diff suppressed because it is too large Load Diff

32
Day1/Part2/main.py Normal file
View File

@@ -0,0 +1,32 @@
def count_crossings_segment(P, delta):
P_new = P + delta
if delta > 0:
# positive Drehung: 100 * m in (P, P_new]
crossings = (P_new // 100) - (P // 100)
elif delta < 0:
# negative Drehung: 100 * m in [P_new, P-1]
crossings = ((P - 1) // 100) - ((P_new - 1) // 100)
else:
crossings = 0
return crossings, P_new
passes = 0
P = 50 # „entfaltete“ Position, nicht mod 100!
with open("input.txt", encoding="utf-8") as f:
for line in f:
line = line.strip()
if not line:
continue
d = line[0].upper()
steps = int(line[1:])
delta = steps if d == 'R' else -steps
c, P = count_crossings_segment(P, delta)
passes += c
final_pos = P % 100
print("Anzahl 0-PASSAGEN:", passes)
print("Endposition auf dem Schloss:", final_pos)