Il dado è tratto

\(5\) numeri uguali danno come risultato una presa. Tuttavia, la probabilità che ciò accada dipende da cosa conti come una prova: un singolo lancio di \(5\) dadi o un turno completo in cui continui ad abbinare i dadi e li lanci nuovamente fino a \(2\) volte. Qui usiamo dadi equilibrati \(5\) con i numeri \(1\) a \(6\) e risultati indipendenti. Ogni trucco conta come un successo; la probabilità che stai cercando non è limitata a un numero specifico di punti come \(6\) .


Secondo le istruzioni del gioco potete decidere nuovamente prima di ogni lancio aggiuntivo quali dadi lasciare sul tavolo. Il nostro unico obiettivo è qualche tipo di trucco, non il miglior punteggio complessivo in una partita. Un singolo lancio ha \(6^5=7776\) risultati ugualmente probabili quando si differenziano i dadi. Di questi \(6\) mostrano lo stesso numero su tutti i dadi. Quindi la possibilità è \(\frac{6}{7776}=\frac{1}{1296}\) . Non appena viene raggiunta una presa, termini la mossa; In totale sono consentiti un massimo di \(3\) lanci.

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

La strategia più banale è anche la migliore: se vuoi massimizzare la possibilità, tieni il gruppo più numeroso di numeri identici. Il numero di destinazione può anche cambiare: da \((2,2,3,4,5)\) tieni prima i due \(2\) . Se il tiro successivo dà \((6,6,6)\) , mantieni questo gruppo e lancia nuovamente i due \(2\) . L'ultima possibilità aumenta da \(\frac{1}{216}\) a \(\frac{1}{36}\) . E ultimo ma non meno importante, supponiamo: un espediente conclude immediatamente l'episodio; ulteriori cucciolate vengono omesse.

Il modo più semplice per eseguire il calcolo è iniziare con l'ultimo lancio. Se sono già disponibili \(4\) degli stessi dadi, devono passare solo i dadi rimanenti: la probabilità è \(\frac{1}{6}\) . Se \(3\) sono gli stessi dadi, gli altri due devono mostrare il numero tenuto. Poiché i loro risultati sono indipendenti, moltiplica le possibilità e ottieni \(\frac{1}{6}\cdot\frac{1}{6}=\frac{1}{36}\) . Se invece si tengono in mano numeri diversi contemporaneamente, non ci saranno problemi con l'ultimo lancio. Quindi non è solo il numero che conta, ma anche ciò che conservi.

Con \(2\) tiri rimanenti, ogni dado mancante ha un'altra possibilità. Se \(4\) i dadi sono uguali, è sufficiente un colpo con i dadi rimanenti. Il calcolo del contatore qui è più breve: manca il numero bersaglio in entrambi i tentativi con probabilità \(\frac{5}{6}\cdot\frac{5}{6}=\frac{25}{36}\) . La possibilità di successo è quindi \(1-\frac{25}{36}=\frac{11}{36}\) . Per i gruppi più piccoli si contano tutte le possibili conseguenze dei lanci e si consente di cambiare bersaglio. Le seguenti possibilità si presentano con la scelta migliore dello stop:

Gruppo più numerosoRisultati nella \(1.\) cucciolataPossibilità con \(2\) tiri rimanenti
\(1\)\(720\)\(\frac{221}{17496}\)
\(2\)\(5400\)\(\frac{113}{3888}\)
\(3\)\(1500\)\(\frac{121}{1296}\)
\(4\)\(150\)\(\frac{11}{36}\)
\(5\)\(6\)\(1\)

Le linee non si presentano con la stessa frequenza. Ad esempio, il gruppo più grande di \(2\) dadi viene creato in \(5400\) dei \(7776\) possibili primi lanci. Questi includono una singola coppia e \(2\) coppie; Se c'è un pareggio, scegli uno di essi. Moltiplichiamo ogni possibilità a destra per il numero al centro e dividiamo la somma per \(7776\) . Ciò restituisce \(p_3\) ; per \(p_2\) usi solo un tiro di resto. Prima del primo lancio con scelta di arresto ottimale valgono i seguenti valori: \(p_2\) per un massimo di \(2\) e \(p_3\) per un massimo di \(3\) lanci:

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

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

Se mantenere il gruppo più numeroso sia davvero la soluzione migliore può essere completamente testato. Il seguente script PHP considera ogni possibile selezione, compresi i numeri misti o l'assenza totale di dadi. Inizia alla fine del turno, quindi calcola le decisioni migliori per i tiri rimanenti \(1\) e \(2\) e infine calcola la media del primo tiro. Gli stessi modelli vengono riutilizzati per mantenere piccola la bolletta. Tutti i confronti vengono effettuati con numeri interi; solo la visualizzazione della percentuale è arrotondata:

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

Circa \(4{,}60\%\) significa: anche con la scelta migliore, un problema rimane raro. Se rilanci tutto ogni volta, la possibilità su un massimo di \(3\) tentativi è solo di circa \(0{,}23130\%\) . Se continui ad abbinare i dadi, ma ti attieni al numero target scelto dopo il \(1.\) lancio, otterrai circa \(4{,}52941\%\) . Il passaggio al gruppo più numeroso comporta quindi un piccolo vantaggio aggiuntivo. Non importa se si tratta di strategia matematica o di puro istinto: Kniffel è un gioco da tavolo senza tempo, divertente e soprattutto divertente.

Indietro