Thử thách này đã được đăng trong khuôn khổ thử thách LotM tháng 4 năm 2018
Brain-Flak là một ngôn ngữ turing-tarpit đã đạt được khá nhiều danh tiếng ở đây trên PPCG. Bộ nhớ của ngôn ngữ được cấu thành bởi hai ngăn xếp, nhưng ngăn xếp thứ ba "ẩn" được phát hiện bởi Wh e tại Wizard , dẫn đến một số cách suy nghĩ mới thú vị về các chương trình Brain-Flak.
Vì vậy, những gì về việc cung cấp cho ngăn xếp thứ ba nghèo ẩn đó khả năng hiển thị nhiều hơn? Hãy tạo một ngôn ngữ trong đó ngăn xếp thứ ba có sự công nhận mà nó xứng đáng! Ở đây tôi giới thiệu bạn Thứ ba-Flak .
Ngôn ngữ
Trong Third-Flak chỉ có một ngăn xếp, được gọi là ngăn xếp thứ ba. Các nhà khai thác làm việc trên stack thứ ba trong cùng một cách mà họ làm trong Brain-Flak, nhưng ở đây không có []
, {}
, <>
nilads và không có {...}
đơn nguyên (vì vậy các nhân vật chỉ có thể chấp nhận trong một chương trình thứ ba Flak là ()[]<>
). Dưới đây là những gì mỗi toán tử thực hiện (các ví dụ sẽ được đưa ra đại diện cho ngăn xếp thứ ba với một danh sách trong đó phần tử cuối cùng là đỉnh của ngăn xếp):
()
là toán tử hai ký tự duy nhất trong Thứ ba-Flak. Nó tăng đỉnh của ngăn xếp thứ ba lên 1. Ví dụ:[1,2,3]
→[1,2,4]
(
,[
,<
: Tất cả các dấu ngoặc đơn mở mà không được bao phủ bởi các trường hợp trước đẩy một0
để ngăn xếp thứ ba. Ví dụ:[1,2,3]
→[1,2,3,0]
)
bật hai phần tử từ ngăn xếp thứ ba và đẩy lùi tổng của chúng. Ví dụ:[1,2,3]
→[1,5]
]
bật hai phần tử từ ngăn thứ ba và đẩy lùi kết quả trừ phần thứ nhất từ phần thứ hai. Ví dụ:[1,2,3]
→[1,-1]
>
bật một phần tử từ ngăn xếp thứ ba. Ví dụ[1,2,3]
→[1,2]
Và đây là các quy tắc khác của ngôn ngữ:
Khi bắt đầu thực hiện, ngăn xếp thứ ba chỉ chứa một 0 duy nhất.
Không được để trống
[]
hoặc<>
bên trong một chương trình (dù sao họ cũng sẽ bị bỏ qua nếu theo ngữ nghĩa của Thứ ba, nhưng chúng thực sự có một ý nghĩa khác trong Brain-Flak không thể tái tạo ở đây).Dấu ngoặc đơn luôn cần được cân bằng, ngoại trừ thực tế là dấu ngoặc đơn đóng ở cuối chương trình có thể bị thiếu. Ví dụ,
[()<(()
là một chương trình Thứ ba hợp lệ (và ngăn xếp thứ ba ở cuối chương trình sẽ là[1,0,1]
).Một chương trình chỉ có thể chứa sáu ký tự được phép
()[]<>
. Các chương trình được đảm bảo không trống.
Lưu ý: được ngụ ý bởi các quy tắc trước đây mà bạn sẽ không phải đối phó với các tình huống mà bạn cần phải bật từ một ngăn xếp trống.
Các thách thức
Đơn giản, viết một thông dịch viên cho Thứ ba-Flak. Chương trình của bạn phải nhận đầu vào là chương trình Thứ ba và trả về làm đầu ra trạng thái của ngăn xếp thứ ba ở cuối chương trình.
Định dạng đầu ra của bạn linh hoạt miễn là có thể đọc rõ ràng từ trạng thái của ngăn xếp thứ ba và cùng một số luôn được mã hóa theo cùng một cách (Đây chỉ là một cách để nói rằng bất kỳ định dạng đầu ra nào không phải là một cách trắng trợn để cố gắng gian lận là tốt).
Lựa chọn đầu ra của bạn có thể hạn chế phạm vi số bạn có thể quản lý miễn là điều này không tầm thường hóa thách thức (vì đây sẽ là lỗ hổng mặc định ).
Các trường hợp thử nghiệm
Đối với mỗi trường hợp kiểm tra, dòng đầu tiên là đầu vào và dòng thứ hai, ngăn xếp đầu ra được biểu diễn dưới dạng một danh sách các số được phân tách bằng dấu cách trong đó đỉnh của ngăn xếp là phần tử cuối cùng.
[()<(()
0 1 0 1
[((((()()()()()))
0 0 0 5
((([()][()][()])))
-3
[<<(((()()()())(((((
0 0 0 0 0 4 0 0 0 0 0
[()]<(([()])><[()]
-1 0 -1
(())(()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(()()())(())(()()()()())(())(())(())(())(()()()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(()()())(())(()()()()())(())(())(())(())(())(())(()())(())(())(())(()())(()()()())(())(()()()()())(()())(()())(()())(()()())(())(()())(())(()()()()())(()())(()()()()())(())(())(())(())(())(()())(())(())(())(()()()()())(())(())(()()()()())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(()())(()())(()())(()())(())(()()()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(()()())(())(())(()()())(()())(())(()()()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(())(())(()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(()()())(())(()()())(())(())(())(()())(()()())(()())(())(()()()()())(()())(())(()()())(())(()()()()())(())(())(())(()()())(())(())(())(()())(())(()())(()()()())(())(())(()()()()())(()())(()())(())(()()())(())(())(())(())(()()())(()())(())(())(()()()()())(())(())(()()()()())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(())(()()()()())(()())(())(()()())(())(()()()()())(()()()()())(())(()()())(())(())(()())(())(()()()()())(())(()()()()())(())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(())(()()()()())(()())(())(()()())(())(())(()())(())(()()()()())(()())(()()()()())(())(()()())(())(())(()()()()())(())(()()()()())(())(())(())(()())(())(()()()()())(())(())(()())(())(()())(())(()())(()())(()())(()())(())(()()()()())(()())(())(()()()()())(())(()()())(())(())(()())(())(()()()()())(()())(()()()()())(())(()()())(())(())(())(()())(()()()())(())(())(()())(())(()()()()())(())(())(()()()()())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(()())(()())(())(()()())(())(())(()())(())(()()()()())(()())(()()()()())(()()())(())(())(()())(())(())(()()()()())(()()()())(()())(()())(()()())(())(()())(())(()()()()())(()())(()()()()())(())(())(())(()()()())(()()()())(()()
718 2
e
là ở đây .
[()]
phá vỡ quy tắc mà chúng ta không cần phải lo lắng về việc bật ra từ một ngăn xếp trống