RoboCritters ( từ nguyên ) là một ngôn ngữ lập trình bí truyền hoàn toàn mới (đừng bận tâm tìm kiếm nó, tôi chỉ phát minh ra nó). Đây là một biến thể của Brainfuck (BF), phức tạp hơn một chút so với các sơ đồ thay thế toán tử thông thường. Mỗi chương trình trong RoboCritters là một lưới văn bản hình chữ nhật chỉ chứa bảy ký tự . []/\|
, cộng với các dòng mới để định hình lưới.
Ví dụ chương trình RoboCritters:
|\/||./|[]||
[..][][] |
|/\|[..][..]
[..] \/\/
Để dịch chương trình RoboCritters sang BF, hãy xem từng ký tự không phải dòng mới trong lưới theo thứ tự đọc bình thường (từ trái sang phải rồi từ trên xuống dưới), vd |\/||./|[]||[..][][] ||/\|[..][..][..] \/\/
.
Nếu phần 4 × 2 của lưới kéo dài sang phải từ nhân vật hiện tại khớp chính xác với một trong tám sinh vật robot được liệt kê bên dưới, hãy nối lệnh BF tương ứng ( ><+-.,[]
) vào chương trình BF (ban đầu trống).
Nếu phần lưới 4 × 2 không khớp với bất kỳ sinh vật robot nào hoặc vượt ra ngoài giới hạn , không có gì được thêm vào chương trình BF.
Joybot,
>
chỉ huy:[..] \][/
Calmbot,
<
lệnh:[..] /][\
Squidbot,
+
chỉ huy:[..] //\\
Spiderbot,
-
chỉ huy:[..] ||||
Bunnybot,
.
chỉ huy:[][] [..]
Răng,
,
lệnh:[..] |/\|
Foxbot,
[
chỉ huy:|\/| [..]
Batbot,
]
chỉ huy:[..] \/\/
Vì vậy, đọc chương trình ví dụ
|\/||./|[]||
[..][][] |
|/\|[..][..]
[..] \/\/
chúng ta có thể thấy rằng lần đầu tiên chúng ta bắt gặp một Foxbot (ở cột 1, hàng 1), sau đó là một Răng hàm (c1, r2), sau đó là Bunnybot (c5, r2) và cuối cùng là Batbot (c9, r3). Điều này tương ứng với chương trình BF [,.]
.
Lưu ý rằng Foxbot và Toothbot trùng nhau. Đây là cố ý; sinh vật robot không được giải thích khác nhau khi chúng chồng lên nhau .
Thử thách
Viết chương trình ngắn nhất có thể có trong chương trình RoboCritters và xuất ra tương đương BF của nó. Bạn không cần chạy BF hoặc kiểm tra xem nó có hợp lệ không, chỉ dịch mã RoboCritters sang mã BF.
Chi tiết
Tất cả các chương trình RoboCritters đầu vào sẽ hợp lệ, nghĩa là chúng sẽ là một khối văn bản chính xác hình chữ nhật chỉ chứa bảy ký tự
. []/\|
, cộng với các dòng mới để định hình nó. Các dòng mới có thể trong bất kỳ đại diện chung thuận tiện . Bạn có thể tùy ý giả sử các chương trình có một dòng mới duy nhất.Bạn phải hỗ trợ các chương trình RoboCritters nhỏ hơn 4 × 2, bao gồm chương trình trống 0 × 0 (hoặc dòng mới). Tất cả đều tương ứng với chương trình BF trống (chuỗi trống).
Chương trình BF đầu ra phải là một chuỗi một dòng chỉ chứa tám ký tự lệnh BF
><+-.,[]
. Có thể tùy chọn có một dòng mới duy nhất.Lấy đầu vào theo bất kỳ cách thông thường nào (stdin / tệp văn bản / dòng lệnh) và xuất ra thiết bị xuất chuẩn hoặc ngôn ngữ thay thế gần nhất của ngôn ngữ của bạn.
Thay vì một chương trình, bạn có thể viết một hàm lấy chương trình RoboCritters làm chuỗi và in hoặc trả về chuỗi chương trình BF.
Ví dụ
Đầu vào: (biến thể của ví dụ trên)
|\/|[][] [..][][] |/\|[..] \/\/
Đầu ra:
[,.]
Đầu vào: (kiểm tra tất cả các sinh vật robot)
[..][[[[[..]]. ]|\/| \][/[..]//\\[..][..] [..]/][\[][]|/\|[..] ||||/\| [..]| |\/\/
Đầu ra:
>+[<,-.]
Đầu vào:
[..] [..] [..] [..] [..] [..] [..] [..] |\/| [..] [..] [..] [..] [..] |\/| [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] |\/| [..] [..] [..] [..] [..] [..] [..] [][] [..] [..] [..] [..] [][] [..] [..] [..] [..] [..] [..] [..] [][] [][] [..] [..] [..] [][] [..] [..] [][] [..] [..] [][] [..] [][] [..] [..] [..] [][] [..] [..] [..] [..] [..] [..] [][] [..] [..] [..] [..] [..] [..] [..] [..] [][] [..] [..] [..] [][] [..] [..] [..] [][] //\\ //\\ //\\ //\\ //\\ //\\ //\\ //\\ [..] \][/ //\\ //\\ //\\ //\\ [..] \][/ //\\ //\\ \][/ //\\ //\\ //\\ \][/ //\\ //\\ //\\ \][/ //\\ /][\ /][\ /][\ /][\ |||| \/\/ \][/ //\\ \][/ //\\ \][/ |||| \][/ \][/ //\\ [..] /][\ \/\/ /][\ |||| \/\/ \][/ \][/ [..] \][/ |||| |||| |||| [..] //\\ //\\ //\\ //\\ //\\ //\\ //\\ [..] [..] //\\ //\\ //\\ [..] \][/ \][/ [..] /][\ |||| [..] /][\ [..] //\\ //\\ //\\ [..] |||| |||| |||| |||| |||| |||| [..] |||| |||| |||| |||| |||| |||| |||| |||| [..] \][/ \][/ //\\ [..] \][/ //\\ //\\ [..]
Đầu ra: ( Chương trình BF Hello World )
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
Đầu vào: (không có sinh vật robot hiện diện)
/\\\[]. ]..[..] \\//||\
Đầu ra: (chuỗi trống)
Chấm điểm
Đệ trình ngắn nhất tính bằng byte thắng. ( Bộ đếm byte tiện dụng. ) Tiebreaker là bài được bình chọn cao nhất.