La suerte está echada

\(5\) números iguales resultan en un truco. Sin embargo, la probabilidad de que esto ocurra depende de lo que cuentes como intento: una sola tirada de \(5\) dados o un turno completo en el que sigues haciendo coincidir los dados y los vuelves a tirar hasta \(2\) veces. Aquí usamos \(5\) dados justos con los números \(1\) a \(6\) y resultados independientes. Cada truco cuenta como un éxito; la probabilidad que busca no se limita a un número específico de puntos como \(6\) .


De acuerdo con las instrucciones del juego , puedes volver a decidir antes de cada tirada adicional qué dados quedan tirados. Nuestro único objetivo es algún tipo de truco, no conseguir la mejor puntuación general en un juego. Una sola tirada tiene \(6^5=7776\) resultados igualmente probables al diferenciar los dados. De estos \(6\) muestran el mismo número en todos los dados. Entonces la probabilidad es \(\frac{6}{7776}=\frac{1}{1296}\) . Tan pronto como se alcanza un truco, finalizas el movimiento; Se permite un máximo de \(3\) lanzamientos en total.

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

La estrategia más trivial es también la mejor: si quieres maximizar las posibilidades, conservas el grupo más grande de números idénticos. El número objetivo también puede cambiar: de \((2,2,3,4,5)\) primero conservas los dos \(2\) . Si la siguiente tirada arroja \((6,6,6)\) , conservas este grupo y vuelves a tirar los dos \(2\) . La última oportunidad aumenta de \(\frac{1}{216}\) a \(\frac{1}{36}\) . Y por último, pero no menos importante, supongamos: un truco finaliza el episodio inmediatamente; se omiten más camadas.

La forma más sencilla de hacer el cálculo es empezar por el último lanzamiento. Si \(4\) del mismo dado ya están disponibles, solo tienen que pasar los dados restantes: la probabilidad es \(\frac{1}{6}\) . Si \(3\) son los mismos dados, los otros dos deben mostrar el número que tiene. Como sus resultados son independientes, multiplique las posibilidades y obtenga \(\frac{1}{6}\cdot\frac{1}{6}=\frac{1}{36}\) . En cambio, si agarras distintos números al mismo tiempo, no puede haber problema con el último lanzamiento. Así que no sólo importa el número, sino también lo que conservas.

Con \(2\) tiradas restantes, cada dado que falta tiene otra oportunidad. Si \(4\) dados son iguales, un golpe con los dados restantes es suficiente. El cálculo del contador es más corto aquí: falla el número objetivo en ambos intentos con probabilidad \(\frac{5}{6}\cdot\frac{5}{6}=\frac{25}{36}\) . Por lo tanto, la probabilidad de éxito es \(1-\frac{25}{36}=\frac{11}{36}\) . Para grupos más pequeños, se cuentan todas las posibles consecuencias de los lanzamientos y se puede cambiar el objetivo. Las siguientes posibilidades surgen con la mejor elección de parada.:

Grupo más grandeResultados en la \(1.\) camadaPosibilidad con \(2\) tiradas restantes
\(1\)\(720\)\(\frac{221}{17496}\)
\(2\)\(5400\)\(\frac{113}{3888}\)
\(3\)\(1500\)\(\frac{121}{1296}\)
\(4\)\(150\)\(\frac{11}{36}\)
\(5\)\(6\)\(1\)

Las líneas no ocurren con la misma frecuencia. Por ejemplo, se crea un grupo más grande de \(2\) dados en \(5400\) de los \(7776\) primeros lanzamientos posibles. Estos incluyen un solo par y \(2\) pares; Si hay empate, eliges uno de ellos. Multiplicamos cada probabilidad de la derecha por el número del medio y dividimos la suma por \(7776\) . Esto devuelve \(p_3\) ; para \(p_2\) solo usas un tiro restante. Los siguientes valores se aplican antes del primer lanzamiento con elección de parada óptima: \(p_2\) para un máximo de \(2\) y \(p_3\) para un máximo de \(3\) lanzamientos:

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

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

Se puede comprobar por completo si mantener el grupo más grande es realmente lo mejor. El siguiente script PHP considera todas las selecciones posibles, incluidos números mixtos o ningún dado. Comienza al final del turno, luego calcula las mejores decisiones para \(1\) y \(2\) tiradas restantes y finalmente promedia la primera tirada. Se reutilizan los mismos patrones para mantener el billete pequeño. Todas las comparaciones se hacen con números enteros; sólo se redondea la visualización del porcentaje:

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

Alrededor de \(4{,}60\%\) significa: Incluso con la mejor opción, un problema sigue siendo raro. Si vuelves a tirar todo cada vez, la probabilidad de un máximo de \(3\) intentos es solo de \(0{,}23130\%\) . Si sigues haciendo coincidir los dados, pero te ciñes al número objetivo elegido después del \(1.\) lanzamiento, lograrás alrededor de \(4{,}52941\%\) . Por lo tanto, pasar al grupo más grande supone una pequeña ventaja adicional. Ya sea estrategia matemática o pura intuición: Kniffel es un juego de mesa atemporal, entretenido y, sobre todo, entretenido.

Atrás