Terningen er støbt

\(5\) lige tal resulterer i et trick. Hvor sandsynligt det er, afhænger dog af, hvad du tæller som et forsøg: et enkelt kast med \(5\) terninger eller en hel omgang, hvor du bliver ved med at matche terninger og kaster dem igen op til \(2\) gange. Her bruger vi \(5\) retfærdige terninger med tallene \(1\) til \(6\) og uafhængige resultater. Hvert trick tæller som en succes; sandsynligheden, du leder efter, er ikke begrænset til et bestemt antal punkter som \(6\) .


Ifølge spilinstruktionerne kan du igen beslutte før hvert ekstra kast, hvilke terninger der bliver liggende. Vores eneste mål er en form for trick, ikke den bedste samlede score i en kamp. Et enkelt kast har \(6^5=7776\) lige så sandsynlige resultater, når man differentierer terningerne. Af disse viser \(6\) det samme antal på alle terninger. Så chancen er \(\frac{6}{7776}=\frac{1}{1296}\) . Så snart et trick er nået, afslutter du bevægelsen; I alt er maksimalt \(3\) kast tilladt.

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

Den mest trivielle strategi er også den bedste: Hvis du vil maksimere chancen, beholder du den største gruppe af identiske tal. Måltallet kan også ændre sig: Fra \((2,2,3,4,5)\) beholder man først de to \(2\) . Hvis det næste kast leverer \((6,6,6)\) , beholder du denne gruppe og kaster de to \(2\) igen. Den sidste chance øges fra \(\frac{1}{216}\) til \(\frac{1}{36}\) . Og sidst men ikke mindst, lad os antage: En gimmick afslutter episoden med det samme; yderligere kuld er udeladt.

Den nemmeste måde at lave udregningen på er at starte med det sidste kast. Hvis \(4\) af de samme terninger allerede er tilgængelige, skal kun de resterende terninger bestå: chancen er \(\frac{1}{6}\) . Hvis \(3\) er de samme terninger, skal de to andre vise tallet holdt. Fordi deres resultater er uafhængige, gange chancerne og få \(\frac{1}{6}\cdot\frac{1}{6}=\frac{1}{36}\) . På den anden side, hvis du holder på forskellige numre på samme tid, kan der ikke være noget problem med det sidste kast. Så det er ikke kun antallet, der betyder noget, men også hvad du beholder.

Med \(2\) resterende kast, får hver manglende terning endnu en chance. Hvis \(4\) terninger er ens, er et slag med de resterende terninger tilstrækkeligt. Tællerberegningen er kortere her: Han misser måltallet i begge forsøg med sandsynlighed \(\frac{5}{6}\cdot\frac{5}{6}=\frac{25}{36}\) . Chancen for succes er derfor \(1-\frac{25}{36}=\frac{11}{36}\) . For mindre grupper tæller du alle mulige konsekvenser af kastene og lader målet ændres. Følgende chancer opstår med det bedste valg af stop:

Største gruppeResultater i \(1.\) kuldetChance med \(2\) resterende kast
\(1\)\(720\)\(\frac{221}{17496}\)
\(2\)\(5400\)\(\frac{113}{3888}\)
\(3\)\(1500\)\(\frac{121}{1296}\)
\(4\)\(150\)\(\frac{11}{36}\)
\(5\)\(6\)\(1\)

Linjerne forekommer ikke med samme frekvens. For eksempel skabes en største gruppe af \(2\) terninger i \(5400\) af de \(7776\) mulige første kast. Disse inkluderer et enkelt par og \(2\) par; Er der uafgjort, vælger du en af ​​dem. Vi ganger hver chance til højre med tallet i midten og dividerer summen med \(7776\) . Dette returnerer \(p_3\) ; for \(p_2\) bruger du kun et restkast. Følgende værdier gælder før det første kast med optimalt stopvalg: \(p_2\) for maksimalt \(2\) og \(p_3\) for maksimalt \(3\) kast:

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

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

Om det virkelig er bedst at beholde den største gruppe, kan testes fuldt ud. Følgende PHP-script overvejer alle mulige valg, inklusive blandede tal eller ingen terninger overhovedet. Den starter i slutningen af ​​runden, beregner derefter de bedste beslutninger for \(1\) og \(2\) resterende kast og til sidst gennemsnittet over det første kast. De samme mønstre genbruges for at holde regningen lille. Alle sammenligninger er lavet med heltal; kun procentvisningen er afrundet:

<?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);

Omkring \(4{,}60\%\) betyder: Selv med det bedste valg forbliver et problem sjældent. Hvis du ruller alt igen hver gang, er chancen over et maksimum på \(3\) forsøg kun omkring \(0{,}23130\%\) . Hvis du bliver ved med at matche terninger, men holder dig til det måltal, du har valgt efter det \(1.\) kast, vil du opnå omkring \(4{,}52941\%\) . At skifte til den større gruppe giver derfor en lille ekstra fordel. Uanset om det er matematisk strategi eller ren mavefornemmelse: Kniffel er et tidløst, underholdende og frem for alt underholdende brætspil.

Tilbage