目标:任何语言。返回一个字符串是否为回文的最小函数。这是我用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个字符。
被接受的答案将是当前最小的 - 随着发现更小的答案,这将会改变。请指定您的代码所使用的编程语言。
(equal p (reverse p))
Lisp. 18个字符。
好的,这是一个特殊情况。如果直接在Lisp解释器中输入并且“p”已经定义,则可以使用此方法。
否则,需要执行以下操作:
(defun g () (equal p (reverse p)))
28个字符。
reverse
适用于任何序列,equal
适用于字符串、位向量和conses(列表)等其他类型,但与回文无关。 - Svante(defun p(p)(equal p(reverse p)))
:o) - Svantefunction 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('')}
main(int n,char**v){char*b,*e;b=e=v[1];while(*++e);for(e--;*b==*e&&b++<e--;);return b>e;}
PHP:
function p($s){return $s==strrev($s);} // 38 chars
$s==strrev($s); // 15 chars
在你的语言中使用reverse函数是不是有点作弊呢?我的意思是,看看Ruby解决方案给出的
def p(a)a==a.reverse end
你可以轻松地将其重写为
def p(a)a==a.r end
假设您在代码中创建了一个扩展方法,使得“r”调用反转。我希望看到人们发布的解决方案不包含对其他函数的调用。当然,字符串长度函数应该是允许的。
不使用反转的 Ruby - 41个字符
def m(a)a==a.split('').inject{|r,l|l+r}end
VB.Net - 173 字符
Function P(ByVal S As String) As Boolean
For i As Integer = 0 To S.Length - 1
If S(i) <> S(S.Length - i - 1) Then
Return False
End If
Next
Return True
End Function
F#(非常类似于C#的例子)
let p s=let i=0;let l=s.Length;while(++i<l)if(s[i]!=[l-i-1]) 0; 1;;
Golfscript, 5 char
.-1%=
$ echo -n abacaba | ruby golfscript.rb palindrome.gs
1
$ echo -n deadbeef | ruby golfscript.rb palindrome.gs
0
虽然不是最短的方法,而且有些迟来了,但我还是在MATLAB中尝试了一下:
R=@(s)all(s==fliplr(s));
24个字符。
C# 没有反转函数 84个字符
int p(char[]s){int i=0,l=s.Length,t=1;while(++i<l)if(s[i]!=s[l-i-1])t&=0;return t;}
没有反转函数的C#:86个字符
int p(char[]s){int i=0;int l=s.Length;while(++i<l)if(s[i]!=s[l-i-1])return 0;return 1;}
VBScript 41个字符
function p:p=s=strreverse(s):end function
#L(equal !1(reverse !1))
#L是SHARPL-READER在迭代包中实现的读取宏字符。它基本等同于(lambda (!1) ...)。
Common Lisp长版本仅使用原语(包括空格共137个,可压缩至108个):
(defun p (s)
(let ((l (1- (length s))))
(iter (for i from l downto (/ l 2))
(always (equal (elt s i) (elt s (- l i)))))))
它再次使用了iterate,这实际上是一个更干净的内置LOOP工具,因此我倾向于将其视为核心语言。