Üç Belirsiz Zar


12

Açık bir küp içinde üç zar

Üç zar rulosu (1-6 arasındaki tamsayı değerleri) sıralı düzende (ayırt edilemez olacak şekilde) verildiğinde , bunları aynı dağıtımla iki adil zarın toplamına dönüştürün .

Üçüncülüğün cevabı hepsini özetliyor, modulo 6. Sonuç, altı sayının her birinin eşit derecede muhtemel olduğu (tıpkı tek bir kalıp gibi) mükemmel düz bir dağılımdır.

Üç modele hepsini modulo 6 toplayarak yapmak kolaydır. Sonuç, altı sayının her birinin eşit derecede olası olduğu (tıpkı tek bir kalıp gibi) mükemmel düz bir dağılımdır. Senin meydan okuma aynı şeyi üçe iki yapmak.

Standupmath Üç Belirsiz Zar Bulmaca esinlenerek . Bir takip "çözüm" videosu da yayınlandı, ancak şu ya da bu şekilde "zarafet" hakkında tartışmak biraz öznel. Karakter saymak değil.:D

Talimatlar

1-6 sıralı üç tamsayıyı / basamağı kabul eden ve çıkışları tek bir tam sayı, 2-12 döndüren bir program veya işlev yazın , böylece 216 olası giriş için çıkışlar şu şekilde dağıtılır:

 222222
 333333333333
 444444444444444444
 555555555555555555555555
 666666666666666666666666666666
 777777777777777777777777777777777777
 888888888888888888888888888888
 999999999999999999999999
 AAAAAAAAAAAAAAAAAA
 BBBBBBBBBBBB
 CCCCCC

(Tek karakterleri tutmak için hex kullandım; ondalık çıktı iyi)

Zar ayırt edilemez olduğundan, bunlara özgü bir düzen yoktur, dolayısıyla sıralı girdi. Basitçe "üçüncüyü düşüremezsiniz" çünkü bu belirsiz olacaktır.

ayrıntılar

  • Puan, programın bayt cinsinden uzunluğudur
  • Program bir şekilde adlandırılan bir işlev veya stdin'den veya uygun olanı okuyan yürütülebilir komut dosyası olabilir.
  • Başka bir kaynaktan entropi alarak "yeniden kayıt" yapılamaz

Örnek (ve test)

Herhangi bir olasılıklı test yapmak yerine, üç zarın 216 (6³) vakasını parçalamak ve fonksiyonunuzun her değeri gerektiği kadar döndürdüğünü iddia etmek yeterince kolaydır. Aynı parametrelerle çağrılır (örneğin, vakalar 1, 2, 3ve 3, 2, 1... ayırt edilemez olarak kabul edilir ve (keyfi olarak) dönüştürülür 1, 2, 3).

Python'da örnek bir cevap (son derece kaba kuvvet ve verimsiz) ve test takımı aşağıda verilmiştir. Umarım test bitleri seçtiğiniz dilinize uyacak kadar açıktır, ancak stdin / stdout yapmak biraz farklı olacaktır. Test kodu yalnızca test amaçlıdır ve puanlandırılmaz (yine de, dilinizin veya G / Ç yönteminizin diğer kullanıcılarına sağlamak istiyorsanız, bu yararlı olabilir).

# 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
Soruyu birkaç kez okudum ve ne istediğine dair en ufak bir fikrim yok.
feersum

1
Bu zorluğun belirsiz olmasına ek olarak, bu varsayılanı geçersiz kılmak için gerçekten iyi bir nedeniniz yoksa, kod golf zorlukları karakterler yerine baytlarla skorlanmalıdır.
Mego

Sanırım anladım. Soru, bizden üç zar rulosundan iki zar rulosuna bazı kısıtlamalar ile eşlememizi istiyor.
Sızdıran Rahibe

2
Bunu yapmıyoruz ile iki zar, iki rulo simüle etmek üç rulo kullanıyoruz.
Nick T

2
Her ikisi de (a+b+c)%6+1ve (a*b*c)%7üç düzensiz zarları tek tip bir kalıp rulosuna dönüştürür, ancak maalesef olasılıkla bağımsız değildir.
xnor

Yanıtlar:


5

Jöle , 22 20 bayt

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

Çevrimiçi deneyin! veya 216 sonucun tümünü simüle edin .

Arka fon

Her sıralanmamış zar rulosu üçlüsünü (ilgili çokluklarla listelenir) aşağıdaki şekilde sıralı bir zar zarına eşleriz:

[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]

Bu, tüm sonuçları eşitlenebilir hale getirir.

Nasıl çalışır

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

Pyth, 41 27 bayt

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

10 rastgele test çantası

Geçerlilik onayı.

Dönüşüm tablosu:

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]

Önceki 41 baytlık çözüm:

Bunu golf yapmam gerek ...

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

Çevrimiçi deneyin!

Dönüşüm tablosu:

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]

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.