Ba con xúc xắc không thể phân biệt


12

Ba con xúc xắc trong một khối rõ ràng

Cho ba cuộn xúc xắc (giá trị nguyên từ 1-6) theo thứ tự được sắp xếp (để không thể phân biệt), chuyển đổi chúng thành tổng của hai con xúc xắc công bằng với phân phối giống hệt nhau.

Câu trả lời cho ba đến một là tổng hợp tất cả, modulo 6. Kết quả cuối cùng là một phân phối hoàn toàn bằng phẳng, trong đó mỗi sáu số có khả năng như nhau (giống như một lần chết).

Thật dễ dàng để làm điều này thành ba đối một, bằng cách tổng hợp tất cả chúng theo modulo 6. Kết quả cuối cùng là một phân phối hoàn toàn bằng phẳng, trong đó mỗi sáu số đều có khả năng như nhau (giống như một lần chết). Thử thách của bạn là làm tương tự cho ba đến hai.

Lấy cảm hứng từ Ba câu đố súc sắc không thể phân biệt của standupmath . Một video "giải pháp" tiếp theo cũng đã được đăng, nhưng tranh luận về "sự thanh lịch" của cách này hay cách khác là một chút chủ quan. Đếm các ký tự không.:D

Hướng dẫn

Viết chương trình hoặc hàm chấp nhận ba số nguyên / chữ số được sắp xếp , 1-6 và xuất ra hoặc trả về một số nguyên duy nhất, 2-12, như vậy, đối với 216 đầu vào có thể, các đầu ra được phân phối như sau:

 222222
 333333333333
 444444444444444444
 555555555555555555555555
 666666666666666666666666666666
 777777777777777777777777777777777777
 888888888888888888888888888888
 999999999999999999999999
 AAAAAAAAAAAAAAAAAA
 BBBBBBBBBBBB
 CCCCCC

(Tôi đã sử dụng hex để giữ các ký tự đơn; đầu ra thập phân vẫn ổn)

Bởi vì xúc xắc không thể phân biệt, không có thứ tự nội tại đối với chúng, do đó đầu vào được sắp xếp. Bạn không thể đơn giản "thả người thứ ba" vì điều đó sẽ mơ hồ.

Chi tiết

  • Điểm là độ dài của chương trình tính bằng byte
  • Chương trình có thể là một chức năng được gọi bằng cách nào đó hoặc tập lệnh thực thi đọc từ stdin hoặc bất cứ thứ gì có liên quan.
  • Không "rerolling" bằng cách lấy entropy từ một nguồn khác

Ví dụ (và kiểm tra)

Thay vì thực hiện bất kỳ loại thử nghiệm xác suất nào, thật dễ dàng để xử lý các trường hợp 216 (6) của cả ba con xúc xắc và khẳng định rằng hàm của bạn trả về mỗi giá trị nhiều lần. Nó sẽ được gọi với các tham số giống hệt nhau (ví dụ: các trường hợp 1, 2, 33, 2, 1, ... được cho là không thể phân biệt và được (tùy ý) chuyển đổi thành 1, 2, 3).

Một câu trả lời ví dụ (cực kỳ mạnh mẽ và không hiệu quả) và bộ kiểm tra được cung cấp dưới đây trong Python. Hy vọng rằng các bit kiểm tra đủ rõ ràng để chuyển sang ngôn ngữ bạn chọn, mặc dù thực hiện stdin / stdout sẽ khác một chút. Mã kiểm tra chỉ để thử nghiệm và không được tính điểm (mặc dù nếu bạn muốn cung cấp mã này cho những người dùng ngôn ngữ hoặc phương pháp I / O khác của bạn, điều đó có thể hữu ích).

# 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
Tôi đã đọc câu hỏi nhiều lần và không có ý tưởng nhỏ nhất về những gì nó yêu cầu.
frageum

1
Ngoài vấn đề của thử thách này là không rõ ràng, các thử thách golf mã phải ghi điểm bằng byte thay vì ký tự, trừ khi bạn có lý do thực sự tốt để ghi đè mặc định đó.
Mego

Tôi nghĩ rằng tôi nhận được nó. Câu hỏi là yêu cầu chúng tôi ánh xạ từ ba cuộn súc sắc đến hai cuộn súc sắc, với một số hạn chế.
Nữ tu bị rò rỉ

2
Bạn không làm điều đó với hai con xúc xắc, bạn đang sử dụng ba cuộn để mô phỏng hai cuộn.
Nick T

2
Cả hai (a+b+c)%6+1(a*b*c)%7chuyển đổi một bộ ba con xúc xắc không có thứ tự thành một cuộn súc sắc thống nhất, nhưng không may là không độc lập về mặt xác suất.
xnor

Câu trả lời:


5

Thạch , 22 20 byte

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

Hãy thử trực tuyến! hoặc mô phỏng tất cả 216 kết quả .

Lý lịch

Chúng tôi ánh xạ từng bộ ba con xúc xắc không có thứ tự (được liệt kê với bội số tương ứng) thành một cặp cuộn súc sắc theo thứ tự theo cách sau:

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

Điều này làm cho tất cả các kết quả được trang bị.

Làm thế nào nó hoạt động

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

Bình thường, 41 27 byte

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

10 thử nghiệm ngẫu nhiên

Xác nhận tính hợp lệ.

Bảng chuyển đổi:

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]

Giải pháp 41 byte trước đây:

Tôi cần phải chơi gôn này ...

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

Hãy thử trực tuyến!

Bảng chuyển đổi:

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]

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.