사람들에게 이산 확률 분포의 개념을 소개하는 전형적인 예는 빈 머신입니다 . 이 기계는 상단의 좁은 통로에서 많은 양의 구슬이 떨어지고 인터레이스 핀의 줄을 쳤습니다. 각 핀에서 구슬이 핀의 왼쪽 또는 오른쪽으로 떨어질 수 있습니다. 마지막으로 핀은 기계 하단의 수직 통에 수집됩니다. 이 기계의 간단한 다이어그램은 다음과 같습니다.
| O |
| ^ |
| ^ ^ |
| ^ ^ ^ |
| ^ ^ ^ ^ |
| ^ ^ ^ ^ ^ |
|_|_|_|_|_|_|
이 다이어그램에서 O
기호는 구슬이 떨어진 위치를 나타냅니다. 각각 ^
의 핀은 구슬이 50 % 확률로 핀의 왼쪽이나 오른쪽으로 사각형으로 이동할 수있는 핀입니다. 그런 다음 구슬은 장치 하단의 통에 모이고 충분한 수의 구슬에 대해 통에있는 구슬 더미의 높이는 불연속 이항 분포와 비슷합니다.
도전
이 문제를 해결하려면 위와 같은 다이어그램을 기반으로 빈 머신의 결과 확률 분포를 계산합니다. 다이어그램은 측면의 필드 또는 현재 필드 아래의 필드쪽으로 구슬이 통과하는 2 차원 '프로그램'으로 해석됩니다. 구슬이 기계의 바닥에 도달하면 확률 분포를 계산합니다. 흥미를 유지하기 위해이 다이어그램에는 단순한 소스 및 핀보다 몇 가지 필드가 더 포함됩니다. 예제 다이어그램은 다음과 같습니다.
| O |
| ^ |
| ^ / |
| ^ | ^ |
| <^- = v |
| ^ ^ ^ ^ ^ |
또한, 이제는 구슬이 각각 회전 방향을 갖습니다. 이 방향은 일부 필드에 의해 설정되며 대리석이 다음 필드로 이동하여 다른 여러 필드에서 결정됩니다.
다음과 같은 필드가 정의됩니다.
O
: 출처. 바로 아래에 대리석이 나타납니다. 이 구슬의 방향은 50 % 왼쪽, 50 % 오른쪽입니다. 각 소스는 같은 양의 구슬을 생산합니다.U
싱크대 이 필드에 들어가는 모든 구슬은 콩 기계에서 제거됩니다.: 빈 공간. 이 필드에 대리석이 도착하면 아래 필드로 이동합니다.
-
: 층. 구슬이이 필드에 도달하면 현재 방향에 따라 왼쪽의 필드 또는 오른쪽의 필드로 이동합니다.^
스플리터. 이 필드에 대리석이 도착하면 스플리터의 오른쪽 또는 왼쪽으로 필드로 이동하는 비율이 50 %입니다. 이것은 또한 대리석의 방향을 결정합니다.v
: 가입하십시오. 이 필드에 대리석이 도착하면 아래 필드로 이동합니다./
: 경사 패드. 구슬이이 필드에 도착하면 패드의 왼쪽에있는 필드로 이동하여 구슬의 방향을 설정합니다.\
: 이전과 동일하지만 오른쪽에 있습니다.|
: 리플렉터. 이 필드에 대리석이 도착하면 대리석 방향을 반대로하고이 반대 방향을 기준으로 대리석을 오른쪽 또는 왼쪽으로 이동합니다.=
대포. 대리석이 필드에 도착하면, 그것은 대리석이 아닌 필드를 만날 때까지, 현재의 방향으로 왼쪽 또는 오른쪽으로 이동합니다,
-
또는O
.<
: 이전과 동일하지만 항상 방향을 설정하고 왼쪽으로 이동합니다.>
: 이전과 동일하지만 오른쪽에 있습니다.
다이어그램과 관련하여 다음과 같은 보증이 제공됩니다.
- 각 입력 행의 길이는 필드에서 정확히 동일합니다.
- 각 행의 가장 왼쪽과 가장 오른쪽 필드는 항상
|
입니다. - 다이어그램에는
\/
또는 과 같은 불확정 한 반복 횟수 동안 구슬이 기계에 붙어있는 가능한 경로가 포함되어 있지 않습니다^^
. - 다이어그램에는 위에서 언급 한 필드 만 포함됩니다.
- 하나 이상의 소스가 있습니다
결과
당신의 임무는 구슬이 그래프의 아래쪽을 빠져 나가는 확률 분포의 16 줄 키 ASCII 막대 그래프를 생성하는 것입니다. 따라서 다음 문제의 경우 :
| O |
| ^ |
| ^ ^ |
| ^ ^ ^ |
| ^ ^ ^ ^ |
| ^ ^ ^ ^ ^ |
프로그램은 다음과 같은 솔루션을 생성해야합니다 (측면의 파이프를 포함하여 입력 프로그램과 너비가 같아야합니다).
# #
# #
# #
# #
# #
# #
# #
# #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # # # #
# # # # # #
예
다음은 모든 다른 필드 유형의 기능을 테스트해야하는 예입니다.
| O O |
| O ^ / <^\\\ |
| ^ > ^ |
| ^ ^ ^ =|
| ^ ^ | ^ <^ O |
| ^ > ^ | ^ O ^> v |
|| ^U ^ | = ^\ |
| ^ ^ ^ ^U ^\ ---^ |
| = ^ ^ = v |
결과는 다음과 같습니다.
#
#
#
#
# #
# #
# #
# # # #
# # # #
# # # #
# # # #
## # # #
## # # # #
# ### # # # #
# # ### # # # #
# # ### # # # #
규칙
기능과 전체 프로그램 모두이 도전에 대한 올바른 답변을 구성합니다. 다이어그램을 줄 바꿈 문자열로 받으면 주어진 형식으로 출력 그래프를 반환해야합니다. 기본 입력 / 출력 규칙이 적용됩니다. 출력에서 후행 및 선행 개행이 허용되지만 각 행은 입력과 정확히 동일한 너비를 가져야합니다.
보다 창의적인 솔루션을 허용하려면 프로그램에서 동일한 다이어그램에 대해 90 % 이상의 정확한 결과를 출력하면됩니다. 결국 확률 시뮬레이션입니다.
채점
이것은 code-golf 이므로 바이트 단위의 최저 점수가 이깁니다.
v
= [space]
?
v
와 [space]
대포가 어떻게 상호 작용하는지에 차이가 있습니다.