Hallo
Ok, ich nehme alles zurück, aber sorry, ich verstehe deinen Code nicht.
Gut nochmal, soweit ich es verstehe sollten deine Lösungen mit der Ausgabe lexikografisch wachsen.
Die erste Zeile die dein Script liefert ist:
[1, 1, 3, 5, 10, 21, 42, 84, 84, 249]
und sollte minimal sein.
Lasse ich mein Script aufwärts rechnen bekomme ich aber
1 1 1 4 8 16 31 63 125 250
was eine deutlich kleinere und korrekte Lösung ist.
=> Dein Script ist fehlerhaft!
Du hast recht => man sollte um diese Zeit keinen Code mehr schreiben
und erst recht keine unnötigen "Abkürzungen" einbauen, die sich als Fehler
entpuppen
if ((sack[9] > 250) or (sack[9] < 125) or sack[9] < sack[8]):
# Sack 10 nicht im richtigen Intervall, oder kleiner als vorhergehender
# passt nicht
# hier steckt der Fehler
# verlaesst die innere Schleife statt direkt den
# naechsten Schleifendurchlauf vorzunehmen
# break;
# Entweder ein continue oder ein einfaches else
continue
> ... insbesondere verstehe ich nicht wie du deine Schranken herleitest, eine richtige Begründung gibst du leider nicht an (???)
Zu den Grenzen:
Die Obergrenzen sollten klar sein:
1) Bis Sack 8 die Zweierpotenzen,
2) bei Sack 9 ist es erforderlich:
a) die Summe von Sack 1-8 maximal um 1 kleiner ist als der Inhalt von Sack 9
b) Sack 10 hat mindestens soviel Inhalt wie Sack 9
=> Minimale Summe = 3\* Inhalt von Sack 9 - 1
=> 3 \* Inhalt von Sack 9 = 501
=> Maximaler Inhalt von Sack 9 = 167
3) Sack 10: Grenze klar (hast Du ja begründet)
Die Untergrenzen ergaben sich durch gezieltes Probieren :-)
Verkleinere die Untergrenze jeweils um 1 und ermittle die maximal erreichbare
Summe, bis zu der jede Zahl darstellbar ist => die Summe wird kleiner als 500
sein.
Deine Vorgehensweise ist deutlich schneller :-)
Freundliche Grüße
Vinzenz