目标:任何语言。返回一个字符串是否为回文的最小函数。这是我用Python写的代码:
R=lambda s:all(a==b for a,b in zip(s,reversed(s)))
50个字符。
被接受的答案将是当前最小的 - 随着发现更小的答案,这将会改变。请指定您的代码所使用的编程语言。
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汇编语言,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]
冒着被踩的风险,它们中大多数只调用了某种名为reverse的命令,隐藏了所有真正的编程逻辑。
我想知道在每种语言中最短的手动实现方法是什么。
使用 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);
}
s.Reverse().ToString() == s;
,而第二个则是!s.Where((c,i)=>c!=s[s.Length-i-1]).Any()
。 - GabePerl(27个字符):
sub p{$_[0]eq reverse$_[0]}
Ruby(24个字符):
def p(a)a==a.reverse end
->(e){e.reverse==e}
,但我不知道它是否被视为“函数”(我猜它是)。 - Chubas使用Java编写的73个整洁易读的字符
boolean p(String s){return s.equals(""+new StringBuffer(s).reverse());}
祝平安 :)
无意义的Haskell版本(15个字符,但如果包括Control.Arrow和Control.Monad并忽略单态限制,则不会真正起作用):
p=ap(==)reverse