Kość została rzucona

\(5\) równe liczby skutkują lewą. Jednak prawdopodobieństwo tej sytuacji zależy od tego, co uznasz za próbę: pojedynczy rzut \(5\) kośćmi lub pełną turę, w której dopasowujesz kostki i rzucasz nimi ponownie \(2\) razy. Tutaj używamy \(5\) uczciwych kości z liczbami \(1\) do \(6\) i niezależnymi wynikami. Każda sztuczka liczy się jako sukces; prawdopodobieństwo, którego szukasz, nie jest ograniczone do określonej liczby punktów, np \(6\) .


Zgodnie z instrukcją gry , przed każdym dodatkowym rzutem możesz ponownie zdecydować, które kości pozostaną w grze. Naszym jedynym celem jest jakiś trik, a nie najlepszy ogólny wynik w meczu. Pojedynczy rzut daje \(6^5=7776\) równie prawdopodobne wyniki przy różnicowaniu kostek. Spośród nich \(6\) pokazuje tę samą liczbę na wszystkich kostkach. Zatem szansa wynosi \(\frac{6}{7776}=\frac{1}{1296}\) . Gdy tylko zostanie osiągnięta lewa, kończysz ruch; W sumie dozwolone jest maksymalnie \(3\) rzutów.

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

Najbardziej trywialna strategia jest również najlepsza: jeśli chcesz zmaksymalizować szansę, zatrzymaj największą grupę identycznych liczb. Liczba docelowa może się również zmienić: Z \((2,2,3,4,5)\) najpierw zachowujesz dwa \(2\) . Jeśli następny rzut przyniesie \((6,6,6)\) , zatrzymujesz tę grupę i ponownie rzucasz dwoma \(2\) . Ostatnia szansa wzrasta z \(\frac{1}{216}\) do \(\frac{1}{36}\) . I na koniec, załóżmy: sztuczka natychmiast kończy odcinek; dalsze mioty są pomijane.

Najprostszym sposobem obliczenia jest rozpoczęcie od ostatniego rzutu. Jeśli \(4\) tych samych kości są już dostępne, tylko pozostałe kości muszą przejść: szansa wynosi \(\frac{1}{6}\) . Jeśli \(3\) to te same kostki, pozostałe dwie muszą pokazywać posiadaną liczbę. Ponieważ ich wyniki są niezależne, pomnóż szanse i otrzymaj \(\frac{1}{6}\cdot\frac{1}{6}=\frac{1}{36}\) . Z drugiej strony, jeśli jednocześnie będziesz trzymał się różnych liczb, to z ostatnim rzutem nie może być problemu. Zatem nie tylko liczba ma znaczenie, ale także to, co zatrzymasz.

Gdy pozostały \(2\) rzuty, każda brakująca kość dostaje kolejną szansę. Jeśli \(4\) kości są takie same, wystarczy jedno trafienie pozostałymi kośćmi. Obliczenie licznika jest tutaj krótsze: w obu próbach nie trafia on w liczbę docelową z prawdopodobieństwem \(\frac{5}{6}\cdot\frac{5}{6}=\frac{25}{36}\) . Szansa na sukces wynosi zatem \(1-\frac{25}{36}=\frac{11}{36}\) . W przypadku mniejszych grup liczysz wszystkie możliwe konsekwencje rzutów i pozwalasz na zmianę celu. Przy najlepszym wyborze przystanku powstają następujące szanse:

Największa grupaWyniki w \(1.\) miocieSzansa przy \(2\) pozostałych rzutach
\(1\)\(720\)\(\frac{221}{17496}\)
\(2\)\(5400\)\(\frac{113}{3888}\)
\(3\)\(1500\)\(\frac{121}{1296}\)
\(4\)\(150\)\(\frac{11}{36}\)
\(5\)\(6\)\(1\)

Linie nie występują z tą samą częstotliwością. Na przykład największa grupa \(2\) kości jest tworzona w \(5400\) z \(7776\) możliwych pierwszych rzutów. Należą do nich pojedyncza para i \(2\) pary; Jeśli jest remis, wybierasz jednego z nich. Mnożymy każdą szansę po prawej stronie przez liczbę pośrodku i dzielimy sumę przez \(7776\) . To zwraca \(p_3\) ; dla \(p_2\) używasz tylko rzutu resztkowego. Przed pierwszym rzutem z optymalnym wyborem zatrzymania obowiązują następujące wartości: \(p_2\) dla maksymalnie \(2\) i \(p_3\) dla maksymalnie \(3\) rzutów:

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

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

Można w pełni przetestować, czy utrzymanie największej grupy jest naprawdę najlepsze. Poniższy skrypt PHP uwzględnia każdy możliwy wybór, łącznie z liczbami mieszanymi lub całkowitym brakiem kości. Rozpoczyna się pod koniec tury, następnie oblicza najlepsze decyzje dla \(1\) i \(2\) pozostałych rzutów i na koniec wylicza średnią z pierwszego rzutu. Te same wzory są ponownie wykorzystywane, aby rachunek był niewielki. Wszystkie porównania dokonywane są z liczbami całkowitymi; zaokrąglona jest tylko wartość procentowa:

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

Około \(4{,}60\%\) oznacza: Nawet przy najlepszym wyborze problem pozostaje rzadki. Jeśli za każdym razem przerzucisz wszystko od nowa, szansa na maksymalnie \(3\) próby wynosi tylko około \(0{,}23130\%\) . Jeśli nadal będziesz dopasowywał kostki, ale trzymał się docelowej liczby wybranej po \(1.\) rzucie, otrzymasz około \(4{,}52941\%\) . Przejście na większą grupę niesie zatem małą dodatkową korzyść. Niezależnie od tego, czy jest to strategia matematyczna, czy przeczucie: Kniffel to ponadczasowa, zabawna, a przede wszystkim zabawna gra planszowa.

Plecy