Brain-flak tròn một tuổi vào ngày mai! Để tôn vinh sinh nhật của nó, chúng tôi sẽ có một bữa tiệc sinh nhật theo phong cách PPCG, nơi một số người dùng đăng các câu hỏi liên quan đến não bộ! Hãy giúp chúng tôi ăn mừng! :)
Brain-flak là một ngôn ngữ bí truyền mà tôi đã viết trong đó tất cả các lệnh là dấu ngoặc và tất cả các dấu ngoặc phải được khớp hoàn toàn. Mượn định nghĩa của riêng tôi :
Đối với mục đích của thử thách này, "khung" là bất kỳ ký tự nào trong số này :
()[]{}<>
.Một cặp ngoặc được coi là "khớp" nếu dấu ngoặc mở và đóng theo đúng thứ tự và không có ký tự bên trong chúng, chẳng hạn như
() []{}
Hoặc nếu mọi phân lớp bên trong của nó cũng được khớp.
[()()()()] {<[]>} (()())
Subelements cũng có thể được lồng nhiều lớp sâu.
[(){<><>[()]}<>()] <[{((()))}]>
Một chuỗi được coi là "Hoàn toàn khớp" khi và chỉ khi:
Mỗi ký tự là một dấu ngoặc,
Mỗi cặp ngoặc có khung mở và đóng đúng và theo đúng thứ tự
Trong lễ kỷ niệm sinh nhật đầu tiên của bộ não, thử thách ngày nay là về việc lấy một bộ dấu ngoặc không cân bằng và xác định loại hoạt động nào là cần thiết để làm cho bộ não hợp lệ.
Ví dụ,
((
không phải là mã flak não hợp lệ, nhưng nếu chúng ta thêm))
vào nó, nó sẽ trở thành(())
, nó hoàn toàn cân bằng, và do đó flak não hợp lệ. Điều đó làm cho đầu vào này appendable .Tương tự,
>}
không hợp lệ, nhưng chúng ta có thể trả trước{<
để thực hiện{<>}
, điều này là hợp lệ. Điều đó làm cho đầu vào này prependable .Một số đầu vào phức tạp hơn một chút. Ví dụ,
)][({
không thể được thực hiện hợp lệ hoàn toàn bằng cách nối thêm hoặc trả trước. Nhưng nó có thể được thực hiện hợp lệ bằng cách thêm[(
và bổ sung})]
. Do đó, nhập vào đây là cả prependable và appendable .Cuối cùng, một số đầu vào không bao giờ có thể được tạo thành mã não hợp lệ bằng bất kỳ sự kết hợp nào của việc nối thêm hoặc trả trước. Ví dụ,
(>
không bao giờ có thể được thực hiện hợp lệ. (Chuẩn bị<
tạo<(>
và nối thêm)
tạo(>)
, cả hai đều không hợp lệ) Do đó, đầu vào này không phải là phụ lục hoặc có thể bổ sung.
Đối với thử thách ngày hôm nay, bạn phải viết một chương trình hoặc hàm lấy một chuỗi dấu ngoặc và xác định xem chuỗi đó có phải là
appendable
prependable
both
neither
Bạn có thể chọn những giá trị bạn sử dụng để đại diện cho từng trường hợp. Ví dụ, xuất ra 1, 2, 3, 4
, hay 'a', 'p', 'b', 'n'
, hoặc 1, 'foo', 3.1415, -17
, hoặc bất cứ điều gì là tốt. Miễn là mỗi đầu ra là khác biệt và nhất quán , điều đó là tốt. Tuy nhiên, bạn phải xác định rõ đầu ra tương ứng với trường hợp nào.
Bạn có thể trả về giá trị này ở bất kỳ định dạng nào thuận tiện nhất (ví dụ: trả về từ một hàm, in sang STDOUT, sửa đổi đối số, ghi vào tệp, v.v.).
Bạn có thể giả định rằng đầu vào sẽ không bao giờ là hợp lệ hoặc trống rỗng.
Ví dụ
Các đầu vào sau đều prependable :
))
(((()()())))}
)>}]
()[]{}<>)
Đây là tất cả appendable :
(({}{})
((((
([]()())(
{<<{
Đây là tất cả cả hai :
))((
>()[(()){
>{
Và đây là tất cả không phải :
)(}
{(((()()()))>
[}
((((((((((>
((((((((((<>()]
Như thường lệ, đây là môn đánh gôn , do đó, sơ hở tiêu chuẩn được áp dụng và câu trả lời ngắn nhất bằng byte sẽ thắng!
Thử thách này đặc biệt khó khăn trong trò chơi trí não, vì vậy, tối đa chỉ ra bất kỳ và mọi câu trả lời được viết bằng trò chơi trí tuệ. :)
][
là không appendable, như không có gì bạn có thể thêm có thể làm cho nó có hiệu lực. Tương tự, nó không phải là điều khoản trước. Đó là ... 'có thể chèn'! Bạn có thể chèn nó vào một chuỗi để tạo ra toàn bộ Brainflak hợp lệ.
You can assume that the input will never be valid brain-flak or empty.
maximum brownie points
Tôi nghĩ rằng việc cung cấp điểm brownie và cookie tối đa thay vào đó sẽ khuyến khích Brain-Flakes thách thức này hơn là chỉ điểm brownie, vì tôi không nghĩ nó tầm thường ở bất kỳ ngôn ngữ nào , chứ đừng nói đến Brain-Flak. : P