Hackerboard WikiHaboBlog

[HaBo]

 
Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann.

Glückspielvorteil

Diskussion: Glückspielvorteil im Forum Programmieraufgaben, in der Kategorie Code Kitchen; Zitat: Original von Kenniej91 Zitat: Original von Eydeet Zitat: Original von xeno hab das mal eingebaut und festgestellt, daß Spieler ...

Antwort
Alt 16.11.08, 20:41   #16 (permalink)
 
Benutzerbild von Eydeet
 
Registriert seit: 14.04.06
Eydeet Leistung: Facit NTK
Likes: 4
Standard


Zitat:
Original von Kenniej91
Zitat:
Original von Eydeet
Zitat:
Original von xeno
hab das mal eingebaut und festgestellt, daß Spieler A tatsächlich etwa 46cent pro runde gewinnt. kannst du diesen genaueren wert bestätigen?
Das kommt ungefähr hin. Ich habe etwa 50 Cent pro Runde ausgerechnet.
Wieso etwa?
3.50? pro Würfel als Erwartungswert, mal 3 ist 10.50?^^
Das war vielleicht ein wenig missverständlich formuliert. Ausgerechnet habe ich auch genau 50 Cent, aber meine Simulation hat natürlich nur ungefähr 50 Cent Gewinn pro Durchlauf ergeben.
Eydeet ist offline   Mit Zitat antworten
Alt 24.11.08, 21:11   #17 (permalink)
 
Registriert seit: 16.04.07
D31~$0u1 Leistung: Facit NTK
D31~$0u1 eine Nachricht über ICQ schicken
Likes: 0
Standard

Meine Lösung:

Meine Lösung in BlitzMax   

Code:
'Framework und import
Framework brl.Graphics
Import brl.Timer
Import brl.linkedlist
Import brl.D3D7Max2D
Import brl.Random
Import brl.StandardIO


Global KapitalS1:Int
Global KapitalS2:Int
Global Wuerfel1:Int
Global Wuerfel2:Int
Global Wuerfel3:Int
Global SumGes:Int
Global S1Vorteil:Int
Global S2Vorteil:Int

SeedRnd MilliSecs()

KapitalS1 = 1000
KapitalS2 = 1000

Function Vorteil1()
  S1Vorteil = S1Vorteil + 1
  Print "Vorteil für Spieler1"
  Print " "
EndFunction

Function Vorteil2()
  S2Vorteil = S2Vorteil + 1
  Print "Vorteil für Spieler2"
  Print " "
EndFunction



For i:Int = 1 To 2000
 Print i + ". Runde:"
 Print " "
  KapitalS1 = KapitalS1 - 10
  KapitalS2 = KapitalS2 + 10
	Wuerfel1 = Rnd(1, 6)
	Print Wuerfel1
	Wuerfel2 = Rnd(1, 6)
	Print Wuerfel2
	Wuerfel3 = Rnd(1, 6)
	Print Wuerfel3
	SumGes = Wuerfel1 + Wuerfel2 + Wuerfel3
 Print "Gewürfelt wurde insgesamt: " + SumGes
 Print " "

 If SumGes > 10 Then Vorteil1()
 If SumGes < 10 Then Vorteil2()
 
 KapitalS1 = KapitalS1 + SumGes
 KapitalS2 = KapitalS2 - SumGes
 
 Print "Kapital von Spieler1: " + KapitalS1
 Print "Kapital von Spieler2: " + KapitalS2
 Print "Ende Runde" + i
 Print " "

Next

Print "Endgültiges Kapital von Spieler1: " + KapitalS1
Print "Endgültiges Kapital von Spieler2: " + KapitalS2
Print "Gesamt Vorteile von Spieler1: " + S1Vorteil
Print "Gesamt Vorteile von Spieler2: " + S2Vorteil
Print " "
If S1Vorteil > S2Vorteil Then Print "Spieler1 hatte insgesamt " + (S1Vorteil - S2Vorteil) + "  Vorteile mehr als Spieler2"
If S1Vorteil < S2Vorteil Then Print "Spieler2 hatte insgesamt " + (S2Vorteil - S1Vorteil) + "  Vorteile mehr als Spieler1"
Print " "
If KapitalS1 > KapitalS2 Then Print "Spieler1 hat insgesamt " + (KapitalS1 - KapitalS2) + "  Euro mehr als Spieler2"
If KapitalS1 < KapitalS2 Then Print "Spieler2 hat insgesamt " + (KapitalS2 - KapitalS1) + "  Euro mehr als Spieler1"
WaitKey
end
D31~$0u1 ist offline   Mit Zitat antworten
Alt 02.01.09, 20:08   #18 (permalink)
 
Registriert seit: 26.12.08
Athelstan Leistung: Facit NTK
Athelstan eine Nachricht über ICQ schicken
Likes: 0
Standard

Hier meine Lösung, sie berechnet alle möglichen Kombinationen und sortiert dann je nach Größe der Augensumme zu Spieler1, Spieler2 oder Niemandem bei der Summe 10.

Code:
a = (1..6).to_a
b = a
c = a
zaehler1 = 0
zaehler2 = 0
zaehler3 = 0
a.each { |part1|
	b.each { |part2|
		c.each { |part3|
			if (part1+part2+part3) > 10
				zaehler1 += 1
			elsif (part1+part2+part3) < 10
				zaehler2 += 1
			elsif (part1+part2+part3) == 10
				zaehler3 += 1
			end
		}
	}
}
puts "Spieler A: #{zaehler1}"
puts "Spieler B: #{zaehler2}"
puts "Niemand: #{zaehler3}"
puts "Gesamt: #{zaehler1+zaehler2+zaehler3}"
Ausgabe:

Code:
athelstan@portanigra:~$ ruby Gluecksspiel.rb
Spieler A: 108
Spieler B: 81
Niemand: 27
Gesamt: 216
Athelstan ist offline   Mit Zitat antworten
Alt 05.01.09, 17:42   #19 (permalink)
 
Benutzerbild von Stein
 
Registriert seit: 10.10.05
Stein Leistung: Facit NTK
Stein eine Nachricht über ICQ schicken
Likes: 0
Standard

Ich habe auch getippt das der 10ner-Mann gewinnt, denn 18-3= 15;15 /2 = 7,5 er würfelt durchschnittlich eine 7,5

Python Simulation   
Code:
import random

def gewinn():
    augenzahl = random.randrange(1,7,1)+random.randrange(1,7,1)+random.randrange(1,7,1)
    return 10 - augenzahl
#Gewinn des Wuerfelspielers:                                                                                                                                   
w = 0

for i in range(1001):
    w += gewinn()
print w

python Berechnung   
Code:
 w_gew = 0
for i in range(1,7,1):
    for j in range(1,7,1):
        for k in range(1,7,1):
            w_gew += 10-(i+k+j)
print w_gew
__________________
Steinhagelvoll
Stein ist offline   Mit Zitat antworten
Alt 08.01.09, 12:35   #20 (permalink)
 
Registriert seit: 17.09.07
smaster100 Leistung: Facit NTK
Likes: 0
Standard

besser spät als nie

mein code in c#:

c#   

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _10gegen3
{
class Program
{
static void Main(string[] args)
{
long money_spieler1 = 10000;
long money_spieler2 = 10000;

int wuerfel1 = 0;
int wuerfel2 = 0;
int wuerfel3 = 0;
int score = 0;
Random r = new Random();

for (long count = 0; count < 1000000; count++)
{
money_spieler1 = money_spieler1 - 10;
money_spieler2 = money_spieler2 + 10;


wuerfel1 = r.Next(1, 7);
wuerfel2 = r.Next(1, 7);
wuerfel3 = r.Next(1, 7);

score = wuerfel1 + wuerfel2 + wuerfel3;

money_spieler1 = money_spieler1 + score;
money_spieler2 = money_spieler2 - score;
}

if (money_spieler1 > money_spieler2)
{
Console.WriteLine("Spieler 1 hat gewonnen mit " + money_spieler1 + " zu " + money_spieler2);
}
else
{
Console.WriteLine("Spieler 2 hat gewonnen mit " + money_spieler2 + " zu " + money_spieler1);
}
}
}
}


Ausgabe:
Spieler 1 hat gewonnen mit 511427 zu -491427
smaster100 ist offline   Mit Zitat antworten
Alt 27.07.09, 20:14   #21 (permalink)
 
Registriert seit: 27.07.09
fishfishfish Leistung: Facit NTK
Likes: 0
Standard

Mein erster Post
main.cpp   

Code:
#include <iostream>

int main()
{
	int spieler_1_zahlt = 0;
	int gewuerfelt = 0;
	srand(1);
	for(int i = 0; i < 10000; i++)
	{
		gewuerfelt = 10;
		for(int u = 0; u < 3; u++)
		{
			gewuerfelt -= rand()%6+1;
		}
		spieler_1_zahlt += gewuerfelt;
	}
	std::cout << "Spieler 1 zahlt " << spieler_1_zahlt << "euro an Spieler 2";
	return 1;
}
fishfishfish ist offline   Mit Zitat antworten
Alt 28.07.09, 18:45   #22 (permalink)
 
Benutzerbild von bad_alloc
 
Registriert seit: 27.12.07
bad_alloc Leistung: Z3
Likes: 24
Standard

So hier meine Lösung in Common Lisp (geht sicherlich eleganter)
Viele Klammern!   
Code:
(defun Vorteil (range)
  (defvar A-geld 0) ;geld der kontrahenten
  (defvar B-geld 0)
  (dotimes (i range)
    (defvar sum 0)
     (dotimes (x 3)
       (defvar tmp 0)
       (setf tmp (+ (random 15) 3))
       (setf sum (+ sum tmp)))
     (setf A-geld (+ A-geld (- sum 10)))
     (setf B-geld (- sum 10)))
     (format t "Geld A:~a~%" A-geld)
     (format t "Geld B:~a~%" B-geld))
__________________
You shoot yourself in somebody else's foot.|Dann gabs da noch den Mathematiker der P?=NP in O(1) erklärte.
|[A]| = p(·,|[A]|)+1
bad_alloc ist offline   Mit Zitat antworten
Alt 30.07.09, 13:47   #23 (permalink)
Senior Member
 
Benutzerbild von t3rr0r.bYt3
 
Registriert seit: 07.01.03
t3rr0r.bYt3 Leistung: Z3
Likes: 13
Standard

Ohne alle Posts gelesen zu haben, geb ich auch mal meinen Senf dazu:
Mit 3 Würfeln sind alle Werte von 3 bis 18 würfelbar, dabei sind alle Ergebnisse gleich wahrscheinlich. Es gibt also A = {3,4,5,6,7,8,9}, |A|=7 günstige Ereignisse und B = {11,12,13,14,15,16,17,18}, |B|=8 ungünstige Ereignisse. 10 zu würfeln hat keinen Einfluss auf Geld-Gewinn/Verlust.

Demnach gewinnt man in 7/16 Fällen, verliert aber in 8/16=1/2 Fällen - oder anders ausgedrückt, bei unendlich vielen Spielen verliert man die Hälfte des Geldes, während man 7/16 gewinnt. Die Differenz beträgt 1/16, die man letztendlich verliert. Mit den 10? Einsatz multipliziert sind das 0.625?.

Mag das jemand widerlegen? Ich sitze gerade beim Mittagessen und kann mich nicht ernsthaft konzentieren.
t3rr0r.bYt3 ist offline   Mit Zitat antworten
Alt 30.07.09, 14:33   #24 (permalink)
 
Benutzerbild von Eydeet
 
Registriert seit: 14.04.06
Eydeet Leistung: Facit NTK
Likes: 4
Standard

Zitat:
Original von t3rr0r.bYt3
Mit 3 Würfeln sind alle Werte von 3 bis 18 würfelbar, dabei sind alle Ergebnisse gleich wahrscheinlich.
Falsch.
Eydeet ist offline   Mit Zitat antworten
Alt 30.07.09, 15:25   #25 (permalink)
 
Registriert seit: 30.07.09
lorschy Leistung: Facit NTK
lorschy eine Nachricht über ICQ schicken
Likes: 0
Standard

Haette auch gedacht das Spieler 2 am ende mehr davon hat, aber das liegt wohl daran das man bei solchen GluecksSpielen immer denkt das derjenige der erstmal geld zahlen muss am ende immer verliert.

Aber eigentlich isses klar, 10-3 = 7 , 18-10 = 8 ergo hat Spieler 2 eine groessere Chance was draufzuzahlen als was zu gewinnen.

Perlcode   

#!/usr/bin/perl
use strict;

my $range=6;
my $rounds = $ARGV[0] || 10000;
my $pag=- ( 10 * $rounds);
my $pbg=10 * $rounds;

for (1 .. $rounds) {
my $tmp=0;
for (0 .. 2) {
$tmp+= int (rand($range) + 1);
}
$pag+=$tmp;
$pbg-=$tmp;
}

print "Player a: $pag\nPlayer b: $pbg\n";
($pag > $pbg ? print "Player b Verlust/Runde: ".($pag/$rounds)."\n" : print "Player b Gewinn/Runde: ".($pbg/$rounds)."\n");

exit 1;
lorschy ist offline   Mit Zitat antworten
Alt 30.07.09, 15:54   #26 (permalink)
Senior Member
 
Benutzerbild von t3rr0r.bYt3
 
Registriert seit: 07.01.03
t3rr0r.bYt3 Leistung: Z3
Likes: 13
Standard

