Der Code tut nichts weiter als im unteren HTML-Teil ein Formular mit einem Eingabe-Feld, einem Button und 2 Ausgabefeldern zu definieren; mit dem Button wird die noch zu implementierende Funktion run
verknüpft. Im oberen JavaScript-Teil werden zwei Funktionen getRandom
und getTries
definiert. Erstere liefert eine Zufallszahl im Bereich der angegebenen Werte, die zweite liest die eingegebene Anzahl von Versuchen aus dem Eingabefeld aus (und vermeldet eine Fehlermeldung, wenn dabei etwas schiefging).
Der eigentlich interessante Code erfolgt nun in der Methode run
, die wir hier implementieren:
Als erstes wollen wir in einer Variable tries
die Anzahl der durchzuführenden Versuche speichern:
Sicherheitshalber fahren wir mit der Simulation nur fort, wenn die Anzahl der Versuche größer als 0 ist (die Methode getTries
liefert auch 0 zurück, wenn die Eingabe fehlerhaft ist):
Als nächstes wollen wir zwei Variablen anlegen, welche zählen, ob ein Wechsel des Tores bzw. der Nicht-Wechsel zum Erfolg geführt hat:
var sw = 0;
Und als nächstes folgt auch schon die eigentliche Simulation. So oft, wie angegeben, wollen wir das tun, was es zu tun gilt (die Variable i
läuft dabei von 0
bis tries
, bedingt also so viele Schleifendurchläufe, wie erwünscht):
Das besondere an dieser Simulation ist, dass sich der Zustand der Welt in jedem Durchlauf neu ergibt und nicht aus dem letzten Lauf übernommen wird. Der Zustand besteht aus der Position des Tores mit dem Preis und aus unserem gewählten Tor – wir benötigen dafür also 2 Variablen, die wir zufällig bestimmen. Die möglichen Werte 0, 1 und 2 stehen dabei für die drei zur Verfügung stehenden Tore:
var tryPos = getRandom( 0, 2 );
Als nächstes folgt die Auswahl der Strategie und damit entweder der Wechsel des Tores oder das Verbleiben beim bisherigen. Um Rechenzeit und Programmieraufwand zu sparen, erledigen wir beide Schritte mit einem mal und legen dabei die folgende Überlegung zugrunde:
Wir wissen, dass der Moderator immer ein Tor öffnet, hinter dem sich kein Preis befindet. Nach Bestimmung des Gewinntores und der eigenen initialen Wahl kann also das durch den Moderator geöffnete Tor vernachlässigt werden; welches genau das ist (0, 1 oder 2), spielt dabei auch keine Rolle, denn nach dem Öffnen sind lediglich 2 Tore übrig – das selbst gewählte und das andere, wobei sich hinter einem von beiden der Preis befindet. Die Entscheidung beschränkt sich hierdurch auf lediglich 2 Alternativen: soll gewechselt werden oder nicht.
Weiterhin wissen wir: wechseln wir das gewählte Tor nicht und hatten von Anfang an das richtige Tor gewählt, so ist das als Erfolg zu verbuchen (da wir ja den Preis bekommen). Wechseln wir dagegen, obwohl wir initial das Tor mit dem Preis gewählt hatten, so haben wir einen Misserfolg. Umgekehrt gilt: wechseln wir nicht, obwohl wir nicht das Tor mit dem Preis gewählt haben, ist dies ein Misserfolg; ein Wechsel beim initial falschen Tor führt dagegen zu einem Erfolg. Zusammengefasst: beim Nichtwechseln haben wir Erfolg, wenn wir initial das richtige Tor gewählt hatten, beim Wechsel haben wir Erfolg, wenn das initial gewählte Tor nicht das richtige wahr. Entsprechend können wir dann auch die Erfolge zählen: ein Erfolg fürs Nichtwechseln, wenn gewähltes Tor und Gewinntor übereinstimmen, ein Erfolg fürs Wechseln, wenn dies gerade nicht der Fall ist. Als Code lässt sich das folgendermaßen ausdrücken:
++stay;
if ( tryPos != winPos )
++sw;
}
Kommentare (22)