तीन डाइस रोल (1-6 से पूर्णांक मान) को क्रमबद्ध क्रम में (जैसे कि अप्रभेद्य होना) को देखते हुए, उन्हें समान वितरण के साथ दो उचित पासा के योग में परिवर्तित करें ।
तीन से एक के लिए जवाब उन सभी को जोड़ रहा है, modulo 6. अंतिम-परिणाम पूरी तरह से फ्लैट वितरण है, जहां छह संख्याओं में से प्रत्येक समान रूप से (बस एक मरने की तरह) संभावना है।
तीन-से-एक के लिए यह करना आसान है, उन सभी को मॉडुलो 6. संक्षेप में। अंत-परिणाम एक बिल्कुल सपाट वितरण है, जहां छह संख्याओं में से प्रत्येक समान रूप से (बस एक एकल मरने की तरह) समान हैं। आपकी चुनौती तीन से दो के लिए एक ही करने की है।
स्टैंडअपमथ की द थ्री इंडिंडिशिबल डाइस पहेली से प्रेरित है । एक अनुवर्ती "समाधान" वीडियो भी पोस्ट किया गया था, लेकिन एक तरह से या किसी अन्य के "लालित्य" के बारे में बहस करना थोड़ा व्यक्तिपरक है। वर्णों की गिनती नहीं है।:D
अनुदेश
एक प्रोग्राम या फ़ंक्शन लिखें जो तीन सॉर्ट किए गए पूर्णांक / अंक, 1-6 को स्वीकार करता है , और आउटपुट या एक पूर्णांक, 2-12, जैसे कि 216 संभावित इनपुट के लिए, आउटपुट के रूप में वितरित किया जाता है:
222222
333333333333
444444444444444444
555555555555555555555555
666666666666666666666666666666
777777777777777777777777777777777777
888888888888888888888888888888
999999999999999999999999
AAAAAAAAAAAAAAAAAA
BBBBBBBBBBBB
CCCCCC
(मैंने एकल वर्ण रखने के लिए हेक्स का उपयोग किया है; दशमलव का उत्पादन ठीक है)
क्योंकि पासा अप्रभेद्य है, इसलिए उनके लिए कोई आंतरिक आदेश नहीं है, इसलिए छांटे गए इनपुट। आप बस "तीसरा ड्रॉप" नहीं कर सकते क्योंकि यह अस्पष्ट होगा।
विवरण
- स्कोर बाइट्स में कार्यक्रम की लंबाई है
- कार्यक्रम एक फ़ंक्शन हो सकता है जिसे किसी भी तरह कहा जाता है, या निष्पादन योग्य स्क्रिप्ट जो स्टड से पढ़ता है, या जो कुछ भी है।
- दूसरे स्रोत से एन्ट्रापी प्राप्त करके कोई "रेरोलिंग" नहीं
उदाहरण (और परीक्षण)
किसी भी प्रकार के संभाव्य परीक्षण करने के बजाय, यह तीनों पासा के 216 (6³) मामलों को चीरना आसान है और यह दावा करता है कि आपका फ़ंक्शन प्रत्येक मान को जितनी बार चाहे वापस लौटाए। इसे समान मापदंडों के साथ कहा जाएगा (उदाहरण के मामले 1, 2, 3और 3, 2, 1..., को अविभाज्य माना जाता है और (मनमाने ढंग से) रूपांतरित किया जाता है 1, 2, 3)।
पायथन में नीचे एक उदाहरण उत्तर (अत्यंत पाशविक बल और अक्षम) और परीक्षण सूट प्रदान किया गया है। उम्मीद है कि टेस्ट बिट्स आपकी पसंद की भाषा में पोर्ट करने के लिए पर्याप्त स्पष्ट हैं, हालांकि स्टड / स्टडआउट करना थोड़ा अलग होगा। परीक्षण कोड केवल परीक्षण के लिए है और स्कोर नहीं किया गया है (हालांकि यदि आप इसे अपनी भाषा के अन्य उपयोगकर्ताओं या I / O विधि के लिए प्रदान करना चाहते हैं, तो यह उपयोगी हो सकता है)।
# 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और (a*b*c)%7एक ही एकल रोल के लिए अनियंत्रित पासा का एक ट्रिपल कन्वर्ट, लेकिन दुर्भाग्य से संभाव्य रूप से स्वतंत्र नहीं हैं।
