Було кілька попередніх спроб задати це питання, але вони не відповідають сучасним стандартам на цьому сайті. За дискусію про Meta , я репостую її таким чином, що дозволяє сумлінно конкурувати за нашими сучасними наборами правил.
Фон
Паліндром є рядком, «зчитує ті ж вперед і назад», тобто в зворотній послідовності така ж , як і сама рядок. Тут ми не говоримо про "зручні паліндроми", а про суворому перевороті символів; наприклад, ()()
не є паліндром, але ())(
є.
Задача
Напишіть програму або функцію, яка приймає рядок S (або відповідний еквівалент у вашій мові) як вхідний і має один вихід Q (типу на ваш вибір). Ви можете скористатися будь-якими розумними засобами, щоб взяти вклад і забезпечити вихід.
- Коли вхід S - паліндром, вихід Q повинен мати значення A (те саме для будь-якого паліндромного S ).
- Коли вхід S не є паліндром, вихід Q повинен мати значення B (те саме для будь-якого непаліндромного S ).
- A і B повинні відрізнятися один від одного.
Або іншими словами: зіставити всі паліндрами на одне значення, а всі непаліндри на інше.
Крім того, програма або функція, яку ви пишете, повинна бути самим паліндром (тобто її вихідний код повинен бути паліндромним), що робить це джерелом з обмеженим доступом .
Роз'яснення
- Хоча
true
іfalse
очевидний вибір для A і B , ви можете використовувати будь-які два різних значення для результатів "є паліндром" і "не є паліндром", які не повинні бути булевими. - Тут ми визначаємо обертання рядків на рівні символів ;
éé
є паліндромною незалежно від того, програма кодується в UTF-8 або Latin-1, навіть якщо це не паліндромна послідовність октетів після кодування UTF-8. - Однак, навіть якщо ваша програма містить символи, що не належать до ASCII, вона повинна працювати лише для введення ASCII. Зокрема, вхід S міститиме лише символи для друку ASCII (включаючи пробіл, але не включаючи новий рядок). Крім усього іншого, це означає, що якщо ви ставитеся до вводу як послідовності байтів, а не як послідовності символів, ваша програма все одно, можливо, буде відповідати специфікації (якщо тільки кодування вводу / виводу вашої мови не дуже дивне). Отже, визначення паліндром у попередній кулі має значення лише при перевірці, чи програма має правильну форму.
- Приховування половини програми в коментарях або рядкових літералах, хоча і не створюється, є законним; вас забивають на довжину, а не на творчість, тому сміливо використовуйте "нудні" методи, щоб переконатися, що ваша програма є паліндром. Звичайно, оскільки ви набираєте величину за довжиною, частини вашої програми, які нічого не роблять, погіршать ваш результат, тому можливість використання обох половин вашої програми, ймовірно, буде корисною, якщо ви зможете керувати нею. .
- Оскільки критерій перемоги вимірюється в байтах, вам потрібно буде вказати кодування, в яке написана ваша програма, щоб мати можливість її оцінювати (хоча в багатьох випадках буде очевидно, яке кодування ви використовуєте).
Критерій перемоги
Незважаючи на те, що програма повинна бути паліндром на рівні символів, ми використовуємо байти, щоб побачити, хто виграє. Зокрема, чим коротше ваша програма, вимірюється в байтах, тим краще; це проблема з кодовим гольфом . Для того, щоб дозволити порівняння подань (особливо подань на тій же мові), розмістіть кількість байтів для вашої програми в заголовку вашої заявки (плюс кількість символів, якщо вона відрізняється від кількості байтів).
(
на a
і )
на b
. Є чи abab
паліндром? Ні, мав би бути abba
. Тоді ()()
також не паліндром; це мало б бути ())(
.
()() is not a palindrome, but ())( is.
Вітаємо, ви потрапили на reddit!