\(5\) nombor yang sama menghasilkan helah. Walau bagaimanapun, sejauh mana kemungkinan ini bergantung pada apa yang anda kira sebagai percubaan: satu gulung dadu \(5\) atau satu pusingan lengkap di mana anda terus memadankan dadu dan menggulungnya semula sehingga \(2\) kali. Di sini kami menggunakan \(5\) dadu saksama dengan nombor \(1\) hingga \(6\) dan keputusan bebas. Setiap helah dikira sebagai kejayaan; kebarangkalian yang anda cari tidak terhad kepada bilangan mata tertentu seperti \(6\) .
Mengikut arahan permainan , anda boleh membuat keputusan sekali lagi sebelum setiap lemparan tambahan dadu yang dibiarkan berbohong. Satu-satunya gol kami ialah sejenis helah, bukan skor keseluruhan terbaik dalam permainan. Gulungan tunggal mempunyai \(6^5=7776\) kemungkinan yang sama terhasil apabila membezakan dadu. Daripada jumlah ini \(6\) menunjukkan nombor yang sama pada semua dadu. Jadi peluangnya ialah \(\frac{6}{7776}=\frac{1}{1296}\) . Sebaik sahaja helah dicapai, anda menamatkan langkah; Jumlah maksimum lontaran \(3\) dibenarkan.
$$p_1=\frac{6}{6^5}=\frac{1}{1296}\approx0{,}07716\%.$$
Strategi yang paling remeh juga adalah yang terbaik: jika anda ingin memaksimumkan peluang, anda mengekalkan kumpulan terbesar nombor yang sama. Nombor sasaran juga boleh berubah: Daripada \((2,2,3,4,5)\) anda mula-mula menyimpan dua \(2\) . Jika gulungan seterusnya menghantar \((6,6,6)\) , anda menyimpan kumpulan ini dan melancarkan semula dua \(2\) . Peluang terakhir meningkat daripada \(\frac{1}{216}\) kepada \(\frac{1}{36}\) . Dan akhir sekali, mari kita anggap: Gimik menamatkan episod serta-merta; sampah selanjutnya ditinggalkan.
Cara paling mudah untuk membuat pengiraan ialah bermula dengan lontaran terakhir. Jika \(4\) daripada dadu yang sama sudah tersedia, hanya baki dadu yang perlu melepasi: peluangnya ialah \(\frac{1}{6}\) . Jika \(3\) adalah dadu yang sama, dua yang lain mesti menunjukkan nombor yang dipegang. Oleh kerana keputusan mereka adalah bebas, gandakan peluang dan dapatkan \(\frac{1}{6}\cdot\frac{1}{6}=\frac{1}{36}\) . Sebaliknya, jika anda memegang nombor yang berbeza pada masa yang sama, tidak ada masalah dengan lontaran terakhir. Jadi bukan hanya nombor yang penting, tetapi juga apa yang anda simpan.
Dengan baki \(2\) gulungan, setiap dadu yang hilang mendapat peluang lagi. Jika \(4\) dadu adalah sama, satu pukulan dengan baki dadu sudah memadai. Pengiraan pembilang adalah lebih pendek di sini: Dia terlepas nombor sasaran dalam kedua-dua percubaan dengan kebarangkalian \(\frac{5}{6}\cdot\frac{5}{6}=\frac{25}{36}\) . Oleh itu, peluang untuk berjaya ialah \(1-\frac{25}{36}=\frac{11}{36}\) . Untuk kumpulan yang lebih kecil, semua kemungkinan akibat lontaran dikira dan sasaran boleh diubah. Peluang berikut muncul dengan pilihan berhenti terbaik:
| Kumpulan terbesar | Hasil dalam sampah \(1.\) | Peluang dengan \(2\) baki gulungan |
|---|---|---|
| \(1\) | \(720\) | \(\frac{221}{17496}\) |
| \(2\) | \(5400\) | \(\frac{113}{3888}\) |
| \(3\) | \(1500\) | \(\frac{121}{1296}\) |
| \(4\) | \(150\) | \(\frac{11}{36}\) |
| \(5\) | \(6\) | \(1\) |
Garisan tidak berlaku dengan frekuensi yang sama. Sebagai contoh, kumpulan terbesar dadu \(2\) dicipta dalam \(5400\) daripada \(7776\) lontaran pertama yang mungkin. Ini termasuk pasangan tunggal dan \(2\) pasangan; Sekiranya terdapat seri, anda pilih salah satu daripadanya. Kami mendarab setiap peluang di sebelah kanan dengan nombor di tengah dan membahagikan jumlahnya dengan \(7776\) . Ini mengembalikan \(p_3\) ; untuk \(p_2\) anda hanya menggunakan baki lontaran. Nilai berikut digunakan sebelum balingan pertama dengan pilihan berhenti optimum: \(p_2\) untuk maksimum \(2\) dan \(p_3\) untuk maksimum \(3\) lontaran:
$$p_2=\frac{221}{17496}\approx1{,}26315\%.$$
$$p_3=\frac{347897}{7558272}\approx4{,}60286425\%.$$
Sama ada mengekalkan kumpulan terbesar adalah yang terbaik boleh diuji sepenuhnya. Skrip PHP berikut mempertimbangkan setiap pilihan yang mungkin, termasuk nombor bercampur atau tiada dadu dipegang sama sekali. Ia bermula pada penghujung belokan, kemudian mengira keputusan terbaik untuk \(1\) dan \(2\) gulungan yang tinggal dan akhirnya purata ke atas gulungan pertama. Corak yang sama digunakan semula untuk memastikan bil kecil. Semua perbandingan dibuat dengan integer; hanya paparan peratusan dibundarkan:
<?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);
Sekitar \(4{,}60\%\) bermakna: Walaupun dengan pilihan terbaik, masalah tetap jarang berlaku. Jika anda melancarkan semula segala-galanya setiap kali, peluang untuk mencapai maksimum \(3\) percubaan hanyalah kira-kira \(0{,}23130\%\) . Jika anda terus memadankan dadu, tetapi berpegang pada nombor sasaran yang dipilih selepas balingan \(1.\) , anda akan mencapai sekitar \(4{,}52941\%\) . Oleh itu, beralih kepada kumpulan yang lebih besar membawa kelebihan tambahan yang kecil. Tidak kira sama ada strategi matematik atau perasaan murni: Kniffel ialah permainan papan yang abadi, menghiburkan dan, di atas semua, menghiburkan.