30
我是回文集。你是?
已经有几个先前 尝试问这个问题,但也符合本网站现代化标准。根据对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字符(包括空格,但不包括换行符)。除其他外,这意味着,如果将输入视为字节序列而不是字符序列,则程序仍可能符合规范(除非您语言的I / O编码很奇怪)。因此,仅在检查程序具有正确的形式时,前一项目符号中回文的定义才真正重要。 将程序隐藏在注释或字符串文字中的一半是合法的,尽管这是不合法的。您的评分是根据长度而不是创造力进行的,因此请随意使用“无聊”的方法来确保您的程序是回文。当然,由于您的评分很长,因此程序中什么都不做的部分会使您的成绩更差,因此,如果可以管理程序,则可以同时使用程序的两半。 由于胜利标准是以字节为单位的,因此您需要指定编写程序的编码,以便能够对其进行评分(尽管在许多情况下,很明显您正在使用哪种编码)。 胜利标准 即使该程序需要在字符级别上成为回文,但我们仍使用字节来查看谁获胜。具体来说,程序越短(以字节为单位)越好;这是一个代码高尔夫挑战。为了允许比较提交(尤其是使用相同语言的提交),请将程序的字节数放在提交的标头中(如果字符数与字节数不同,则加上字符数)。