Biorąc pod uwagę trzy rzuty kostkami (wartości całkowite od 1-6) w posortowanej kolejności (aby były nierozróżnialne), zamień je na sumę dwóch jasnych kości o identycznym rozkładzie.
Odpowiedzią dla trzech do jednego jest zsumowanie ich wszystkich, modulo 6. Rezultatem końcowym jest idealnie płaski rozkład, w którym każda z sześciu liczb jest jednakowo prawdopodobna (tak jak pojedyncza kostka).
Łatwo jest to zrobić dla trzech do jednego, sumując je wszystkie modulo 6. Rezultatem końcowym jest idealnie płaski rozkład, w którym każda z sześciu liczb jest jednakowo prawdopodobna (podobnie jak pojedyncza kostka). Twoim wyzwaniem jest zrobić to samo dla trzech do dwóch.
Zainspirowany łamigłówką The Three Unistinguishable Dice Puzzle . Kontynuacją „rozwiązanie” wideo została również wysłana, ale kłócą się o „elegancji” w taki czy inny sposób jest nieco subiektywna. Liczenie postaci nie jest.:D
Instrukcje
Napisz program lub funkcję, która akceptuje trzy posortowane liczby całkowite / cyfry, 1-6, i wypisuje lub zwraca jedną liczbę całkowitą, 2-12, tak że dla 216 możliwych wejść, wyjścia są rozdzielane w następujący sposób:
222222
333333333333
444444444444444444
555555555555555555555555
666666666666666666666666666666
777777777777777777777777777777777777
888888888888888888888888888888
999999999999999999999999
AAAAAAAAAAAAAAAAAA
BBBBBBBBBBBB
CCCCCC
(Użyłem szesnastku, aby zachować pojedyncze znaki; wyjście dziesiętne jest w porządku)
Ponieważ kości są nierozróżnialne, nie ma dla nich żadnego wewnętrznego porządku, stąd posortowane dane wejściowe. Nie można po prostu „upuścić trzeciego”, ponieważ byłoby to niejednoznaczne.
Detale
- Wynik to długość programu w bajtach
- Program może być funkcją, która jest jakoś wywoływana, lub skryptem wykonawczym, który odczytuje ze standardowego wejścia, lub cokolwiek innego.
- Brak „ponownego przewijania” przez uzyskanie entropii z innego źródła
Przykład (i test)
Zamiast przeprowadzać jakiekolwiek testy probabilistyczne, łatwo jest przejrzeć 216 (6³) przypadków wszystkich trzech kości i stwierdzić, że funkcja zwraca każdą wartość tyle razy, ile powinna. Zostanie wywołany z identycznymi parametrami (np. Przypadki 1, 2, 3
i 3, 2, 1
... są zakładane jako nierozróżnialne i są (arbitralnie) konwertowane 1, 2, 3
).
Przykładowa odpowiedź (wyjątkowo brutalna i nieefektywna) oraz zestaw testów znajduje się poniżej w Pythonie. Mamy nadzieję, że bity testowe są wystarczająco jasne, aby przenieść się na wybrany język, choć wykonanie stdin / stdout byłoby nieco inne. Kod testowy służy tylko do testowania i nie jest oceniany (choć może być przydatny dla innych użytkowników Twojego języka lub metody 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
i(a*b*c)%7
zamieniają potrójną liczbę nieuporządkowanych kości w jednolity rzut pojedynczą kostką, ale niestety nie są one probabilistycznie niezależne.Odpowiedzi:
Galaretka ,
2220 bajtówWypróbuj online! lub symulować wszystkie 216 wyników .
tło
Każdą nieuporządkowaną trójkę rzutów kości (wymienioną z odpowiednimi wielokrotnościami) mapujemy na uporządkowaną parę rzutów kości w następujący sposób:
Dzięki temu wszystkie wyniki są możliwe do uzyskania.
Jak to działa
źródło
CJam,
2524 bajtówTo jest port mojej odpowiedzi na żelki .
Wypróbuj online! lub symulować wszystkie 216 wyników .
Dzięki @ jimmy23013 za grę w golfa na 1 bajcie!
źródło
6bW2t1b
.Pyth,
4127 bajtów10 losowych przypadków testowych
Potwierdzenie ważności
Tabela konwersji:
Poprzednie 41-bajtowe rozwiązanie:
Muszę zagrać w golfa ...
Wypróbuj online!
Tabela konwersji:
źródło
CJam,
3735 bajtówPrawdopodobnie nie grał dobrze w golfa.
Ale pokonaj Pytha.Wypróbuj tutaj.
źródło