Rudde Skrevet 21. mars 2012 Del Skrevet 21. mars 2012 (endret) 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 21. mars 2012 av Rudde93 Lenke til kommentar
Leakim Skrevet 21. mars 2012 Del Skrevet 21. mars 2012 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
Rudde Skrevet 21. mars 2012 Forfatter Del Skrevet 21. mars 2012 Dette skal ikke være random, jeg ser på alle mulige løsninger. Lenke til kommentar
etse Skrevet 22. mars 2012 Del Skrevet 22. mars 2012 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 />"; } 1 Lenke til kommentar
snippsat Skrevet 22. mars 2012 Del Skrevet 22. mars 2012 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
etse Skrevet 22. mars 2012 Del Skrevet 22. mars 2012 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
smartphone Skrevet 22. mars 2012 Del Skrevet 22. mars 2012 (endret) 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 22. mars 2012 av smartphone Lenke til kommentar
smartphone Skrevet 22. mars 2012 Del Skrevet 22. mars 2012 Jeg prøvde å lime inn resultatet - det ble dessverre ikke vellykket Lenke til kommentar
etse Skrevet 22. mars 2012 Del Skrevet 22. mars 2012 Jeg prøvde å lime inn resultatet - det ble dessverre ikke vellykket 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
smartphone Skrevet 22. mars 2012 Del Skrevet 22. mars 2012 Jeg prøvde å lime inn resultatet - det ble dessverre ikke vellykket 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
etse Skrevet 22. mars 2012 Del Skrevet 22. mars 2012 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 />"; } ?> 1 Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå