Hallo zusammen,
ich schreibe in Python ein kleines Programm und habe irgendwie ein Brett vor dem Kopf. Daher die Denkaufgabe mit freundlicher Bitte um Mithilfe:
Ein Stack soll punktgenau befüllt werden. Sowohl der Stack, als auch die darin verstauten Elemente haben eine variable Größe, die vom Nutzer bestimmt werden können.
Ich generiere also in meinem Programm einen Speicher bzw. Stack. Dieser hat eine frei wählbare minimale und eine frei wählbare maximale Länge. Aus dieser Menge wird dann eine random Zahl gewählt. Beispiel: Angabe 1: min_lenth = 5 Angabe 2: max_length = 10 Das Programm ermittelt via random(5, 10) die length, z.B.: length == 7.
Der Wert quota gibt die Auslastung an und ist zu Beginn == 0 und addiert die folgenden Elemente, die in den Stack verschoben werden und ebenfalls eine variable Größe besitzen: Angabe 3: min_elem_length = 2 Angabe 4: max_elem_length = 4 Beispiel: Das Programm ermittelt via random(1, 4) fortlaufend Elemente (element), z.B.: 3, 3, 4, 2, 2, 1, 3, usw.
Diese Elemente sollen nun genau in meinen Speicher passen. Die letzten n Elemente (so wenige wie möglich) dürfen dabei eine variable Länge besitzen, die jedoch im Bereich von min_elem_length und min_elem_length liegen muss.
Beispiel: Length == 7, quota == 0 element0 = 2, daher quota == 2 element1 = 4, daher quota == 6 element3 muss daher 1 sein und alles passt. 😀
Meine Code sieht aktuell so aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | ###### Function def fill_the_stack(min_lenth, max_length, min_elem_length, max_elem_length): stack = [] length = random.randint(min_lenth, max_length) print("Length == ", length) quota = 0 while quota < length: if (quota - max_length) >= max_elem_length: element = quota - max_length else: element = random.randint(min_elem_length, max_elem_length) quota += element stack.append(element) print("Quota:", quota, "\tAdded: +", element) print(stack) ###### min_lenth = 5 max_lenth = 10 min_elem_length = 3 max_elem_length = 7 fill_the_stack(min_lenth, max_length, min_elem_length, max_elem_length) |
Trotzdem kommen hier (natürlich) auch immer wieder Werte raus, die length übersteigen. Mir fallen hier sehr, sehr viele schlechte Workarounds ein. Daher die Frage: Hat jemand hier im Forum vielleicht eine prägnante Idee, wie man length punktgenau befüllt? Ich kann mir irgendwie nicht vorstellen, dass ich der Erste bin, der dieses Problem hat... Von daher: Da gibt's doch sicher eine Lösung? ☺
Tausend Dank und VG! jaik