3 개의 주사위 롤 (1-6의 정수 값)을 정렬 된 순서로 (분별할 수 없도록) 제공 한 경우 동일한 분포를 가진 두 개의 공정한 주사위의 합으로 변환합니다 .
3 대 1에 대한 답은 모듈로 6을 모두 합한 것입니다. 최종 결과는 6 개의 숫자 각각이 (단일 다이와 마찬가지로) 똑같이 가능한 완전 평탄 분포입니다.
모듈로 6을 모두 합산하여 3 대 1로이 작업을 수행하는 것이 쉽습니다. 최종 결과는 6 개의 숫자 각각이 (단일 다이와 같이) 동일 할 가능성이있는 완전 플랫 분포입니다. 당신의 도전은 3 대 2로 동일하게하는 것입니다.
standupmath의 3 가지 구별 할 수없는 주사위 퍼즐에서 영감을 얻었습니다 . 후속 "솔루션"비디오 도 게시되었지만 어떤 방식 으로든 "우아함"에 대해 논쟁하는 것은 약간 주관적입니다. 문자를 세지 않습니다.:D
명령
3 개의 정렬 된 정수 / 숫자 (1-6)를 허용하고 출력하거나 216 개의 가능한 입력에 대해 출력이 다음과 같이 분배되도록 단일 정수 (2-12)를 리턴 하는 프로그램 또는 함수를 작성하십시오 .
222222
333333333333
444444444444444444
555555555555555555555555
666666666666666666666666666666
777777777777777777777777777777777777
888888888888888888888888888888
999999999999999999999999
AAAAAAAAAAAAAAAAAA
BBBBBBBBBBBB
CCCCCC
(나는 16 진수를 사용하여 단일 문자를 유지했습니다. 십진수 출력은 좋습니다)
주사위는 구별 할 수 없기 때문에 본질적인 순서가 없으므로 정렬 된 입력이 있습니다. 모호 할 것이기 때문에 단순히 "제 3의 드롭"을 할 수 없습니다.
세부
- 점수는 프로그램의 길이 (바이트)입니다
- 프로그램은 어떻게 든 호출되는 함수이거나 stdin에서 읽거나 실행 가능한 스크립트 일 수 있습니다.
- 다른 소스에서 엔트로피를 얻음으로써 "재 롤링"없음
예 (및 테스트)
모든 종류의 확률 테스트를 수행하는 대신 세 주사위 모두 216 (6³) 사례를 추출하고 함수가 각 값을 필요한만큼 여러 번 반환한다고 주장하기 쉽습니다. 동일한 매개 변수로 호출됩니다 (예 : 경우 1, 2, 3및 3, 2, 1...는 구별 할 수없는 것으로 가정하고 (임의로)로 변환 됨 1, 2, 3).
예제 답변 (매우 무력하고 비효율적)과 테스트 스위트는 Python에서 아래에 제공됩니다. stdin / stdout을 수행하는 것은 조금 다르지만 테스트 비트가 선택한 언어로 포팅 할 수있을 정도로 명확해야합니다. 테스트 코드는 테스트 용이며 점수를 매기 지 않습니다 (언어 나 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균일 한 단일 다이 롤에 정렬되지 않은 주사위의 트리플 변환,하지만 불행히도 확률 적으로 독립되지 않습니다.
