Cái chết được đúc

\(5\) các số bằng nhau dẫn đến một trò lừa. Tuy nhiên, khả năng xảy ra điều này phụ thuộc vào những gì bạn tính là một lần thử: một lần tung xúc xắc \(5\) hoặc một lượt hoàn chỉnh trong đó bạn tiếp tục ghép các viên xúc xắc và tung lại chúng tối đa \(2\) lần. Ở đây chúng tôi sử dụng xúc xắc công bằng \(5\) với các số \(1\) đến \(6\) và các kết quả độc lập. Mọi thủ thuật đều được coi là thành công; xác suất bạn đang tìm kiếm không bị giới hạn ở một số điểm cụ thể như \(6\) .


Theo hướng dẫn của trò chơi , bạn có thể quyết định lại trước mỗi lần tung xúc xắc tiếp theo để lại viên xúc xắc nào. Mục tiêu duy nhất của chúng tôi là một số thủ thuật, không phải là điểm tổng thể tốt nhất trong một trò chơi. Một lần tung xúc xắc có khả năng xảy ra \(6^5=7776\) như nhau khi phân biệt xúc xắc. Trong số này \(6\) hiển thị cùng một số trên tất cả các viên xúc xắc. Vì vậy, cơ hội là \(\frac{6}{7776}=\frac{1}{1296}\) . Ngay sau khi đạt được thủ thuật, bạn kết thúc nước đi; Tổng cộng, được phép ném tối đa \(3\) .

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

Chiến lược tầm thường nhất cũng là chiến lược tốt nhất: nếu bạn muốn tối đa hóa cơ hội, bạn giữ nhóm lớn nhất gồm các số giống nhau. Số mục tiêu cũng có thể thay đổi: Từ \((2,2,3,4,5)\) trước tiên bạn giữ hai số \(2\) . Nếu lần cuộn tiếp theo cung cấp \((6,6,6)\) , bạn giữ nhóm này và cuộn lại hai \(2\) . Cơ hội cuối cùng tăng từ \(\frac{1}{216}\) lên \(\frac{1}{36}\) . Và cuối cùng nhưng không kém phần quan trọng, hãy giả sử: Một mánh lới quảng cáo kết thúc tập phim ngay lập tức; lứa tiếp theo được bỏ qua.

Cách dễ nhất để thực hiện phép tính là bắt đầu từ lần ném cuối cùng. Nếu \(4\) của cùng một viên xúc xắc đã có sẵn thì chỉ có viên xúc xắc còn lại mới vượt qua: cơ hội là \(\frac{1}{6}\) . Nếu \(3\) là cùng một viên xúc xắc thì hai viên còn lại phải hiển thị số được giữ. Vì kết quả của chúng là độc lập nên hãy nhân cơ hội và nhận được \(\frac{1}{6}\cdot\frac{1}{6}=\frac{1}{36}\) . Mặt khác, nếu bạn giữ nhiều số khác nhau cùng lúc thì lần ném cuối cùng sẽ không có vấn đề gì. Vì vậy, vấn đề không chỉ là con số mà còn là những gì bạn giữ.

Với \(2\) cuộn còn lại, mỗi con súc sắc bị thiếu sẽ có một cơ hội khác. Nếu \(4\) viên xúc xắc giống nhau, chỉ cần đánh một viên xúc xắc còn lại là đủ. Phép tính của bộ đếm ở đây ngắn hơn: Anh ta trượt số mục tiêu trong cả hai lần thử với xác suất \(\frac{5}{6}\cdot\frac{5}{6}=\frac{25}{36}\) . Do đó, cơ hội thành công là \(1-\frac{25}{36}=\frac{11}{36}\) . Đối với các nhóm nhỏ hơn, bạn tính toán tất cả các hậu quả có thể xảy ra của các cú ném và cho phép thay đổi mục tiêu. Các cơ hội sau đây phát sinh với sự lựa chọn điểm dừng tốt nhất:

Nhóm lớn nhấtKết quả ở lứa \(1.\)Cơ hội với \(2\) cuộn còn lại
\(1\)\(720\)\(\frac{221}{17496}\)
\(2\)\(5400\)\(\frac{113}{3888}\)
\(3\)\(1500\)\(\frac{121}{1296}\)
\(4\)\(150\)\(\frac{11}{36}\)
\(5\)\(6\)\(1\)

Các dòng không xảy ra với cùng tần số. Ví dụ: một nhóm xúc xắc \(2\) lớn nhất được tạo trong \(5400\) trong số \(7776\) lần ném đầu tiên có thể xảy ra. Chúng bao gồm một cặp đơn và cặp \(2\) ; Nếu hòa thì bạn chọn một trong số đó. Chúng tôi nhân mỗi cơ hội ở bên phải với số ở giữa và chia tổng cho \(7776\) . Điều này trả về \(p_3\) ; đối với \(p_2\) bạn chỉ sử dụng lần ném còn lại. Các giá trị sau áp dụng trước lần ném đầu tiên với lựa chọn dừng tối ưu: \(p_2\) cho tối đa \(2\) và \(p_3\) cho tối đa \(3\) lần ném:

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

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

Việc giữ nhóm lớn nhất có thực sự tốt nhất hay không có thể được kiểm tra đầy đủ. Tập lệnh PHP sau đây xem xét mọi lựa chọn có thể xảy ra, bao gồm cả hỗn số hoặc không có xúc xắc nào cả. Nó bắt đầu ở cuối lượt, sau đó tính toán các quyết định tốt nhất cho \(1\) và \(2\) cuộn còn lại và cuối cùng tính trung bình cho lần cuộn đầu tiên. Các mẫu tương tự được tái sử dụng để giữ cho tờ tiền nhỏ. Tất cả các so sánh được thực hiện bằng số nguyên; chỉ hiển thị phần trăm được làm tròn:

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

Khoảng \(4{,}60\%\) có nghĩa là: Ngay cả với lựa chọn tốt nhất, vấn đề vẫn hiếm khi xảy ra. Nếu bạn cuộn lại mọi thứ mỗi lần, cơ hội vượt qua tối đa \(3\) lần thử chỉ là khoảng \(0{,}23130\%\) . Nếu bạn tiếp tục ghép xúc xắc nhưng bám sát số mục tiêu đã chọn sau lần tung \(1.\) , bạn sẽ đạt được khoảng \(4{,}52941\%\) . Do đó, việc chuyển sang nhóm lớn hơn mang lại một lợi thế bổ sung nhỏ. Bất kể đó là chiến lược toán học hay cảm giác thuần túy: Kniffel là một trò chơi board game vượt thời gian, mang tính giải trí và trên hết là mang tính giải trí.

Trở lại