Якщо ви коли-небудь намагалися написати паліндромний код раніше, то знаєте, скільки дужок, як правило, потрапляють на ваш шлях. ()()
не паліндром, хоча це свого роду виглядає , як це повинно бути, в той час як ())(
і ()(
обидва паліндроміческій і обидва дуже тупий погляд. Не було б зручно, якби було навпаки?
Рядок зручно паліндромним, якщо він дорівнює рядку, отриманому, коли в його звороті є всі круглі дужки ( ()
), дужки ( []
) і дужки ( {}
). Жоден інший символ не є спеціальним і не потребує гортання. ( <>
іноді в парі, але часто не так, що їх залишають осторонь.)
Ваше завдання полягає в тому, щоб написати своєю мовою програму (приймаючи вклад на STDIN) або функцію (взявши аргумент єдиного рядка), яка (а) дає послідовне істинне значення *, коли його аргумент зручно паліндромний і інший, послідовно хибний значення інакше, і (b) є самим зручно паліндромним.
Наприклад, такі входи зручно паліндромними:
racecar
(a)(bb)(a)
void main(int argc, *char[] argv) {} (vgra []rahc* ,cgra tni)niam diov
А такі не:
non-palindrome
A nut for a jar of tuna?
(old [style] parens) )snerap ]elyts[ dlo(
ingirumimusnocte)etconsumimurigni
Ви не можете покладатися на будь-який зовнішній стан (конкретне ім'я файлу, структуру каталогів, інший ввід користувача, доступ до Інтернету тощо), крім прапорців інтерпретатора / компілятора.
Крім того, ви не можете використовувати "трюк коментарів", коли ви коментуєте або не використовуєте якийсь фрагмент коду, скориставшись можливостями вашої мови для коментування. Наприклад, все наступне не дозволено, оскільки вони містять нефункціональні частини, які можна безпечно видалити або знищити (за рахунок втрати зручно-паліндромності):
{some code} // {edoc emos}
{some code} NB.BN {edoc emos}
"n\" ;{edoc emos} ;"; {some code}; "\n"
Очевидно, що це може охоплювати не кожен подібний випадок, але дух виклику тут полягає не у використанні коментарів та нерозбірливого коду ** для досягнення паліндромності, а замість того, щоб використовувати виправлені парени та дужки. Я дивлюся на тебе, LISP, Brainfuck.
Це код-гольф , тому найкоротший код виграє, але всі довжини коду вітаються.
* Під послідовними істинними та хибними значеннями я маю на увазі, що ви можете повернути одне з парних значень, наприклад 1
для істинного та 0
хибного, або False
для істинного та "no"
хибного, доки ці значення відрізняються один від одного, і не перехід від запуску до запуску програми. Використовуйте те, що рятує вас персонажів.
** Не плутати з невиконаним : код, який є дійсним і може робити дивні речі, але ніколи не називається, це добре.
(eslaf)fi
, ви отримаєте використання if(false)
.
()()
це не паліндром
if(false){some code}
або невикористаними змінними? Вони дозволені?