Đã có một vài nỗ lực trước đây để đặt câu hỏi này, nhưng không phù hợp với tiêu chuẩn hiện đại trên trang web này. Mỗi cuộc thảo luận về Meta , tôi đang đăng lại nó theo cách cho phép cạnh tranh công bằng theo các quy tắc hiện đại của chúng tôi.
Lý lịch
Một palindrom là một chuỗi "đọc cùng một tiến và lùi", tức là ngược lại của chuỗi giống như chính chuỗi đó. Chúng ta không nói về "palindromes tiện lợi" ở đây, mà là một sự đảo ngược từng nhân vật nghiêm ngặt; ví dụ, ()()
không phải là một palindrom, nhưng ())(
là.
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 và có một đầu ra Q (thuộc loại bạn chọn). 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.
- Khi đầu vào S là một palindrom, đầu ra Q phải có giá trị A (tương tự với bất kỳ S palindromic nào ).
- Khi đầu vào S không phải là một palindrom, đầu ra Q phải có giá trị B (tương tự với bất kỳ S không palindromic nào ).
- A và B phải khác biệt với nhau.
Hay nói cách khác: ánh xạ tất cả các palindrome thành một giá trị và tất cả các palindromes khác.
Ngoài ra, chương trình hoặc chức năng bạn viết phải là một palindrom (tức là mã nguồn của nó phải là palindromic), làm cho điều này trở thành một thách thức nguồn bị hạn chế .
Làm rõ
- Mặc dù
true
vàfalse
là những lựa chọn rõ ràng cho A và B , bạn có thể sử dụng bất kỳ hai giá trị riêng biệt nào cho đầu ra "là một palindrom" và "không phải là một palindrom", không cần phải là booleans. - Chúng tôi đang xác định đảo ngược chuỗi ở cấp độ ký tự ở đây;
éé
là palindromic bất kể chương trình được mã hóa theo UTF-8 hay Latin-1, mặc dù đó không phải là một chuỗi các octet sau khi mã hóa UTF-8. - Tuy nhiên, ngay cả khi chương trình của bạn chứa các ký tự không phải ASCII, nó chỉ cần hoạt động cho đầu vào ASCII. Cụ thể, đầu vào S sẽ chỉ chứa các ký tự ASCII có thể in (bao gồm cả khoảng trắng, nhưng không bao gồm dòng mới). Trong số những thứ khác, điều này có nghĩa là nếu bạn coi đầu vào là một chuỗi byte chứ không phải là một chuỗi ký tự, chương trình của bạn vẫn có thể tuân thủ đặc tả (trừ khi mã hóa I / O của ngôn ngữ của bạn rất kỳ lạ). Như vậy, định nghĩa của một bảng màu trong viên đạn trước chỉ thực sự quan trọng khi kiểm tra xem chương trình có đúng mẫu không.
- Ẩn một nửa chương trình trong một bình luận hoặc chuỗi bằng chữ, trong khi không sáng tạo, là hợp pháp; bạn đang được chấm điểm về chiều dài, không phải sự sáng tạo, vì vậy hãy thoải mái sử dụng các phương pháp "nhàm chán" để đảm bảo chương trình của bạn là một bảng màu. Tất nhiên, vì bạn đang bị ghi điểm về thời lượng, các phần trong chương trình của bạn không làm gì sẽ làm xấu đi điểm số của bạn, vì vậy việc có thể sử dụng cả hai nửa chương trình của bạn có thể sẽ hữu ích nếu bạn có thể quản lý nó .
- Vì tiêu chí chiến thắng được đo bằng byte, bạn sẽ cần chỉ định mã hóa trong đó chương trình của bạn được viết để có thể chấm điểm (mặc dù trong nhiều trường hợp, rõ ràng bạn sẽ sử dụng mã hóa nào).
Tiêu chí chiến thắng
Mặc dù chương trình cần phải là một bảng màu ở cấp độ ký tự, chúng tôi đang sử dụng byte để xem ai thắng. Cụ thể, chương trình của bạn càng ngắn, được đo bằng byte thì càng tốt; đây là một thử thách golf-code . Để cho phép các bài nộp (đặc biệt là các bài nộp trong cùng một ngôn ngữ) được đặt, hãy đặt số byte cho chương trình của bạn trong tiêu đề của bài gửi của bạn (cộng với số ký tự, nếu nó khác với số byte).
(
bằng a
và )
bằng b
. Là abab
một palindrom? Không, nó sẽ phải như vậy abba
. Sau đó, ()()
không phải là một palindrom; nó sẽ phải được ())(
.
()() is not a palindrome, but ())( is.
Xin chúc mừng, bạn đã làm nó trên reddit!