Brute-Force Matheaufgabe lösen 9981

Normalerweise wird der Begriff „Brute-Force“ für das Hacken von Passwörtern genutzt. Er bedeutet, mit roher Gewalt solange ein Password automatisch einzugeben, bis das richtige Passwort gefunden wurde.

Dies wird meist mit einer Wiederholung und einer Wörterliste durchgeführt. Alle Wörter einer Liste werden nacheinander in das Passwortfeld eingetragen und geschaut, ob das das richtige Passwort war.

Jetzt wollen wir aber mit einer „Brute-Force“ Methode eine Mathematik Aufgabe lösen:

In einer Getränkefirma werden 1898 l Mineralwasser in 3/4-l-Flaschen, 7/10-l-Flaschen und 1/2-l-Flaschen abgefüllt.

Jedoch soll es dreimal so viele 1/2-l-Flaschen wie 3/4-l-Flaschen und doppelt so viele 7/10-l-Flaschen wie 3/4-l-Flaschen geben.

Ermittle, wie viele Flaschen jeweils abgefüllt werden müssen.

Lambacher Schweizer 6 – Mathematik für Gymnasien vom Klett Verlag

Diese Aufgabe können wir mit einer Gleichung lösen:

x * \frac{3}{4}l + (x * 3*\frac{1}{2}l) + (x * 2*\frac{7}{10}l)=1898l

Doch wollen wir die Lösung herausfinden, indem wir für x eine zufällige Zahl wählen und ein Programm solange laufen lassen, bis eine Lösung gefunden wurde:

import random

#Variablen für die verschiedenen Flaschenarten
dreiviertelFlaschen = 0
halbeFlaschen = 0
siebenzehntelFlaschen = 0

#Ergebnis Gesamtliter
gesamtLiter = 1898

#Zähler für die Durchläufe, wie lange hat es gedauert bis eine Lösung gefunden wurde?
anzahlDurchlaeufe = 0

#Hier werden die Lösungen notiert
gefundeneLoesungen = ""
berechneteLoesung = 0

while berechneteLoesung != gesamtLiter:
    #Hier wird eine zufällige Zahl von dreiviertelFlaschen genommen
    dreiviertelFlaschen = random.randrange(2000) # 1-n
    #die anderen Flaschenarten werden im Verhältnis dazu gesetzt
    halbeFlaschen = dreiviertelFlaschen*3
    siebenzehntelFlaschen = dreiviertelFlaschen*2
    
    #Jetzt wird die Testberechnung durchgeführt und geschaut, ob die zufällige Zahl
    #die richtge war.
    berechneteLoesung = (dreiviertelFlaschen*0.75) + (halbeFlaschen*0.5) + (siebenzehntelFlaschen*0.7)
    if(gesamtLiter == berechneteLoesung):
        gefundeneLoesungen = ("3/4: " + str(dreiviertelFlaschen) + " 1/2: "+ str(halbeFlaschen) + " 7/10: " + str(siebenzehntelFlaschen))
        
    anzahlDurchlaeufe = anzahlDurchlaeufe + 1

#Ausgabe am Ende
print("benötigte Durchläufe: " + str(anzahlDurchlaeufe))
print("gefundene Lösung: " + gefundeneLoesungen)

Da die Anzahl der 3/4 Flaschen mit dem random-Modul zufällig gewählt wurde ist auch die Anzahl der benötigten Durchläufe unterschiedlich:

Bei diesem Durchlauf, mussten insgesamt 868 zufällige Zahlen für die 3/4 Flaschen genommen werden, um die richtige Lösung zu finden.

Da Computer sehr schnell rechnen können, benötigte das Finden der Lösung nicht einmal eine Sekunde!

Links:

unsere-schule.org

×

Brute-Force Matheaufgabe lösen

Code: 9981