Tärningen är kastad

\(5\) lika siffror resulterar i ett trick. Hur troligt det är beror dock på vad du räknar som ett försök: ett enda kast med \(5\) tärningar eller en hel tur där du fortsätter att matcha tärningarna och kastar om dem upp till \(2\) gånger. Här använder vi \(5\) rättvisa tärningar med siffrorna \(1\) till \(6\) och oberoende resultat. Varje trick räknas som en framgång; sannolikheten du letar efter är inte begränsad till ett specifikt antal poäng som \(6\) .


Enligt spelinstruktionerna kan du bestämma igen före varje extra kast vilka tärningar som får ligga kvar. Vårt enda mål är något slags trick, inte det bästa totalresultatet i en match. Ett enda kast har \(6^5=7776\) lika sannolika resultat när man särskiljer tärningarna. Av dessa visar \(6\) samma antal på alla tärningar. Så chansen är \(\frac{6}{7776}=\frac{1}{1296}\) . Så fort ett trick uppnås avslutar du flytten; Totalt tillåts maximalt \(3\) kast.

$$p_1=\frac{6}{6^5}=\frac{1}{1296}\approx0{,}07716\%.$$

Den mest triviala strategin är också den bästa: om du vill maximera chansen behåller du den största gruppen av identiska nummer. Målnumret kan också ändras: Från \((2,2,3,4,5)\) behåller du först de två \(2\) . Om nästa kast ger \((6,6,6)\) , behåller du denna grupp och kastar om de två \(2\) . Sista chansen ökar från \(\frac{1}{216}\) till \(\frac{1}{36}\) . Och sist men inte minst, låt oss anta: En gimmick avslutar avsnittet omedelbart; ytterligare kullar utelämnas.

Det enklaste sättet att göra beräkningen är att börja med det sista kastet. Om \(4\) av samma tärning redan är tillgängliga, måste bara de återstående tärningarna passera: chansen är \(\frac{1}{6}\) . Om \(3\) är samma tärning, måste de andra två visa numret som hålls. Eftersom deras resultat är oberoende, multiplicera chanserna och få \(\frac{1}{6}\cdot\frac{1}{6}=\frac{1}{36}\) . Å andra sidan, om du håller på olika nummer samtidigt kan det inte vara några problem med det sista kastet. Så det är inte bara antalet som spelar roll, utan också vad du behåller.

Med \(2\) kvarvarande kast får varje saknad tärning en ny chans. Om \(4\) tärningar är lika, räcker det med en träff med de återstående tärningarna. Räknarberäkningen är kortare här: Han missar måltalet i båda försöken med sannolikhet \(\frac{5}{6}\cdot\frac{5}{6}=\frac{25}{36}\) . Chansen att lyckas är därför \(1-\frac{25}{36}=\frac{11}{36}\) . För mindre grupper räknar man alla möjliga konsekvenser av kasten och låter målet ändras. Följande chanser uppstår med det bästa valet av stopp:

Största gruppenResultat i \(1.\) kullenChans med \(2\) kvarvarande kast
\(1\)\(720\)\(\frac{221}{17496}\)
\(2\)\(5400\)\(\frac{113}{3888}\)
\(3\)\(1500\)\(\frac{121}{1296}\)
\(4\)\(150\)\(\frac{11}{36}\)
\(5\)\(6\)\(1\)

Linjerna förekommer inte med samma frekvens. Till exempel skapas en största grupp av \(2\) tärningar i \(5400\) av de \(7776\) möjliga första kasten. Dessa inkluderar ett enstaka par och \(2\) par; Finns det slips väljer du en av dem. Vi multiplicerar varje chans till höger med talet i mitten och dividerar summan med \(7776\) . Detta returnerar \(p_3\) ; för \(p_2\) använder du bara ett restkast. Följande värden gäller före första kast med optimalt stoppval: \(p_2\) för maximalt \(2\) och \(p_3\) för maximalt \(3\) kast:

