Máy
Một loại máy bi-a chỉ bao gồm các ký hiệu \
_
/
cùng với chữ in hoa và chữ thường, dấu cách và số 1
.
\
và /
là những dốc. Một quả bóng đến từ phía trên sẽ bị lệch về phía bên phải hoặc bên trái, tương ứng. Đối với cả hai đường dốc, nếu một quả bóng đến từ hai bên, nó sẽ bị lệch xuống dưới.
_
là một yếu tố logic. Logic được thực hiện bởi nó là phần không giống như bi-a của máy tính. Đầu tiên, một quả bóng đến từ bên trái hoặc bên phải tiếp tục theo cùng một hướng. Một quả bóng đến từ phía trên sẽ được dừng lại. Sau đó, sau khi kết thúc quá trình thực hiện (xem Chạy máy bên dưới), nếu số lượng bóng đi qua / hạ cánh trên đó là số chẵn dương, thì một quả bóng sẽ được giải phóng từ dưới cùng của phần tử.
Một không gian không làm gì cả. Bất kỳ quả bóng đến từ bất kỳ hướng nào rơi thẳng xuống do trọng lực.
Chữ thường là đầu vào. Tất cả các đầu vào sẽ là 1 hoặc 0.
Chữ in hoa là đầu ra. Con số xuất ra sẽ là số quả bóng bi-a đánh vào vị trí của nó.
Con số 1
phát hành thêm một quả bóng bi-a tại vị trí đó. Nó đại diện cho logic 1.
Tất cả các nhân vật ngoài việc \_/
làm cho bất kỳ quả bóng đến từ bất kỳ hướng nào rơi thẳng xuống do trọng lực.
Bóng không bao giờ kết hợp, phân chia hoặc va chạm. Chúng chỉ được tạo khi được phát hành từ đầu vào, a _
hoặc a 1
. Chúng chỉ bị phá hủy khi chúng rơi thẳng xuống a _
.
Ví dụ máy-
1 a
\_/ b
\_/
\/
/\ /
_ _
A B
Sẽ không bao giờ có bất kỳ dòng trống nào trong một máy, nhưng _
có thể làm cho nó xuất hiện rằng có một dòng trống.
Chạy máy
Một máy được chạy theo lớp, hoặc hàng. Tất cả các chuyển động bóng bi-a trên lớp trên cùng được thực hiện trước khi bất cứ điều gì xảy ra trên lớp thứ hai.
Máy
ab
\_A
C
được chạy như sau:
Đầu tiên, nó nhắc cho đầu vào a
trong mẫu a:
. Sau đó, người dùng sẽ nhập 1 hoặc 0 (tiếp theo là nhập). Nó lặp lại điều này cho đầu vào b
. Đây là phần cuối của lớp đầu tiên. Tôi sẽ giả định rằng người dùng đã nhập 1 cho cả hai đầu vào.
Sau đó, nó lần theo dấu vết của quả bóng đầu tiên (từ a
), đi dọc theo \
, ngang qua _
, vào trong A
và rơi xuống vị trí bên dưới A
. Sau đó, nó vạch ra con đường cho quả bóng thứ hai (từ b
), đi thẳng xuống _
và chấm dứt. Đây là phần cuối của lớp thứ hai.
Bây giờ, trước lớp thứ ba, vì _
đã có hai quả bóng giao nhau, nó giải phóng một quả bóng. Đầu ra A
đã có một quả bóng đi qua nó, vì vậy nó xuất ra A:1
.
Đối với lớp thứ ba, nó theo dõi đường đi của quả bóng thứ nhất (từ _
), đi qua C
và rơi thẳng xuống. Quả bóng thứ hai (rơi qua A
) cũng rơi thẳng xuống.
Bây giờ, trước lớp thứ tư, vì đầu ra C
có một quả bóng di chuyển qua nó, nó xuất ra C:1
.
Vì lớp thứ tư là trống, chương trình kết thúc.
Tổng kết quả sẽ như thế nào
a:1 (the user entered the one)
b:1 (same here)
A:1
C:1
Mục đích
Mục tiêu của bạn là lấy một máy từ STDIN và mô phỏng nó bằng cách lấy đầu vào và in đầu ra khi cần đến STDOUT. Phần đầu tiên của chương trình đầu vào của bạn sẽ bao gồm máy sẽ được chạy, theo sau là một dòng trống. Bất kỳ chữ cái đầu vào nào gặp phải sẽ khiến chương trình của bạn nhắc nhập liệu dưới dạng tên đầu vào theo sau là dấu hai chấm. Bất kỳ đầu ra nào cũng phải được hiển thị dưới dạng tên đầu ra, theo sau là dấu hai chấm, theo sau là số lượng bóng đi qua điểm đó.
Đây là golf.
Ví dụ
Một dây qua
ab
\/
AB
Một cổng XOR
ab1
\_/
C
Một bộ cộng đầy đủ
1 a
\_/ b
\_/
\/
/\
_ __/
\_/
\/c
\\_/
_S1
\ \/
__/
/
_
\__
C
\_/
?