如果您曾经尝试编写回文代码,那么您会知道会遇到多少括号。()()
是不是回文,即使它还挺看起来像它应该的,而())(
和()(
都是回文和两个非常愚蠢的期待。如果不是这样的话,会不会很方便?
如果一个字符串等于其所有括号(),方括号()和花括号()颠倒时所得到的字符串,则该字符串很容易回文。没有其他特殊字符需要翻转。(有时会配对,但通常不会配对,因此被忽略了。)()
[]
{}
<>
您的任务是用您的语言编写一个程序(接受STDIN的输入)或一个函数(接受单个字符串参数),该程序(a)当其参数为回文形式且给出不同的,一致的false时,给出一致的真值* (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
除了解释器/编译器标志之外,您不得依赖任何外部状态(特定的文件名,目录结构,其他用户输入,Web访问等)。
另外,您不得使用“注释技巧”来注释掉或通过利用语言的注释功能来渲染未使用的某些代码。例如,不允许以下所有操作,因为它们包含可以安全地移除或销毁的非功能性部件(以失去回文性为代价):
{some code} // {edoc emos}
{some code} NB.BN {edoc emos}
"n\" ;{edoc emos} ;"; {some code}; "\n"
显然,这可能无法涵盖所有此类情况,但是这里面临的挑战的精神是不要使用注释和未解析的**代码来实现回文,而要使用更正的括号和括号。我在看着你,LISP,Brainfuck。
这是一个代码高尔夫球,因此最短的代码获胜,但是欢迎所有长度的代码。
* 通过一致的true和false值,我的意思是,您可以返回一对值中的一个,例如1
true和0
false,或者False
true和"no"
false,只要这些值彼此不同并且不更改程序的运行。使用任何可以节省字符的内容。
** 不要与未执行混淆:有效且可能做奇怪的事情但从未调用过的代码是好的。
(eslaf)fi
,就可以使用if(false)
。
()()
不是回文
if(false){some code}
或未使用的变量呢?他们被允许吗?