目标:任何语言.最小的函数,它将返回一个字符串是一个回文.这是我的Python:
R=lambda s:all(a==b for a,b in zip(s,reversed(s)))
50个字符.
接受的答案将是当前最小的答案 - 当发现较小的答案时,这将会改变.请指定您的代码所在的语言.
J中有7个字符:不确定这是不是最好的方式,我对J有点新:)
p=:-:|.
解释:|.反转输入. - :比较.操作数是隐含的.
p 'radar' 1 p 'moose' 0
这是我的; 它是用我发明的特定领域语言编写的,叫做'回文'.
p
编辑:不太轻浮的版本(i386 asm,AT&T语法)
xor %eax, %eax mov %esi, %edi #cld not necessary, assume DF=0 as per x86 ABI repne scasb scan: dec %edi cmpsb .byte 0x75, 6 #jnz (short) done dec %edi cmp %esi, %edi .byte 0x72, -9 #jb (short) scan inc %eax done:
16个字节,字符串指针在ESI中,结果在EAX中.
可悲的是,我无法理解千言万语......
(LabVIEW.是的,他们会在这里发布任何流浪汉帖子;)
Haskell,15个字符:
p=ap(==)reverse
更易读的版本,16个字符:
p x=x==reverse x
另一个相当短的python版本(21个字符):
R=lambda s:s==s[::-1]
有可能获得投票,大多数所有这些只是调用一种隐藏所有真正的编程逻辑的命令反转.
我想知道在这些语言中,最短的手动方式是什么.
使用C#和LINQ运算符:
public bool IsPalindrome(string s) { return s.Reverse().SequenceEqual(s); }
如果你把Reverse视为作弊,你可以通过减少来完成整个事情:
public bool IsPalindrome(string s) { return s.Aggregate(new StringBuilder(), (sb, c) => sb.Insert(0, c), (sb) => sb.ToString() == s); }
Perl(27个字符):
sub p{$_[0]eq reverse$_[0]}
Ruby(24个字符):
def p(a)a==a.reverse end
73清洁,可读,用java编写的字符
boolean p(String s){return s.equals(""+new StringBuffer(s).reverse());}
和平:)
无意义的Haskell版本(15个字符,但是除非你包含Control.Arrow和Control.Monad并忽略单态限制,否则它不会真正起作用):
p=ap(==)reverse
(equal p (reverse p))
口齿不清.18个字符.
好的,这是一个特例.如果直接输入到lisp解释器并且已经定义了p,这将起作用.
否则,这是必要的:
(defun g () (equal p (reverse p)))
28个字符.
Lua的目标更多是可读性而不是简洁性,但却是一个诚实的37个字符:
function p(s)return s==s:reverse()end
变体,只是为了好玩(相同的大小):
p=function(s)return s==s:reverse''end
JavaScript版本更冗长(55个字符),因为它没有字符串反转功能:
function p(s){return s==s.split('').reverse().join('')}
我会更进一步:完整的c代码,编译和去.
90个字符
main(int n,char**v){char*b,*e;b=e=v[1];while(*++e);for(e--;*b==*e&&b++e;}