回文回文检查器


37

编写程序以测试字符串是否为回文,并且附加条件为程序本身为回文。


1
如果该语言有直到最后的注释,这是微不足道的,所以我想应该禁止这些注释。
Joey

1
@Joey我很乐意不鼓励使用这样的评论,但是在提出问题后拒绝这些评论对已经回答的人来说是严厉的。@Ventero的答案(唯一不使用它们的答案)在计票方面遥遥领先,因此所有人似乎都同意。
marcog 2011年

1
好吧,要更早消除此类问题(这也发生在类似的SO任务上),您可以使用沙盒或Puzzle Lab ;-)
Joey

1
如何强加该程序应该是回文奎因本身就是邪恶的笑容;-)
Quixotic

4
我知道这是一个老问题,但是我认为它需要一个任意的获胜标准,例如人气竞赛或代码高尔夫球。该问题没有规定。
mbomb007'9

Answers:


34

红宝石

z=gets;puts *z.reverse==z&&1||0||1&&z==esrever.z* stup;steg=z

如果输入是回文,则输出1,否则输入0。输入没有换行符。

不使用任何注释,而是使用2个技巧:

  • 短路:0在Ruby中为true(仅nilfalse评估为false),因此1&&z==esrever.z* stup不进行评估,因此不会引发运行时异常
  • splat /乘法运算符(*):为避免出现语法错误z=esrever.z stup,我们强制解析器z=esrever.z()*stup通过添加来对其进行解析*。另一方面,将*解析为splat运算符,该运算符在函数调用中将数组拆分为一系列参数。如果只有一个元素而不是一个数组,那么它基本上什么都不做,所以puts *foo等效于puts foo

使用注释的明显解决方案(打印是/否):

puts gets.reverse==$_#_$==esrever.steg stup

您能解释一下它是如何工作的。我不懂红宝石。
mellamokb 2011年

@mellamokb:我添加了简短的解释。让我知道是否仍然不清楚。
Ventero 2011年

26

Python无注释

"a\";w=]1-::[w trinp;)(tupni_war=w;";w=raw_input();print w[::-1]==w;"\a"

令我惊讶的是,还没有人发现这种技巧,它应该适用于大多数语言!


2
非常聪明,我喜欢转义的报价。
韦恩·维尔纳

很好的解决方案,您甚至可以删除该print语句,并且如果允许将输入括在引号中,则raw_input()可以将其缩短为input()。开始时缺少额外的“ =”。
威廉2014年

在True或False之后删除了尾随的输出:"a\"#;w==]1-::[w;)(tupni_war=w;";w=raw_input();w[::-1]==w;#"\a"
Willem

13

佩尔

perl -nle "$s=$_ eq+reverse;print$s;s$tnirp;esrever+qe _$=s$"

没有注释的技巧,只是巧妙地滥用了替换运算符(嘿,perl变量也以$开头,那又是什么呢?)


7

Python 2.7

s=raw_input();print'YNEOS'[s!=s[::-1]::2]#]2::]1-::[s=!s['SOENY'tnirp;)(tupni_war=s

6

C

#include <stdio.h>                   //
#include <string.h>                  //
int main() {                         //
  char str[1024];                    //
  fgets(str, sizeof(str), stdin);    //
  int i = 0, j = strlen(str) - 2;    //
  for (; i < j; i++, j--)            //
    if (str[i] != str[j]) {          //
      printf("no\n");                //
      return 0;                      //
    }                                //
  printf("yes\n");                   //
}                                    //
//                                    }
//                   ;)"n\sey"(ftnirp  
//                                }    
//                      ;0 nruter      
//                ;)"n\on"(ftnirp      
//          { )]j[rts =! ]i[rts( fi    
//            )--j ,++i ;j < i ;( rof  
//    ;2 - )rts(nelrts = j ,0 = i tni  
//    ;)nidts ,)rts(foezis ,rts(stegf  
//                    ;]4201[rts rahc  
//                         { )(niam tni
//                  >h.gnirts< edulcni#
//                   >h.oidts< edulcni#

运行示例:

$ gcc -std=c99 c.c && ./a.out 
blahalb
yes

简洁不会赢,但给我留下深刻印象
韦恩·维尔纳

大声笑,聪明-lvl 11/10。
nymo 2015年

5

高尔夫脚本

.-1%=#=%1-.
  • 只是带有评论技巧
  • 输入不带\ n
  • 按字符执行匹配字符(甚至用于标点符号)
  • 返回1表示成功,0表示失败

4

的PHP

echo strrev($z)==$z;#;z$==)z$(verrts ohce

事实:

  • $z 字符串,要检查的输入字符串
  • $t布尔值,如果输入字符串$z是回文,则为TRUE ,否则为FALSE
  • 使用注释来帮助我使代码回文。
  • 产出 $t
  • 来源本身就是回文

之所以无法在PHP中实现回文回文检查器,是因为PHP变量以开头$。您不能$在PHP中以标识符结尾。


2

的PHP

<?php eval/*/*/(';{$i=fgets(STDIN,2e9);};{$a="strrev";}{var_dump("{$i}"=="{$a($i)}");}/*}{*\{;("{(tupni$)a$}"=="{putni$}")ohce}{;"verrts"==a$};{;(9e2,NIDTS)stegf=i$);');/*\*\eval php?>

使用一些奇怪的技巧来避免该$问题,从技术上讲,这不是回文,因为我最后不得不潜入;

 <?php $i = fgets(STDIN,2e9); echo $i == strrev($i);/*\;(i$)verrts == i$ ohce ;(9e2, NIDTS)stegf = $i php?>

这是一个使用PHP /* */注释的可行方法,并且您不需要结尾。


2
最后的第一个代码eval应为lave
AycanYaşıt2014年

1

CoffeeScript

我实际上在拼写“ split”,“ reverse”和“ join”的反拼方面感到困难:\

p=(s)->s.split('').reverse().join('')==s#s==)''(nioj.)(esrever.)''(tilps.s>-)s(=p

1

Groovy

print args[0]==args[0].reverse()?1:0//0:1?)(esrever.]0[sgra==]0[sgra tnirp

您在这里使用过评论!
蚂蚁

1

Python 3,55个字节

使用注释,但比其他使用注释的Python短。

s=input();print(s==s[::-1])#)]1-::[s==s(tnirp;)(tupni=s

1

模糊八度鳄梨调味酱,17字节

^Cz.=i_;@;_i=.zC^

不确定如何确定胜利,但我将字节数放在首位。

^ 获取输入并将其推入第一个堆栈。

C 将第一个堆栈复制到第二个堆栈。

z 反转堆栈的顶部,因此“ as”变为“ sa”。

. 移位活动堆栈,因此活动堆栈具有输入,而非活动堆栈具有反向输入。

=检查是否相等,返回0相等。

i反转ToS,因此0变为1,其他几乎变为False

_弹出并设置temp变量,;然后打印。

@手动结束程序,因此不会碰到相反的部分。这就是回文。


0

Java脚本

function a(b){return b==b.split('').reverse().join('')}//})''(nioj.)(esrever.)''(tilps.b==b nruter{)b(a noitcnuf

没有评论就很难做到...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.