Analysiere Zahlen (als Strings) auf wiederkehrende Muster:
- Teil 1: Finde Zahlen, deren erste Hälfte gleich der zweiten Hälfte ist
- Teil 2: Finde Zahlen, die aus wiederholten Mustern bestehen
Bereiche von Zahlen, getrennt durch Kommas:
- Format:
start-ende,start-ende,... - Beispiel:
100-200,500-600→ Alle Zahlen von 100-200 und 500-600
def werte_generieren():
return (str(wert) for element in aufgabe.text.split(",")
for start, ende in [map(int, element.split("-"))]
for wert in range(start, ende + 1))- Generator: Speichersparend, generiert Zahlen on-the-fly
- Nested Loop: Für jeden Bereich → Alle Zahlen als Strings
def aufgabe1(data):
if len(data) % 2 == 0:
aufgabe.loesung1 += int(data) if data[:len(data) // 2] == data[len(data) // 2:] else 0Logik:
- Prüfe ob Länge gerade ist
- Teile String in zwei Hälften:
data[:len//2]unddata[len//2:] - Wenn gleich → Addiere Zahl zur Lösung
Beispiel:
"1221"→"12"=="21"→ ❌"1212"→"12"=="12"→ ✅
def aufgabe2(data):
for anzahl in range(2, len(data) + 1):
if len(data) % anzahl != 0:
continue
laenge = len(data) // anzahl
if data[:laenge] * anzahl == data:
aufgabe.loesung2 += int(data)
breakLogik:
- Iteriere durch mögliche Anzahl von Wiederholungen (2 bis Länge)
- Skip wenn Länge nicht durch Anzahl teilbar
- Berechne Pattern-Länge:
len(data) // anzahl - Prüfe:
pattern * anzahl == data - Bei erstem Match → Addiere und break (kleinste Pattern-Anzahl zählt)
Beispiel:
"123123"→ Pattern"123"* 2 → ✅"1111"→ Pattern"1"* 4 → ✅ (aber findet"11"* 2 zuerst)
String-Multiplikation:
data[:laenge] * anzahlist sehr effizient in Python- Alternativ: Loop mit
all()wäre langsamer
Generator statt Liste:
- Speichert nicht alle Zahlen im RAM
- Prozessiert on-the-fly
Early Break:
- In
aufgabe2()wird bei erstem Match abgebrochen - Findet immer die kleinste gültige Anzahl
- Zeit: O(n * m) wobei n = Anzahl Zahlen, m = durchschnittliche Länge
- Platz: O(1) durch Generator (ohne Materialisierung)
- Generator-Expression: Speichereffizient für große Bereiche
- String-Slicing: Pythons effiziente String-Operationen
- Ternary Operator: Kompakte Conditional-Zuweisung