Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Strategien für "Die verflixte Eins"
- // Regeln siehe https://www.gruppenspiele-hits.de/wenig-material-spiele/Die-verflixte-Eins.html
- const
- // Anzahl der Züge (Zufallsexperimente) pro Strategie
- N = 10000000,
- // Werte für "Nach x Würfen aufhören"
- NN = [1,2,3,4,5,6,7,8,9,10,15,20,50,100,Infinity],
- // Werte für "Nach Erreichen von mind. y Punkten aufhören"
- MM = [5,10,15,16,17,18,19,20,21,22,23,24,25,30,40,50,Infinity];
- // Die Parameter variieren und die Experimente durchführen:
- generateTable();
- // Die zu verwendende Abbruchfunktion (Strategie):
- function cancelStrategy(maxRolls,limitSum=Infinity) {
- return function(rolls,sum) {
- return (rolls>=maxRolls || sum >= limitSum)
- }
- }
- // Ein einzelnes Spiel ("Zug")
- function move(cancelFn) {
- let sum = 0;
- for (let rolls=1;;rolls++) {
- let n = rollDie();
- if (n == 1) return 0;
- sum += n;
- if (cancelFn(rolls,sum)) return sum;
- }
- }
- // Sooft spielen, wie der Parameter moves angibt
- // Abbruchstrategie gemäß Parameter cancelFn
- function play(moves,cancelFn) {
- let total = 0;
- for (let i=0; i<moves;i++) {
- total += move(cancelFn);
- }
- return total/moves
- }
- // Einen Würfel einmal werfen
- function rollDie() { return Math.ceil( Math.random()*6 )}
- // Die Experimente durchführen und csv-Ergebnistabelle ausgeben
- function generateTable() {
- const write = process.stdout.write.bind(process.stdout);
- write([''].concat(MM).join(';') + "\n");
- let rmax = 0;
- for (let maxRolls of NN) {
- write(maxRolls+";");
- let col = [];
- for (let limitSum of MM) {
- let result = play(N,cancelStrategy(maxRolls,limitSum))
- if (result > rmax) rmax = result;
- col.push(result.toFixed(3))
- }
- write(col.join(';')+"\n");
- }
- write("Maximum: "+rmax.toFixed(5)+"\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement