Gå til innhold

Statestikk i terningspill med 3 terninger.


Anbefalte innlegg

Hei, jeg har satt sammen en kode for å finne de mulige tallene når du kaster 3 terninger og ganger sammen summene og legger dem i en array.

 

 

<?php

$d1 = 0;
$d2 = 1;
$d3 = 1;

$sum = array();

for ($i = 1; $i <= 216; $i++) {

$dd1 = false;
$dd2 = false; 
if($d1 == 6) $d2++; 
if($d2 == 7) { $d2 = 1; $dd2 = true; }
 if($d1 != 6) $d1++; else{ $d1 = 1; $dd1 = true; }
if($dd1 == true && $dd2 == true) $d3++;

$sum[] = $d1*$d2*$d3;


}

?>

 

Lurer på hvordan jeg finner ut hvilke tall som det er høyest sannsynelighet for å få og hvor mange % sannynelighet det er for å få tallet og en liste med tall sortert etter størt % til minst %

Endret av Rudde93
Lenke til kommentar
Videoannonse
Annonse

Har ikke egentlig tid til å titte på problemstillingen din nå, men jeg synes du hadde en voldsom grøt av en kode for et terningkastprogram. PHP har en Math Random-funksjon. Med andre ord skal denne koden fungere like bra

 

<?php
$sum = array();
for ($i = 1; $i <= 216; $i++) {
$sum[$i]=rand(1,6)*rand(1,6)*rand(1,6);
}
?>

Lenke til kommentar

Letteste blir jo en trippel for-loop, en for hver terning. og så bare sortere og printe det ut?

 

<?php
$array = array();
// Alle mulige terningkast
for($a=1; $a<=6; $a++)
{
   for($b=1; $b<=6; $b++)
   {
    for($c=1; $c<=6; $c++)
    {
	    $p = $a*$b*$c;
	    if(array_key_exists($p, $array))
		    $array[$p][1]++;
	    else
		    $array[$p] = array($p, 1);
    }
   }
}
// Compares the value of 2 arrays
function my_cmp($a, $b)
{
   return $b[1] - $a[1];
}
// Sorter array ved bruk av compare funksjonen over.
// Dette førger for at den nå sorterer etter antall kast.
usort($array, "my_cmp");
// Skriv ut sansynligheter:
foreach($array as $a)
{
   $prob = $a[1] / pow(6, 3) * 100;
   echo "$a[0]: $prob%<br />";
}

  • Liker 1
Lenke til kommentar
når du kaster 3 terninger
Dette skal ikke være random

Disse to går ikke så gått sammen.

Et terning kast er random.

Man bør bruke random biblioteket i språket man bruker.

 

Det og prøve skrive sin egen random nummer generator er en veldig vanskelig oppgave.

Pitfalls in Random Number Generation

Most people should not attempt to write their own core uniform generation algorithm but instead use something like the Mersenne Twister algorithm that has been subject to much professional scrutiny.

Lenke til kommentar
når du kaster 3 terninger
Dette skal ikke være random

Disse to går ikke så gått sammen.

Et terning kast er random.

Man bør bruke random biblioteket i språket man bruker.

 

Det og prøve skrive sin egen random nummer generator er en veldig vanskelig oppgave.

Pitfalls in Random Number Generation

Most people should not attempt to write their own core uniform generation algorithm but instead use something like the Mersenne Twister algorithm that has been subject to much professional scrutiny.

men når du er ute etter å finne sansynligheter er det bedre å telle antall mulige kast og finne ut hvor mange av de som er gunstige. Og så regne ut sansynligheten. Til dette trenger man ingen random-funksjon.

 

Om du skal simulere terningkast (noe det ikke ser ut som TS er ute etter) så vil man selvfølgelig trenge en random-funksjon.

Lenke til kommentar

Hei, jeg har satt sammen en kode for å finne de mulige tallene når du kaster 3 terninger og ganger sammen summene og legger dem i en array.

 

 

&--#60;?php

$d1 = 0;
$d2 = 1;
$d3 = 1;

$sum = array();

for ($i = 1; $i &--#60;= 216; $i++) {

$dd1 = false;
$dd2 = false;
if($d1 == 6) $d2++;
if($d2 == 7) { $d2 = 1; $dd2 = true; }
 if($d1 != 6) $d1++; else{ $d1 = 1; $dd1 = true; }
if($dd1 == true && $dd2 == true) $d3++;

$sum[] = $d1*$d2*$d3;


}

?&--#62;

 

Lurer på hvordan jeg finner ut hvilke tall som det er høyest sannsynelighet for å få og hvor mange % sannynelighet det er for å få tallet og en liste med tall sortert etter størt % til minst %

 

Jeg er litt usikker på hva du vil ha du sier "ganger summene"?

 

Er det dette?

 

1 + 1 + 1 = 3

1 + 1 + 2 = 4

1 + 1 + 3 = 5

1+ 1 + 4 = 6

1 + 1 + 5 = 7

1 + 1 + 6 = 8

1 + 2 + 1 = 4

1 + 2 + 2 = 5

osv.

 

I alt 216 kast

Størst sannsynlighet verdi 10 og 11 12,5%, så 9 og 12 11,6%, osv.., verdi 4 og 17 1,4%, 3 og 18 0,5%.

 

Jeg satte det ganske enkelt opp i et regneark med tre kolonner, en for hver terning, summerte i en fjerde kolonne. Lagde så en kolonne med kun 16 rader en celle for hver verdi fra 3 til 18. Inni disse cellene er det en formel som teller hver verdi. Til slutt en kolonne som regner sannsynlighet for hver verdi.

 

Resultatene under

Endret av smartphone
Lenke til kommentar

Jeg prøvde å lime inn resultatet - det ble dessverre ikke vellykket :hm:

om du ser i koden hans, så ganger han sammen tallene på terningen, han plusser de ikke. Men ha, veldig rotete forklart.

 

I hvertfall, om du mener å å få verdien ved å gange sammen øynene på terningene så får du følgende:

12: 6.9444444444444%
24: 6.9444444444444%
30: 5.5555555555556%
36: 5.5555555555556%
60: 5.5555555555556%
18: 4.1666666666667%
72: 4.1666666666667%
48: 4.1666666666667%
20: 4.1666666666667%
6: 4.1666666666667%
8: 3.2407407407407%
120: 2.7777777777778%
90: 2.7777777777778%
40: 2.7777777777778%
16: 2.7777777777778%
4: 2.7777777777778%
10: 2.7777777777778%
15: 2.7777777777778%
80: 1.3888888888889%
108: 1.3888888888889%
180: 1.3888888888889%
96: 1.3888888888889%
100: 1.3888888888889%
144: 1.3888888888889%
2: 1.3888888888889%
3: 1.3888888888889%
150: 1.3888888888889%
54: 1.3888888888889%
32: 1.3888888888889%
9: 1.3888888888889%
25: 1.3888888888889%
75: 1.3888888888889%
50: 1.3888888888889%
5: 1.3888888888889%
45: 1.3888888888889%
216: 0.46296296296296%
64: 0.46296296296296%
125: 0.46296296296296%
1: 0.46296296296296%
27: 0.46296296296296%

Lenke til kommentar

Jeg prøvde å lime inn resultatet - det ble dessverre ikke vellykket :hm:

om du ser i koden hans, så ganger han sammen tallene på terningen, han plusser de ikke. Men ha, veldig rotete forklart.

 

I hvertfall, om du mener å å få verdien ved å gange sammen øynene på terningene så får du følgende:

12: 6.9444444444444%
24: 6.9444444444444%

27: 0.46296296296296%

 

Jeg forstår dessverre ikke programmeringen, men ble trigget av sannsynlighetsberegningen.

 

Du løste det jo elegant, etse.

Lenke til kommentar

da jeg kjedet meg litt i kveld, satt jeg sammen en litt mer generell løsning. Her har man 2 funksjoner hvor man kan legge ved hvor mange terninger og hvor mange sider. Denne viser f.eks. hvordan man kan løse dette problemet via rekursjon.

 

<?php
// A general function for getting all possible combinations of throws
function get_throw_combinations($num_dices, $num_sides)
{
   $combinations = array();
   // This ends the recursion
   if($num_dices == 1)
   {
    for($x = 1; $x <= $num_sides; $x++)
	    $combinations[] = Array($x);
    return $combinations;
   }

   // Goes deeper into the recursion
   for($x = 1; $x <= $num_sides; $x++)
   {
    foreach(get_throw_combinations($num_dices-1, $num_sides) as $throw)
    {
	    $throw[] = $x;
	    $combinations[] = $throw;
    }
   }
   return $combinations;
}
// Compares 2 arrays depending on the 2nd element
function my_array_cmp($a, $b)
{
   return $b[1] - $a[1];
}
// Finds the probability for each number
function probabilitys_for_values($num_dices, $num_sides)
{
   $combinations = get_throw_combinations($num_dices, $num_sides);
   $probabilities = array();

   // Start by counting how many times each number happends
   foreach($combinations as $throw)
   {
    $prod = 1;
    foreach($throw as $dice)
    {
	    $prod *= $dice;
    }

    if(array_key_exists($prod, $probabilities))
	    $probabilities[$prod][1]++;
    else
	    $probabilities[$prod] = array($prod, 1);
   }

   // Now calculate the probability, we will update the array
   usort($probabilities, 'my_array_cmp');
   for($x=0; $x<count($probabilities); $x++)
    $probabilities[$x][1] = 100 * ($probabilities[$x][1] / count($combinations));

   return $probabilities;
}

// Prints all the combinations:
foreach(probabilitys_for_values(3, 6) as $p)
{
   echo "$p[0] : $p[1]% <br />";
}
?>

  • Liker 1
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...