기계
당구 공 유형 기계는 \
_
/
대문자와 소문자, 공백 및 숫자와 함께 기호로만 구성됩니다 1
.
\
그리고 /
경사로입니다. 위에서 오는 공은 각각 오른쪽 또는 왼쪽으로 편향됩니다. 두 경사로 모두 볼이 양쪽에서 나오면 아래쪽으로 편향됩니다.
_
논리 요소입니다. 이것에 의해 수행되는 논리는 컴퓨터에서 가장 당구와 같은 부분입니다. 첫째, 왼쪽 또는 오른쪽에서 나오는 공은 같은 방향으로 계속됩니다. 위에서 오는 공이 멈 춥니 다. 그런 다음 실행이 끝난 후 (아래 기계 작동 참조) 볼이 가로 지르거나 내려 오는 볼 수가 양의 짝수이면 단일 볼이 요소의 맨 아래에서 분리됩니다.
공간은 아무것도하지 않습니다. 모든 방향에서 나오는 공은 중력으로 인해 곧게 떨어집니다.
소문자가 입력됩니다. 모든 입력은 단일 1 또는 0입니다.
대문자가 출력됩니다. 출력되는 숫자는 해당 위치에 닿은 당구 공의 수입니다.
이 번호 1
는 해당 위치에서 추가 당구 공을 출시합니다. 논리 1을 나타냅니다.
그 밖의 모든 문자는 \_/
중력으로 인해 어떤 방향에서든 공이 똑바로 떨어지게합니다.
공은 절대로 결합하거나 쪼개지거나 충돌하지 않습니다. 입력, a _
또는 a 에서 해제 된 경우에만 작성됩니다 1
. 그들은 똑바로 넘어 질 때만 파괴됩니다 _
.
기계 예
1 a
\_/ b
\_/
\/
/\ /
_ _
A B
기계에 빈 줄이없는 것은 아니지만 _
빈 줄이있는 것처럼 보일 수 있습니다.
기계 작동
머신은 레이어 또는 행으로 실행됩니다. 상단 레이어의 모든 당구 공 이동은 두 번째 레이어에서 어떤 일이 발생하기 전에 수행됩니다.
기계
ab
\_A
C
다음과 같이 실행됩니다.
먼저, a
형식 의 입력 을 요구합니다 a:
. 그런 다음 사용자는 1 또는 0을 입력합니다 (뒤에 enter). 입력에 대해 이것을 반복합니다 b
. 이것이 첫 번째 레이어의 끝입니다. 사용자가 두 입력에 모두 1을 입력했다고 가정합니다.
그런 다음 첫 번째 공 (에서의 경로 추적 한 a
를 따라 간다), \
어 크로스, _
로를, A
그리고 아래 자리까지 떨어진다 A
. 그런 다음 두 번째 공의 경로 (에서 b
) 를 추적합니다 _
. 이것이 두 번째 레이어의 끝입니다.
이제 세 번째 레이어 이전에 _
두 개의 볼이 교차했기 때문에 하나의 볼을 해제합니다. 출력 A
은 그 위에 하나의 볼이 교차하여 출력 A:1
합니다.
세 번째 레이어의 경우 첫 번째 공의 경로를 추적합니다 ( _
) C
. 두 번째 공 (을 통해 A
떨어짐)도 똑바로 떨어집니다.
이제 네 번째 레이어 이전에는 출력 C
에 하나의 공이 이동했기 때문에 출력 C:1
됩니다.
네 번째 계층이 비어 있기 때문에 프로그램이 종료됩니다.
총 결과는 다음과 같아야합니다
a:1 (the user entered the one)
b:1 (same here)
A:1
C:1
목표
목표는 STDIN에서 기계를 가져와 STDOUT에 입력을 입력하고 인쇄하여 시뮬레이션하는 것입니다. 프로그램 입력의 첫 번째 부분은 실행할 기계와 빈 줄로 구성됩니다. 입력 문자가 있으면 프로그램이 입력 이름 형식으로 입력하고 콜론을 입력하라는 메시지를 표시해야합니다. 모든 출력은 출력 이름, 콜론, 해당 지점을 통과하는 볼 수의 형태로 표시되어야합니다.
이것은 골프입니다.
예
와이어 크로싱
ab
\/
AB
XOR 게이트
ab1
\_/
C
완전 가산기
1 a
\_/ b
\_/
\/
/\
_ __/
\_/
\/c
\\_/
_S1
\ \/
__/
/
_
\__
C
\_/
있습니까?