Если вы когда-либо пытались написать палиндромный код раньше, вы бы знали, сколько скобок мешает вам. ()()
это не палиндром, даже если он выглядит так, как и должно быть, хотя ())(
и ()(
палиндромен, и оба выглядят очень тупыми. Разве это не было бы удобно, если бы это было наоборот?
Строка обычно является палиндромной, если она равна строке, полученной, когда в ее обращении перевернуты все скобки ( ()
), скобки ( []
) и фигурные скобки ( {}
). Никакие другие символы не являются специальными и требуют переключения. ( <>
иногда в паре, но часто не так, они не учтены.)
Ваша задача - написать на вашем языке программу (с вводом в STDIN) или функцию (с одним строковым аргументом), которая (a) дает непротиворечивое истинное значение *, когда ее аргумент удобно палиндромным и другой непротиворечивый ложный значение иначе, и (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, Брейнфак.
Это код-гольф , поэтому выигрывает самый короткий код, но приветствуется любая длина кода.
* Под последовательными значениями true и false я подразумеваю, что вы можете вернуть одно из пары значений, например, 1
для true и 0
для false, или False
для true и "no"
для false, если эти значения отличаются друг от друга и не переход от запуска к запуску вашей программы. Используйте то, что спасает ваших персонажей.
** Не путать с неисполненным : код, который является допустимым и может делать странные вещи, но никогда не вызывается, это хорошо.
(eslaf)fi
, вы можете использовать if(false)
.
()()
не палиндром,
if(false){some code}
или неиспользуемые переменные? Они разрешены?