Thách thức của bạn là giảm thiểu mã Brainfuck , theo các quy tắc sau:
- Loại bỏ bất cứ thứ gì không phải là một trong số đó
+-><[].,
. - Đối với bất kỳ nhóm liên tiếp
+
hoặc-
ký tự nào, nếu số lượng+
s và-
s là như nhau, hãy loại bỏ chúng. - Làm tương tự như trên, nhưng với
>
và<
. - Xóa các chuỗi
+-><
ký tự nếu chúng không làm gì. Ví dụ, bạn nên loại bỏ+>-<->+<
. (Đây có thể là cách khó nhất và khó nhất để thực hiện.) Hãy chắc chắn rằng bạn không nhận được bất kỳ thông tin sai nào, như+>-<+>-<
, không nên xóa.
Các trường hợp thử nghiệm:
Đầu vào
++++++[->++++++<]>. prints a $
[-]< resets tape
>,[>,]<[.<] reverses NUL terminated input string
++-->><< does nothing
Đầu ra
++++++[->++++++<]>.[-],[>,]<[.<]
Đầu vào
Should disappear: ++>>+<+++<->-->-<<->-<
Should disappear: +++>-<--->+<
Should stay: +++>-<+>---<
Đầu ra
+++>-<+>---<
Bạn có thể chấp nhận đầu vào và đầu ra theo cách bạn muốn - stdin / stdout, một hàm, v.v., nhưng đầu vào có thể không được mã hóa cứng.
Đây là môn đánh gôn , vì vậy mã ngắn nhất về số lượng nhân vật sẽ giành chiến thắng.
+++>-<+>---<
chưa? Nó có thể được rút ngắn để tránh di chuyển con trỏ không cần thiết, nhưng đầu ra dự kiến sẽ không thay đổi. Sự hiểu biết của tôi dựa trên việc xem xét cả câu hỏi và câu trả lời là Doorknob rất tuyệt vời với thông số kỹ thuật được thực hiện một cách lỏng lẻo; chúng ta phải loại bỏ bất kỳ +-><
trình tự liền kề nào như đã nêu rõ ràng, và ngoài ra nó được phép thực hiện thêm việc thu nhỏ như trong ví dụ của bạn ++>>++<<--
và chúng ta cũng có thể sắp xếp lại miễn là chúng không thay đổi chức năng của mã, ví dụ như >+<+
vào +>+<
.
+>-<->+<
. (Đây có thể là cách khó nhất và khó thực hiện nhất.) Hãy chắc chắn rằng bạn không nhận được bất kỳ thông báo sai nào, như +>-<+>-<
, cái nào không nên xóa. " - đây là loại mơ hồ
++>>++<<--
nên đầu ra>>++<<
, và điều đó không được bảo hiểm. Vui lòng thêm nhiều trường hợp thử nghiệm.