Lý lịch
Lấy cảm hứng từ tôi là một palindrom. Bạn có phải? , trong đó người ta đã trình bày một sự thật gây sốc rằng, ()()
không phải là một palindrom, mà là ())(
, tôi đã tự hỏi mình thay vào đó là gì ()()
và câu trả lời đơn giản là: đó là một chuỗi có trục đối xứng dọc!
Nhiệm vụ
Viết chương trình hoặc hàm lấy một chuỗi S (hoặc tương đương phù hợp trong ngôn ngữ của bạn) làm đầu vào, kiểm tra tính đối xứng dọc theo trục dọc và trả về giá trị trung thực hoặc sai lệch tương ứng. Bạn có thể sử dụng bất kỳ phương tiện hợp lý nào để lấy đầu vào và cung cấp đầu ra.
Đối xứng phản xạ
Đối xứng phản xạ xung quanh trục dọc (hoặc đối xứng trái phải) có nghĩa là nếu bạn đặt một gương theo chiều dọc ở trung tâm chính xác của chuỗi, hình ảnh phản chiếu của nửa đầu của chuỗi giống hệt với nửa sau của chuỗi.
Ví dụ, các chuỗi sau đây là đối xứng phản xạ xung quanh một trục dọc:
()()
()()()
[A + A]
WOW ! WOW
OH-AH_wx'xw_HA-HO
(<<[[[T*T]]]>>)
(:)
)-(
())(()
qpqp
trong khi sau đây không phải là:
())(
((B))
11
+-*+-
WOW ! wow
(;)
qppq
Thể lệ cuộc thi
• Chương trình hoặc chức năng của bạn sẽ chỉ nhận được các ký tự ASCII có thể in được. Bạn có thể bao gồm hoặc không bao gồm chuỗi trống, (tất nhiên là đối xứng!) Làm đầu vào hợp pháp, tốt hơn cho bạn.
• Các ký tự ASCII có thể được coi là đối xứng với trục dọc là như sau (lưu ý không gian ban đầu và sự khác biệt giữa chữ hoa và chữ thường):
!"'+*-.:=AHIMOTUVWXY^_ovwx|
Các ký tự ASCII có thể được coi là nhân đôi và nhân vật tương ứng của họ là:
()<>[]{}qpbd/\
Lưu ý rằng, kể từ khi họ được nhân đôi, bạn có thể có cả hai ()
cũng như )(
, /\
và \/
vv
Tất cả các ký tự có thể in ASCII khác phải được coi là không đối xứng và không có ký tự tương ứng được nhân đôi.
• Đây là một thử thách chơi gôn mã : chương trình của bạn càng ngắn, được đo bằng byte, càng tốt, trong bất kỳ ngôn ngữ lập trình nào.
• Kudos cho những người sẽ tạo ra một chương trình đối xứng!
Lưu ý : câu hỏi này không phải là một bản sao của "Tiện ích Palindrom , tiện lợi , cần phải kiểm tra các chuỗi palindromic trong đó dấu ngoặc đơn được lật. Câu hỏi này khác nhau vì hai lý do:
1) đó là một hạn chế của câu hỏi khác đối với những gì liên quan đến các ký tự không phải dấu ngoặc đơn, vì chỉ các ký tự đối xứng có thể xuất hiện theo thứ tự ngược lại.
2) Kể từ khi nó được dựa trên khái niệm về đối xứng, và không phải trên một khái niệm về “palindrome thuận tiện”, nhân vật được nhân đôi có thể xuất hiện trong cả hai trình tự, ví dụ []
và ][
, và điều này làm cho chương trình để giải quyết nó khác biệt so với các chương trình giải quyết vấn đề khác .
8
được coi là "đối xứng"?