Diberikan tiga gulungan dadu (nilai integer dari 1-6) dalam urutan diurutkan (agar tidak dapat dibedakan), konversikan dengan jumlah dua dadu yang adil dengan distribusi yang identik.
Jawaban untuk tiga banding satu adalah menjumlahkan semuanya, modulo 6. Hasil akhirnya adalah distribusi yang benar-benar datar, di mana masing-masing dari keenam angka itu sama-sama berpeluang besar (seperti satu dadu).
Sangat mudah untuk melakukan ini untuk tiga-ke-satu, dengan menjumlahkan mereka semua modulo 6. Hasil akhirnya adalah distribusi yang benar-benar datar, di mana masing-masing dari keenam angka tersebut memiliki kemungkinan yang sama (seperti halnya satu die). Tantangan Anda adalah melakukan hal yang sama untuk tiga hingga dua.
Terinspirasi oleh The Three Indistinguishable Dice Puzzle milik standupmath . Video "solusi" tindak lanjut juga diposting, tetapi berdebat tentang "keanggunan" dari satu atau lain cara agak subyektif. Menghitung karakter tidak.:D
Instruksi
Menulis sebuah program atau fungsi yang menerima tiga diurutkan bilangan bulat / digit, 1-6, dan output atau hasil satu bilangan bulat, 2-12, sehingga, untuk 216 kemungkinan input, output didistribusikan sebagai:
222222
333333333333
444444444444444444
555555555555555555555555
666666666666666666666666666666
777777777777777777777777777777777777
888888888888888888888888888888
999999999999999999999999
AAAAAAAAAAAAAAAAAA
BBBBBBBBBBBB
CCCCCC
(Saya telah menggunakan hex untuk mempertahankan karakter tunggal; output desimal baik-baik saja)
Karena dadu tidak dapat dibedakan, tidak ada urutan intrinsik untuk mereka, maka input diurutkan. Anda tidak bisa begitu saja "menjatuhkan yang ketiga" karena itu akan ambigu.
Detail
- Skor adalah panjang program dalam byte
- Program dapat berupa fungsi yang disebut entah bagaimana, atau skrip yang dapat dieksekusi yang bertuliskan dari stdin, atau apa pun yang nyaman.
- Tidak ada "rerolling" dengan mendapatkan entropi dari sumber lain
Contoh (dan uji)
Daripada melakukan segala macam pengujian probabilistik, cukup mudah untuk merobek 216 (6³) kasus dari ketiga dadu dan menegaskan bahwa fungsi Anda mengembalikan setiap nilai sebanyak yang seharusnya. Ini akan dipanggil dengan parameter yang identik (mis. Kasing 1, 2, 3
dan 3, 2, 1
, ... dianggap tidak dapat dibedakan dan (secara sewenang-wenang) dikonversi menjadi 1, 2, 3
).
Contoh jawaban (sangat kasar dan tidak efisien) dan test suite disediakan di bawah ini dalam Python. Semoga bit tes cukup jelas untuk port ke bahasa pilihan Anda, meskipun melakukan stdin / stdout akan sedikit berbeda. Kode pengujian hanya untuk pengujian dan tidak diberi skor (meskipun jika Anda ingin menyediakannya untuk pengguna lain dari bahasa Anda atau metode I / O, itu mungkin berguna).
# 6x6 lists of numbers with digits sorted
LUT = [
[[124], [133, 166], [346], [223, 355], [256], [115, 445]],
[[233, 266], [125], [224, 455], [134], [116, 446], [356]],
[[126], [111, 333, 555, 225], [234], [144, 366], [456], [135]],
[[112, 244], [235], [334, 466], [145], [226, 556], [136]],
[[146], [122, 155], [236], [113, 344], [245], [335, 566]],
[[246], [123], [114, 336], [345], [222, 444, 666, 255], [156]],
]
def three2two(rolls):
look_for = int('{}{}{}'.format(*sorted(rolls)))
for i in range(6):
for j in range(6):
if look_for in LUT[i][j]:
return i + j + 2
# fair distribution of the sum of two dice multiplied by 6 (because each should be hit 6x)
expected_counts = {
2: 6, 12: 6,
3: 12, 11: 12,
4: 18, 10: 18,
5: 24, 9: 24,
6: 30, 8: 30,
7: 36,
}
d = [1, 2, 3, 4, 5, 6]
for i in d:
for j in d:
for k in d:
ijk = sorted([i, j, k])
result = three2two(ijk)
expected_counts[result] -= 1
for key in expected_counts:
assert expected_counts[key] == 0
(a+b+c)%6+1
dan(a*b*c)%7
mengonversi tiga kali lipat dadu yang tidak berurutan menjadi satu gulungan dadu yang seragam, tetapi sayangnya tidak independen secara probabilistik.Jawaban:
Jelly ,
2220 byteCobalah online! atau mensimulasikan semua hasil 216 .
Latar Belakang
Kami memetakan setiap triplet gulungan dadu yang tidak berurutan (dicantumkan dengan beragamnya masing-masing) ke pasangan gulungan dadu yang dipesan dengan cara berikut:
Ini membuat semua hasil bisa dikerjakan.
Bagaimana itu bekerja
sumber
CJam,
2524 byteIni adalah port jawaban Jelly saya .
Cobalah online! atau mensimulasikan semua hasil 216 .
Terima kasih kepada @ jimmy23013 untuk bermain golf 1 byte!
sumber
6bW2t1b
.Pyth,
4127 byte10 testcas acak
Konfirmasi validitas.
Tabel konversi:
Solusi 41 byte sebelumnya:
Saya perlu golf ini ...
Cobalah online!
Tabel konversi:
sumber
CJam,
3735 byteMungkin tidak bermain golf dengan baik.
Tapi kalahkan Pyth.Coba di sini.
sumber