Nếu bạn đã từng thử viết mã palindromic trước đây, bạn sẽ biết có bao nhiêu dấu ngoặc có xu hướng cản trở bạn. ()()
không phải là một palindrom, mặc dù nó trông giống như nó phải vậy, trong khi ())(
và ()(
cả hai đều nhạt màu và cả hai trông rất ngu ngốc. Sẽ không thuận tiện nếu nó là cách khác?
Một chuỗi là thuận tiện palindromic nếu nó bằng với chuỗi xuất phát khi đảo ngược của nó có tất cả các dấu ngoặc đơn ( ()
), ngoặc ( []
) và dấu ngoặc ( {}
). Không có nhân vật khác là đặc biệt và yêu cầu lật. ( <>
đôi khi được ghép nối nhưng thường không để chúng bị bỏ đi.)
Nhiệm vụ của bạn là viết, bằng ngôn ngữ của bạn, một chương trình (lấy đầu vào trên STDIN) hoặc một hàm (lấy một đối số chuỗi đơn) mà (a) đưa ra một giá trị đúng nhất quán * khi đối số của nó thuận tiện và sai, nhất quán, sai giá trị khác, và (b) là chính nó thuận tiện.
Ví dụ, các đầu vào sau đây là palindromic thuận tiện:
racecar
(a)(bb)(a)
void main(int argc, *char[] argv) {} (vgra []rahc* ,cgra tni)niam diov
Và sau đây không phải là:
non-palindrome
A nut for a jar of tuna?
(old [style] parens) )snerap ]elyts[ dlo(
ingirumimusnocte)etconsumimurigni
Bạn không được dựa vào bất kỳ trạng thái bên ngoài nào (tên tệp cụ thể, cấu trúc thư mục, đầu vào người dùng khác, truy cập web, v.v.) ngoại trừ cờ trình thông dịch / trình biên dịch.
Ngoài ra, bạn không được sử dụng "thủ thuật nhận xét" khi bạn nhận xét hoặc hiển thị một số đoạn mã không sử dụng bằng cách tận dụng các phương tiện nhận xét ngôn ngữ của bạn. Chẳng hạn, tất cả những điều sau đây đều không được phép, bởi vì chúng có chứa các bộ phận không có chức năng có thể được gỡ bỏ hoặc phá hủy một cách an toàn (với chi phí mất thuận tiện-palindromic-ness):
{some code} // {edoc emos}
{some code} NB.BN {edoc emos}
"n\" ;{edoc emos} ;"; {some code}; "\n"
Rõ ràng điều này có thể không bao gồm mọi trường hợp như vậy, nhưng tinh thần của thách thức ở đây không phải là sử dụng các bình luận và mã ** chưa được chỉnh sửa để đạt được sự minh bạch, thay vào đó là sử dụng các dấu ngoặc và dấu ngoặc đúng. Tôi đang nhìn bạn, LISP, Brainfuck.
Đây là một môn đánh gôn , vì vậy mã ngắn nhất sẽ thắng, nhưng tất cả độ dài của mã đều được chào đón.
* Bằng các giá trị đúng và sai nhất quán, ý tôi là bạn có thể trả về một trong các cặp giá trị, chẳng hạn như 1
đúng và 0
sai, hoặc False
đúng và "no"
sai, miễn là các giá trị này khác nhau và không thay đổi từ chạy sang chạy chương trình của bạn. Sử dụng bất cứ điều gì giúp bạn tiết kiệm nhân vật.
** Không nên nhầm lẫn với chưa được thực hiện : mã hợp lệ và có thể làm những điều kỳ lạ nhưng không bao giờ được gọi là tốt.
(eslaf)fi
, bạn có thể sử dụng if(false)
.
()()
không phải là một palindrom
if(false){some code}
hoặc các biến không sử dụng? Họ có được phép không?