$$p_2=\frac{221}{17496}\approx1{,}26315\%.$$

$$p_3=\frac{347897}{7558272}\approx4{,}60286425\%.$$

Om det verkligen är bäst att behålla den största gruppen kan testas fullt ut. Följande PHP-skript tar hänsyn till alla möjliga val, inklusive blandade nummer eller inga tärningar alls. Den börjar i slutet av omgången, beräknar sedan de bästa besluten för \(1\) och \(2\) återstående kast och slutligen ett medelvärde över det första kastet. Samma mönster återanvänds för att hålla notan liten. Alla jämförelser görs med heltal; endast procentvisningen är avrundad:

<?php

declare(strict_types=1);

if (PHP_INT_SIZE < 8) {
    throw new RuntimeException('64-Bit-PHP erforderlich.');
}

function combinations(array $limits): array
{
    $result = [[]];
    foreach ($limits as $limit) {
        $next = [];
        foreach ($result as $prefix) {
            for ($i = 0; $i <= $limit; $i++) {
                $next[] = [...$prefix, $i];
            }
        }
        $result = $next;
    }
    return $result;
}

function outcomes(int $number): array
{
    static $cache = [];
    if (isset($cache[$number])) {
        return $cache[$number];
    }
    $result = [];
    foreach (combinations(array_fill(0, $number, value: 5)) as $dice) {
        $counts = array_fill(0, count: 6, value: 0);
        foreach ($dice as $face) {
            $counts[$face]++;
        }
        $key = implode(',', $counts);
        $result[$key] = ($result[$key] ?? 0) + 1;
    }
    return $cache[$number] = $result;
}

function pattern(array $counts): string
{
    rsort($counts);
    return implode(',', $counts);
}

$states = [];
$values = [];
foreach (outcomes(5) as $key => $count) {
    $counts = array_map('intval', explode(',', $key));
    rsort($counts);
    $states[pattern($counts)] = $counts;
    $values[pattern($counts)] = (int) ($counts[0] === 5);
}

// Gemeinsamer Nenner: 6^(5 * verbleibende Würfe).
for ($remaining = 1; $remaining <= 2; $remaining++) {
    $next = [];
    foreach ($states as $key => $counts) {
        $best = 0;
        foreach (combinations($counts) as $held) {
            $number = 5 - array_sum($held);
            $total = 0;
            foreach (outcomes($number) as $rolled => $count) {
                $after = array_map('intval', explode(',', $rolled));
                foreach ($held as $face => $amount) {
                    $after[$face] += $amount;
                }
                $total += $count * $values[pattern($after)];
            }
            $best = max($best, $total * (6 ** (5 - $number)));
        }
        $next[$key] = $best;
    }
    $values = $next;
}

$numerator = 0;
$denominator = 6 ** 15;
foreach (outcomes(5) as $key => $count) {
    $numerator += $count * $values[pattern(array_map('intval', explode(',', $key)))];
}
[$a, $b] = [$numerator, $denominator];
while ($b !== 0) {
    [$a, $b] = [$b, $a % $b];
}
echo intdiv($numerator, $a), '/', intdiv($denominator, $a), PHP_EOL;
printf("%.10f%%\n", (100 * $numerator) / $denominator);

Runt \(4{,}60\%\) betyder: Även med det bästa valet förblir ett problem sällsynt. Om du rullar om allt varje gång är chansen över maximalt \(3\) försök bara ca \(0{,}23130\%\) . Om du fortsätter att matcha tärningarna, men håller dig till det målnummer som valts efter \(1.\) kast, kommer du att uppnå cirka \(4{,}52941\%\) . Att byta till den större gruppen ger därför en liten ytterligare fördel. Oavsett om det är matematisk strategi eller ren magkänsla: Kniffel är ett tidlöst, underhållande och framför allt underhållande brädspel.

Tillbaka