PHP :: Aufgabe #66

3 Lösungen Lösungen öffentlich

Verteilung beim Würfeln mit zwei Würfeln

Anfänger - PHP von Alucard1766 - 11.02.2015 um 13:59 Uhr
Angenommen du wirfst sehr viel mal mit zwei Würfeln. Wie sieht die Verteilung der Summe der geworfenen Würfelzahlen aus?

Vorgaben:
Simuliere möglichst zufällig sehr viele Würfe mit zwei Standardwürfel(=1-6).
Mindestens 100'000 Würfe, je mehr desto besser. -> Performanter Code
Gib aus, wie die Verteilung der Summe der beiden Würfeln prozentual/im Verhältnis aussehen
Du musst in der Lösung auf dieser Seite eine gut sicht- und interpretierbare Darstellung der Verteilung haben, damit wir die Ergebnisse vergleichen können


Beispiel:

Konsolenausgabe:

1. Wurf: 1 und 5 - Summe 6
2. Wurf: 4 und 2 - Summe 6
...
100000. Wurf: 3 und 1 - Summe 4

Ergebnis:
1 - 5%
2 - 7%
12 - 6%

Lösungen:

vote_ok
von habablab (270 Punkte) - 08.03.2018 um 10:15 Uhr
Quellcode ausblenden PHP-Code
<?php
$durchgaenge = 100000;
$wuerfel = 2;
$wuerfelaugen = 6;

$rowResult = array();
$totalResult = array();

// Ergebnisarray initialisieren
for ($i = $wuerfel; $i <= $wuerfel * $wuerfelaugen; $i++) 
{
    $totalResult[$i] = 0;
}

// Fleißig Würfeln
for ($i = 1; $i <= $durchgaenge; $i++) 
{
    $rowResult['summe'] = 0;
    echo ($i.". Wurf: ");
    for ($j = 1; $j <= $wuerfel; $j++) 
    {
        $rand = rand(1,$wuerfelaugen);
        $rowResult[$j] = $rand;
        $rowResult['summe'] += $rand;
        echo ("Würfel$j $rand ");
    }
    echo ("Summe ". $rowResult['summe'] . "\n");
    $totalResult[$rowResult['summe']]++;
}

echo("\nErgebnis\n");

//Ergebnisse berechnen und ausgeben
foreach ($totalResult as $key => $var)
{
    $prozent = $var / $durchgaenge * 100;
    echo("$key: $prozent %\n");
}


Konsolenausgabe:

1. Wurf: Würfel1 6 Würfel2 5 Summe 11
2. Wurf: Würfel1 1 Würfel2 5 Summe 6
3. Wurf: Würfel1 6 Würfel2 2 Summe 8
4. Wurf: Würfel1 2 Würfel2 2 Summe 4
...
99999. Wurf: Würfel1 2 Würfel2 1 Summe 3
100000. Wurf: Würfel1 6 Würfel2 4 Summe 10

Ergebnis
2: 2.771 %
3: 5.603 %
4: 8.359 %
5: 11.128 %
6: 13.819 %
7: 16.679 %
8: 13.968 %
9: 11.098 %
10: 8.3 %
11: 5.529 %
12: 2.746 %
vote_ok
von Exception (5030 Punkte) - 26.05.2018 um 20:31 Uhr
Quellcode ausblenden PHP-Code
<?php

$die    = array(0, 0, 0, 0, 0, 0);
$rounds = 1000000; 

echo '<pre>';
print_r(rollDices($die, $rounds));
echo '</pre>';


function rollDices($die, $rounds)
{
	$results = array();
	$spread = array();

	for ($round=0; $round < ($rounds * 2); $round++) 
	{ 
		array_push($results, array_rand($die) + 1);
	}

	foreach (array_count_values($results) as $key => $value) 
	{
		array_push($spread, array('Augen' => $key, 'Prozent' => (($value * 100) / ($rounds * 2))));
	}

	return $spread;
}

?>
vote_ok
von pornstarIRL (410 Punkte) - 28.11.2019 um 11:42 Uhr
Quellcode ausblenden PHP-Code
function dice($amount)
{
  $ergArr = [];
  $countArr = [
    [], [], [], [], [], [], [], [], [], [], []
  ];
  $ergStep = [];
  $ergFinal = [];
  $count = 2;

  for ($i = 0; $i <= $amount; $i++) {
    $dice1 = rand(1, 6);
    $dice2 = rand(1, 6);
    $erg = $dice1 + $dice2;
    echo $i . ". Wurf: " . $dice1 . " und " . $dice2 . " - Summe " . $erg . "<br>";

    $ergArr[$i] = $erg;
  }
  echo "<br>";

  foreach ($ergArr as $val => $key) {
    switch ($key) {
      case 2:
        array_push($countArr[0], 2);

      case 3:
        array_push($countArr[1], 3);
        break;

      case 4:
        array_push($countArr[2], 4);
        break;

      case 5:
        array_push($countArr[3], 5);
        break;

      case 6:
        array_push($countArr[4], 6);
        break;

      case 7:
        array_push($countArr[5], 7);
        break;

      case 8:
        array_push($countArr[6], 8);
        break;

      case 9:
        array_push($countArr[7], 9);
        break;

      case 10:
        array_push($countArr[8], 10);
        break;

      case 11:
        array_push($countArr[9], 11);
        break;

      case 12:
        array_push($countArr[10], 12);
        break;
    }
  }
  for($i = 0; $i <= 10; $i++){
    $ergStep[$i] = count($countArr[$i]) / $amount;
    $ergFinal[$i] = $ergStep[$i] * 100;

    echo $count . " - " . $ergFinal[$i] . "% <br>";
    $count++;
  }
}

dice(10);


Konsolenausgabe:

0. Wurf: 6 und 4 - Summe 10
1. Wurf: 3 und 1 - Summe 4
2. Wurf: 1 und 6 - Summe 7
3. Wurf: 1 und 6 - Summe 7
4. Wurf: 3 und 6 - Summe 9
5. Wurf: 2 und 5 - Summe 7
6. Wurf: 6 und 6 - Summe 12
7. Wurf: 3 und 6 - Summe 9
8. Wurf: 2 und 4 - Summe 6
9. Wurf: 6 und 3 - Summe 9
10. Wurf: 3 und 2 - Summe 5

2 - 0%
3 - 0%
4 - 10%
5 - 10%
6 - 10%
7 - 30%
8 - 0%
9 - 30%
10 - 10%
11 - 0%
12 - 10%