Moarul este turnat

\(5\) numere egale au ca rezultat un truc. Totuși, cât de probabil este aceasta depinde de ceea ce considerați ca o încercare: o singură aruncare de \(5\) zaruri sau o tură completă în care continuați să potriviți zarurile și să le reluați de până la \(2\) ori. Aici folosim \(5\) zaruri corecte cu numerele \(1\) până la \(6\) și rezultate independente. Fiecare truc contează ca un succes; probabilitatea pe care o căutați nu se limitează la un anumit număr de puncte precum \(6\) .


Conform instrucțiunilor de joc , puteți decide din nou înainte de fiecare aruncare suplimentară ce zaruri rămân întinse. Singurul nostru obiectiv este un fel de truc, nu cel mai bun scor general dintr-un joc. O singură aruncare are \(6^5=7776\) rezultate la fel de probabile la diferențierea zarurilor. Dintre acestea \(6\) arată același număr pe toate zarurile. Deci șansa este \(\frac{6}{7776}=\frac{1}{1296}\) . De îndată ce se ajunge la un truc, închei mișcarea; În total, sunt permise maximum \(3\) aruncări.

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

Strategia cea mai banală este și cea mai bună: dacă vrei să maximizezi șansa, păstrezi cel mai mare grup de numere identice. Numărul țintă se poate modifica și: De la \((2,2,3,4,5)\) păstrați mai întâi cele două \(2\) . Dacă următoarea aruncare oferă \((6,6,6)\) , păstrați acest grup și reluați cele două \(2\) . Ultima șansă crește de la \(\frac{1}{216}\) la \(\frac{1}{36}\) . Și, nu în ultimul rând, să presupunem: un gimmick încheie episodul imediat; alte așternuturi sunt omise.

Cel mai simplu mod de a face calculul este să începeți cu ultima aruncare. Dacă \(4\) din același zar sunt deja disponibile, doar zarurile rămase trebuie să treacă: șansa este \(\frac{1}{6}\) . Dacă \(3\) sunt aceleași zaruri, celelalte două trebuie să arate numărul deținut. Deoarece rezultatele lor sunt independente, înmulțiți șansele și obțineți \(\frac{1}{6}\cdot\frac{1}{6}=\frac{1}{36}\) . Pe de altă parte, dacă te ții de numere diferite în același timp, nu poate fi nicio problemă cu ultima aruncare. Deci nu contează doar numărul, ci și ceea ce păstrați.

Cu \(2\) aruncări rămase, fiecare zar lipsă are o altă șansă. Dacă zarurile \(4\) sunt aceleași, este suficientă o lovitură cu zarurile rămase. Calculul contorului este mai scurt aici: El ratează numărul țintă în ambele încercări cu probabilitate \(\frac{5}{6}\cdot\frac{5}{6}=\frac{25}{36}\) . Șansa de succes este deci \(1-\frac{25}{36}=\frac{11}{36}\) . Pentru grupuri mai mici, numărați toate consecințele posibile ale aruncărilor și permiteți schimbarea țintei. Următoarele șanse apar cu cea mai bună alegere de oprire:

Cel mai mare grupRezultă așternutul \(1.\)Șansă cu \(2\) aruncări rămase
\(1\)\(720\)\(\frac{221}{17496}\)
\(2\)\(5400\)\(\frac{113}{3888}\)
\(3\)\(1500\)\(\frac{121}{1296}\)
\(4\)\(150\)\(\frac{11}{36}\)
\(5\)\(6\)\(1\)

Liniile nu apar cu aceeași frecvență. De exemplu, un grup mai mare de \(2\) zaruri este creat în \(5400\) dintre \(7776\) primele aruncări posibile. Acestea includ o singură pereche și \(2\) perechi; Dacă există o cravată, alegeți una dintre ele. Înmulțim fiecare șansă din dreapta cu numărul din mijloc și împărțim suma la \(7776\) . Aceasta returnează \(p_3\) ; pentru \(p_2\) folosești doar o aruncare de rest. Următoarele valori se aplică înainte de prima aruncare cu opțiune optimă de oprire: \(p_2\) pentru maximum \(2\) și \(p_3\) pentru maximum \(3\) aruncări:

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

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

Dacă păstrarea celui mai mare grup este cu adevărat cea mai bună poate fi testat pe deplin. Următorul script PHP ia în considerare fiecare selecție posibilă, inclusiv numere mixte sau fără zaruri. Începe la sfârșitul turei, apoi calculează cele mai bune decizii pentru \(1\) și \(2\) aruncări rămase și, în final, face media pentru prima aruncare. Aceleași modele sunt refolosite pentru a menține nota mică. Toate comparațiile se fac cu numere întregi; numai afișajul procentual este rotunjit:

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

Aproximativ \(4{,}60\%\) înseamnă: chiar și cu cea mai bună alegere, o problemă rămâne rară. Dacă rerulați totul de fiecare dată, șansa de peste un maxim de \(3\) încercări este de numai aproximativ \(0{,}23130\%\) . Dacă continuați să potriviți zarurile, dar rămâneți la numărul țintă ales după \(1.\) aruncare, veți obține aproximativ \(4{,}52941\%\) . Trecerea la un grup mai mare aduce, prin urmare, un mic avantaj suplimentar. Indiferent dacă este vorba despre strategie matematică sau pur sentiment: Kniffel este un joc de societate atemporal, distractiv și, mai presus de toate, distractiv.

Înapoi