Если вы используете Eclipse, вы можете предупредить вас об этих утверждениях:
[/g0]
PHP:
function p($s){return $s==strrev($s);} // 38 chars
или, всего
$s==strrev($s); // 15 chars
К сожалению, я неспособен получить менее чем тысячу слов...
(LabVIEW. Да, они позволят примерно любому сообщению бродяги здесь;)
Haskell, 28 символам, нужно Управление. Стрелка импортируется.
p=uncurry(==).(id&&&reverse)
Я возьму его немного далее: полный код c, скомпилируйте и пойдите.
90 символов
main(int n,char**v){char*b,*e;b=e=v[1];while(*++e);for(e--;*b==*e&&b++<e--;);return b>e;}
Здесь является моим; это записано на проблемно-ориентированном языке, который я изобрел, названный 'палиндромом'.
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.
[WARNING] The project com.example:pom:0.0.2 uses prerequisites which is only intended for maven-plugin projects but not for non maven-plugin projects. For such purposes you should use the maven-enforcer-plugin. See https://maven.apache.org/enforcer/enforcer-rules/requireMavenVersion.html
– Raymund Arthur
14 May 2019 в 07:09
F# (много как пример C#)
let p s=let i=0;let l=s.Length;while(++i<l)if(s[i]!=[l-i-1]) 0; 1;;
points((1:10)+0.05, col=rgb(c(0, 0), c(1, 0), c(0, 1), rep(0.5, 2)), pch=16)
(Вы могли использовать тот же подход для 6 различных цветов),
– sgibb
21 October 2012 в 16:31
Haskell, 36 символов включая его собственную обратную функцию. (На самом деле при использовании точек с запятой, чтобы сделать его остротой и проигнорировать новую строку в конце, это было бы 35...)
r[]y=y
r(a:x)y=r x$a:y
p s=s==r s[]
, Поскольку с другими реализациями, "p" является предикатом палиндрома.
может был, хорошо дают пример C++, который пользуется стандартной библиотекой:
bool p(const std::string &s){std::string s2(s);std::reverse(s2);return s==s2;}
Благодаря Jon Для указания, что это могло быть короче, если мы делаем некоторые ненужные копии. В общей сложности 67 символов.
bool p(std::string s){std::string x=s;std::reverse(x);return s==x;}
Не самое короткое, и очень после совершения, но я не мог сдержать предоставление его попытка в MATLAB:
R=@(s)all(s==fliplr(s));
24 символа.
18-символьное регулярное выражение Perl
/^(.?|(.)(?1)\2)$/
52 символа в C, с оговоркой, что до половины строки будет перезаписано:
p(char*s){return!*s||!(s[strlen(s)-1]-=*s)&&p(++s);}
Без библиотечных вызовов это 64 символа:
p(char*s){char*e=s;while(*e)++e;return! *s||!(*--e-=*s)&&p(++s);}
58 символов в Python, без изменения строки:
r="y" for i in range(len(s)): if(s[i]!=s[-i-1]): r="n"
Может быть, цикл for можно оптимизировать? Python для меня впервые ...
Perl (21 символ):
sub{"@_"eq reverse@_}
Эй, в вопросе не указана подпрограмма с именем !
рекурсивная версия javascript (без обратного мусора)
function p(s){l=s.length;return l<2||(s[0]==s[l-1]&&p(s.substr(1,l-2)))}
(72 символа)
или реализовать обратное внутри:
p=function(s,y){return y?(s==p(s)):s[1]?(p(s.substr(1))+s[0]):s[0]}
p("hannah",1);
(67 символов)
или без использования встроенных функций вообще ...
p=function(s,y,i){
return i?s[i]?s[i]+p(s,0,i+1):'':y?(s==p(s)):s[1]?(p(p(s,0,1))+s[0]):s[0]
}
p("hannah",1);
(92 символа)
самый короткий, который я мог придумать: (итеративно)
function p(s,l){for(c in s){if(s[c]!=s[l-1-c])s=0}return s}
p("hannah",6);// (is this cheating?)
(59 символов)
с нетерпением жду, когда вы сделаете это лучше в javascript!
(желательно без использования каких-либо встроенных функций, особенно reverse)
(не очень впечатлен ответами типа 'return s == s.reverse ()')
?adjustcolor
в основе R (grDevices
пакет), делает что-то очень как это, хотя это не могло бы быть векторизовано так же полностью как Ваш. – Ben Bolker 21 October 2012 в 22:29