तीन अविभाज्य पासा


12

एक स्पष्ट घन में तीन पासा

तीन डाइस रोल (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

2
मैं कई बार सवाल पढ़ता हूं और इसके बारे में थोड़ा भी अंदाजा नहीं रखता कि यह क्या मांग रहा है।
feersum

1
इस चुनौती के अस्पष्ट होने की समस्या के अलावा, कोड गोल्फ चुनौतियों को पात्रों के बजाय बाइट्स द्वारा स्कोर करना चाहिए, जब तक कि आपके पास उस डिफ़ॉल्ट को ओवरराइड करने के लिए वास्तव में अच्छा कारण नहीं है।
मेगो

मुझे लगता है कि मैंने इसे पा लिया है। प्रश्न हमें कुछ बाधाओं के साथ तीन पासा रोल से दो पासा रोल तक का नक्शा बनाने के लिए कह रहा है।
लीक नून

2
आप दो पासा के साथ नहीं बना रहे हैं , आप दो रोल अनुकरण करने के लिए तीन रोल का उपयोग कर रहे हैं।
निक टी

2
दोनों (a+b+c)%6+1और (a*b*c)%7एक ही एकल रोल के लिए अनियंत्रित पासा का एक ट्रिपल कन्वर्ट, लेकिन दुर्भाग्य से संभाव्य रूप से स्वतंत्र नहीं हैं।
xnor

जवाबों:


5

जेली , 22 20 बाइट्स

6ṗ3Ṣ€ṢðQ€L€Ụịḷi’:6d6‘S

इसे ऑनलाइन आज़माएं! या सभी 216 परिणामों का अनुकरण करें

पृष्ठभूमि

हम निम्नलिखित फैशन में पासा रोल की एक जोड़ी के लिए (संबंधित गुणकों के साथ सूचीबद्ध) पासा रोल के प्रत्येक unordered ट्रिपल नक्शा:

[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3] -> [1,1]
[1,2,4],[1,2,4],[1,2,4],[1,2,4],[1,2,4],[1,2,4] -> [1,2]
[1,2,5],[1,2,5],[1,2,5],[1,2,5],[1,2,5],[1,2,5] -> [1,3]
[1,2,6],[1,2,6],[1,2,6],[1,2,6],[1,2,6],[1,2,6] -> [1,4]
[1,3,4],[1,3,4],[1,3,4],[1,3,4],[1,3,4],[1,3,4] -> [1,5]
[1,3,5],[1,3,5],[1,3,5],[1,3,5],[1,3,5],[1,3,5] -> [1,6]
[1,3,6],[1,3,6],[1,3,6],[1,3,6],[1,3,6],[1,3,6] -> [2,1]
[1,4,5],[1,4,5],[1,4,5],[1,4,5],[1,4,5],[1,4,5] -> [2,2]
[1,4,6],[1,4,6],[1,4,6],[1,4,6],[1,4,6],[1,4,6] -> [2,3]
[1,5,6],[1,5,6],[1,5,6],[1,5,6],[1,5,6],[1,5,6] -> [2,4]
[2,3,4],[2,3,4],[2,3,4],[2,3,4],[2,3,4],[2,3,4] -> [2,5]
[2,3,5],[2,3,5],[2,3,5],[2,3,5],[2,3,5],[2,3,5] -> [2,6]
[2,3,6],[2,3,6],[2,3,6],[2,3,6],[2,3,6],[2,3,6] -> [3,1]
[2,4,5],[2,4,5],[2,4,5],[2,4,5],[2,4,5],[2,4,5] -> [3,2]
[2,4,6],[2,4,6],[2,4,6],[2,4,6],[2,4,6],[2,4,6] -> [3,3]
[2,5,6],[2,5,6],[2,5,6],[2,5,6],[2,5,6],[2,5,6] -> [3,4]
[3,4,5],[3,4,5],[3,4,5],[3,4,5],[3,4,5],[3,4,5] -> [3,5]
[3,4,6],[3,4,6],[3,4,6],[3,4,6],[3,4,6],[3,4,6] -> [3,6]
[3,5,6],[3,5,6],[3,5,6],[3,5,6],[3,5,6],[3,5,6] -> [4,1]
[4,5,6],[4,5,6],[4,5,6],[4,5,6],[4,5,6],[4,5,6] -> [4,2]
[1,2,2],[1,2,2],[1,2,2],[1,3,3],[1,3,3],[1,3,3] -> [4,3]
[1,4,4],[1,4,4],[1,4,4],[1,5,5],[1,5,5],[1,5,5] -> [4,4]
[1,6,6],[1,6,6],[1,6,6],[2,3,3],[2,3,3],[2,3,3] -> [4,5]
[2,4,4],[2,4,4],[2,4,4],[2,5,5],[2,5,5],[2,5,5] -> [4,6]
[2,6,6],[2,6,6],[2,6,6],[3,4,4],[3,4,4],[3,4,4] -> [5,1]
[3,5,5],[3,5,5],[3,5,5],[3,6,6],[3,6,6],[3,6,6] -> [5,2]
[4,5,5],[4,5,5],[4,5,5],[4,6,6],[4,6,6],[4,6,6] -> [5,3]
[5,6,6],[5,6,6],[5,6,6],[1,1,2],[1,1,2],[1,1,2] -> [5,4]
[1,1,3],[1,1,3],[1,1,3],[1,1,4],[1,1,4],[1,1,4] -> [5,5]
[1,1,5],[1,1,5],[1,1,5],[1,1,6],[1,1,6],[1,1,6] -> [5,6]
[2,2,3],[2,2,3],[2,2,3],[2,2,4],[2,2,4],[2,2,4] -> [6,1]
[2,2,5],[2,2,5],[2,2,5],[2,2,6],[2,2,6],[2,2,6] -> [6,2]
[3,3,4],[3,3,4],[3,3,4],[3,3,5],[3,3,5],[3,3,5] -> [6,3]
[3,3,6],[3,3,6],[3,3,6],[4,4,5],[4,4,5],[4,4,5] -> [6,4]
[4,4,6],[4,4,6],[4,4,6],[5,5,6],[5,5,6],[5,5,6] -> [6,5]
[1,1,1],[2,2,2],[3,3,3],[4,4,4],[5,5,5],[6,6,6] -> [6,6]

यह सभी परिणामों को परिवर्तनीय बनाता है।

यह काम किस प्रकार करता है

6ṗ3Ṣ€ṢðĠ€Ụịḷi’:6d6‘S  Main link. Argument: D (three dice rolls, sorted)

6ṗ3                     Generate lists of length 3 over [1, 2, 3, 4, 5, 6].
   Ṣ€                   Sort each triplet.
     Ṣ                  Sort the list of triplets.
      ð                 Begin a new, dyadic chain.
                        Arguments: A (list of triplets), D
       Ġ€               Group each; group the indices of each triplet by the
                        the corresponding values.
                        For a triplet [a, b, c], this yields:
                          [[1], [2], [3]] if a < b < c
                          [[1], [2, 3]]   if a < b = c
                          [[1, 2], [3]]   if a = b < c
                          [[1, 2, 3]]     if a = b = c
           Ụ            Grade up; sort the indices of A by those 2D lists.
            ịḷ          Retrieve the elements of A at those indices.
                        This sorts A as in the previous section.
              i         Find the (1-based) index of D.
               ’        Decrement to get the 0-based index.
                :6      Divide the index by 6, rounding down.
                  d6    Divmod; return quotient and remainder of division by 6.
                    ‘   Increment to map [0, ..., 5] to [1, ..., 6].
                     S  Sum the results.

1

सीजेएम, 25 24 बाइट्स

6Zm*{$e`z}$q~:(a#6bW2t1b

यह मेरे जेली उत्तर का एक बंदरगाह है ।

इसे ऑनलाइन आज़माएं! या सभी 216 परिणामों का अनुकरण करें

1 बाइट को बंद करने के लिए @ jimmy23013 को धन्यवाद!


खैर, मुझे उत्तर पोस्ट करने से पहले आपका कोड पढ़ना चाहिए था ... लेकिन कुछ सरल गोल्फ 6bW2t1b:।
jimmy23013

@ jimmy23013 अच्छा लगा। धन्यवाद!
डेनिस

1

पायथ, 41 27 बाइट्स

JSSM^S6 3+2sPtj+216xo/JNJQ6

10 यादृच्छिक परीक्षण

वैधता की पुष्टि।

रूपांतरण तालिका:

2: [111, 222, 333, 444, 555, 666]
3: [112, 113, 223, 224]
4: [114, 115, 225, 226, 355, 366]
5: [116, 122, 125, 233, 244, 445, 446]
6: [126, 133, 144, 146, 255, 266, 455, 466]
7: [134, 155, 156, 166, 246, 334, 335, 556, 566]
8: [123, 135, 234, 256, 336, 344]
9: [124, 136, 235, 345]
10: [145, 236, 346]
11: [245, 356]
12: [456]

पिछला 41-बाइट समाधान:

मुझे इसकी आवश्यकता है ...

JSM^S6 3+2f/@co,/JNNJ.u+NY*R6t+S5_S6 6TQ0

इसे ऑनलाइन आज़माएं!

रूपांतरण तालिका:

2: [111, 222, 333, 444, 555, 666]

3: [112, 113, 114, 115]

4: [116, 122, 133, 144, 155, 166]

5: [223, 224, 225, 226, 233, 244, 255, 266]

6: [334, 335, 336, 344, 355, 366, 445, 446, 455, 466]

7: [556, 566, 123, 124, 125, 126, 134]

8: [135, 136, 145, 146, 156]

9: [234, 235, 236, 245]

10: [246, 256, 345]

11: [346, 356]

12: [456]

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.