lindor-simulator
Change class name on click in jQuery
by Marc Chehab
HTML
<div id="banner-message">
<p id="output"></p>
<button>simulate</button>
</div>
CSS
body {
background: #20262E;
padding: 20px;
font-family: Helvetica;
}
#banner-message {
background: #fff;
border-radius: 4px;
padding: 20px;
font-size: 25px;
text-align: center;
transition: all 0.2s;
margin: 0 auto;
width: 300px;
}
button {
background: #0084ff;
border: none;
border-radius: 5px;
padding: 8px 14px;
font-size: 15px;
color: #fff;
}
#banner-message.alt {
background: #0084ff;
color: #fff;
margin-top: 40px;
width: 200px;
}
#banner-message.alt button {
background: #fff;
color: #000;
}
JavaScript
// find elements
var banner = $("#banner-message")
var output = $("#output")
var button = $("button")
var experiments = 10000
var schachtel = 24
var probschwarz = 0.6
var targetrot = 13
var successturns = []
var targetprob = 0.9
// handle click and add class
button.on("click", function() {
//Experiments: Durchäuft das Experiment mehrere Male
for (h = 0; h < experiments; h++) {
//Turns: Zieht mehrere Schachteln (Limit von 1000 ist einfach um Endlosschlaufen zu verhindern, wird aber wohl nie gebraucht)
for (i = 0; i<1000; i++) {
var nrschwarz = 0
//Schachtel füllen: Zieht mehrere Kugeln
for (j = 0; j < schachtel; j++) {
if (Math.random() < probschwarz) {
nrschwarz++
}
}
//Falls genug rote Kugeln, speichere bei der wievielten Schachtel wir sind und brich den aktuellen Turn ab
if ((schachtel - nrschwarz) >= targetrot) {
successturns.push(i+1) //+1 da wir bei 0 anfangen
break
}
}
}
//Sortiere die Liste der "wievielte Schachtel erstmals genügend rote Kugel hatte"
successturns.sort(function(a, b){return a - b})
//Nehme den Wert nach 90%
output.html(successturns[Math.ceil(successturns.length*0.9)])
})