(([][()]){[{}({}[({})])]{{}()(<()>)}{}([][()])}<>)
Hãy thử trực tuyến!
Vì mọi người đều đăng các giải pháp 50 byte của họ ở đây là của tôi (tôi có một byte 48 byte nhưng đó là một sửa đổi đơn giản của DjMcMayhem nên tôi cảm thấy nó đáng để đăng)
Giải trình
Câu trả lời này sử dụng rộng rãi hủy bỏ giá trị.
Un-golfed nó trông giống như
([][()])({<{}({}[({})])>{<{}>()(<()>)}{}<([][()])>}<>)
Ở đây chúng ta tính toán delta cho đến khi ngăn xếp còn lại một mục, mỗi lần chúng ta tích lũy một giá trị từ vòng lặp bên trong nếu delta bằng không.
Đây là một cách khá thẳng về phía trước để làm điều đó.
Để làm cho golf này, chúng tôi bắt đầu hủy bỏ giá trị. Cái đầu tiên và cái rõ ràng nhất đối với bất kỳ tay golf cứng não nào là chiều cao chồng. Đó là một thực tế nổi tiếng rằng
([])({<{}>...<([])>}{})
giống như
(([]){[{}]...([])}{})
Khi các giá trị được sửa đổi bởi một, cùng giữ. Điều này cho chúng ta
(([][()]){[{}]<({}[({})])>{<{}>()(<()>)}{}([][()])}<>)
Bạn có thể nhận thấy điều này thậm chí không tiết kiệm cho chúng tôi byte, nhưng đừng băn khoăn nó sẽ trở nên hữu ích hơn khi chúng ta tiếp tục.
Chúng tôi có thể thực hiện giảm khác, nếu bạn thấy một tuyên bố
<(...)>{<{}> ...
bạn thực sự có thể giảm nó xuống
[(...)]{{} ...
Điều này hoạt động bởi vì nếu chúng ta vào vòng lặp [(...)]
và {}
sẽ hủy, và nếu chúng ta không có giá trị [(...)]
bằng 0 ở vị trí đầu tiên và không cần phải hủy bỏ. Vì chúng tôi có sự xuất hiện của mẫu này trong mã của chúng tôi, chúng tôi có thể giảm nó.
(([][()]){[{}][({}[({})])]{{}()(<()>)}{}([][()])}<>)
Điều đó đã tiết kiệm cho chúng tôi 2 byte nhưng nó cũng đặt hai phủ định cạnh nhau. Đây có thể được kết hợp để tiết kiệm cho chúng tôi 2.
(([][()]){[{}({}[({})])]{{}()(<()>)}{}([][()])}<>)
Và đó là mã của chúng tôi.
False
được in thay thế?