Eyedeet, bitte mehr Text dazu?
Die kleinste Summe ist 1+1+1, die größe 6+6+6, dazwischen ist alles möglich?
Oh, ich sehe gerade, dass das tatsächlich nicht gleichwahrscheinlich ist.

/OK, anderer Gedanke: P(3) = P(18), P(4) = P(17). Lässt sich das so fortsetzen? :)
Da würde rauskommen, dass Sum(P(3) bis P(10)) = Sum(P(18) bis P(11)), damit hätten beide Mengen die gleiche Wahrscheinlichkeit, aber die erste würde die irrelevante 10 enthalten.
t3rr0r.bYt3 ist offline   Mit Zitat antworten
Alt 14.09.09, 19:11   #27 (permalink)
 
Registriert seit: 25.11.06
Cemper Leistung: Facit NTK
Cemper eine Nachricht über ICQ schicken
Likes: 0
Standard

Tag.
(Cool, ich wusste gar nicht, dass ich hier angemeldet bin.
Ist das mein erster Post? Muss gleich mal schauen
Wenn ja, dann entschuldige ich mich, dass mein erster Post einen staubigen Thread wieder ausgräbt.)

Ich glaube, meine Python-Lösung hat einen Denkfehler, aber ich komm grad nicht drauf.
Oder stimmt das so? Dass Spieler 2 in 216 absolut durchschnittlichen Spielen 108 Euro verliert?
Zitat:
#!/usr/bin/env python
#coding: utf8

geld_spieler_2 = 0
unentschieden = 0
runden = 0

for wuerfel1 in range(1,7):
....for wuerfel2 in range(1,7):
........for wuerfel3 in range(1,7):
............if wuerfel1 + wuerfel2 + wuerfel3 != 10:
................geld_spieler_2 += (10 - (wuerfel1 + wuerfel2 + wuerfel3))
............else:
................unentschieden += 1
............runden += 1

if geld_spieler_2 > 0:
....print "Spieler 2 wird durchschnittlich",geld_spieler_2,"Euro in",runden,"Runden gewinnen."
else:
....print "Spieler 2 wird durchschnittlich",-geld_spieler_2,"Euro in",runden,"Runden verlieren."

print "Durchschnittlich",unentschieden,"Runden von",runden,"Runden werden unentschieden sein."
input()
EDIT nach 4 Edits: Wie rückt man hier korrekt Code ein, sodass es Tabulatoren nicht zerreißt?

MfG
Cemper
Cemper ist offline   Mit Zitat antworten
Alt 14.09.09, 20:14   #28 (permalink)
CDW
Moderator
Themenstarter
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 156
Standard

Zitat:
Original von Cemper
Oder stimmt das so? Dass Spieler 2 in 216 absolut durchschnittlichen Spielen 108 Euro verliert?
kommt hin.

Zitat:
EDIT nach 4 Edits: Wie rückt man hier korrekt Code ein, sodass es Tabulatoren nicht zerreißt?
CODE -Tags nutzen
[ code ] [/ code ] (ohne Leerzeichen).
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 14.09.09, 20:22   #29 (permalink)
 
Registriert seit: 25.11.06
Cemper Leistung: Facit NTK
Cemper eine Nachricht über ICQ schicken
Likes: 0
Standard

Komisch... Code-Tags hatte ich benutzt, trotzdem waren alle Tabulatoren weg :-|

Aber danke für deine Antwort, habe bestimmt eine halbe Stunde über meinen Denkfehler nachgegrübelt. Hast wahrscheinlich grade meinen Suizid verhindert

mfg,
Cemper
Cemper ist offline   Mit Zitat antworten
Alt 14.09.09, 20:34   #30 (permalink)
CDW
Moderator
Themenstarter
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 156
Standard

Ich sehe da eigentlich nur [ QUOTE ] Tags - der Code ist als Zitat angegeben .
als Code schaut das so aus:
Code:
geld_spieler_2 = 0
unentschieden = 0
runden = 0

for wuerfel1 in range(1,7):
  for wuerfel2 in range(1,7):
    for wuerfel3 in range(1,7):
      if wuerfel1 + wuerfel2 + wuerfel3 != 10:
        geld_spieler_2 += (10 - (wuerfel1 + wuerfel2 + wuerfel3))
      else:
        unentschieden += 1
      runden += 1
Zum Ergebnis:
Möglichkeiten   

Wie gesagt:
27 Möglichkeiten, eine 10 zu würfeln,
81 unter 10 zu bleiben und 108 Möglichkeiten, ein Ergebnis > 10 zu bekommen. Daher ist der würfelnde Spieler immer im Nachteil.
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Antwort
   

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Programmieraufgaben » Glückspielvorteil
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61