Палиндром Гольф

Если вы используете Eclipse, вы можете предупредить вас об этих утверждениях:

Java->Compiler->Errors/Warnings [/g0]

29
задан 5 revs, 5 users 100% 18 July 2009 в 01:51
поделиться

44 ответа

7 символов в J: Не уверенный, если это - лучший способ, я несколько плохо знаком с J:)

p=:-:|.

объяснение: |. инвертирует вход.-: выдерживает сравнение. операнды неявны.

p 'radar'
1

p 'moose'
0
49
ответ дан Jimmy 18 July 2009 в 01:51
поделиться
  • 1
    да, например, этот CSS: div.checkRadioContainer > маркировка > input:checked + я + промежуток {цвет фона: серебро;} – Beej 24 January 2017 в 17:22

Сценарий оболочки (sed + tac + TR):

test "`echo $1|sed -e 's/\(.\)/\1\n/g'|tac|tr -d '\n'`" == "$1"
0
ответ дан JesperE 18 July 2009 в 01:51
поделиться
  • 1
    " Обратите внимание, что эта опция удерживается от использования и будет удалена в будущем " – everyman 13 May 2017 в 07:12

Java:

boolean y(StringBuffer x){return x.equals(x.reverse());}

Вышеупомянутое не работает, ой!

boolean y(StringBuffer x){return x.toString().equals(x.reverse().toString()); }

Ew.

0
ответ дан 2 revs 18 July 2009 в 01:51
поделиться
  • 1
    @luizMello: человек Спасибо, It' s работают на меня. – Hitesh Dhamshaniya 31 October 2017 в 05:15

Определенно не самое маленькое, но я все еще хотел добавить запись:

sub p{return @_==reverse split//;}

ржавый tho Моего perl и это не тестируются.

0
ответ дан mstrobl 18 July 2009 в 01:51
поделиться
  • 1
    Да @everyman, но на данный момент it' s опция мы должны обработать это. – luizMello 13 May 2017 в 12:21

Java, не используя реверс:

boolean p(String s){int i=0,l=s.length();while(i<l){if(s.charAt(i++)!=s.charAt(--l))l=-1;}return l>=0;
0
ответ дан 2 revs 18 July 2009 в 01:51
поделиться

Groovy 17B:

p={it==it[-1..0]}

Оборотная сторона - то, что это не работает со строкой emptry.

Вообще-то, если задуматься, выдавая исключение для пустой строки разумен, так как Вы не можете сказать, не является ли ничто палиндромом или нет.

2
ответ дан 2 revs 18 July 2009 в 01:51
поделиться
  • 1
    Это работает на меня, и нужно добавить в build.gradle из модуля приложения не Ваш модуль lib, если Ваш annotationProcessor вставляет build.gradle модуль lib. – wqycsu 19 June 2019 в 08:48

Стандартный ML (34 символа и скучный):

fun p s=s=implode(rev(explode(s)))
0
ответ дан bk1e 18 July 2009 в 01:51
поделиться

C, никакие библиотеки, 70 символов:

p(char*a){char*b=a-1;while(*++b);while(a<b&&*a++==*--b);return!(a<b);}

Как один из комментариев к другому упомянутому решению C, прототипы являются абсолютно дополнительными в C, int принят везде, тип пошел бы, но не упоминается. Никто никогда не программировал в предварительном ANSI C?

Редактирование: короче и пустые строки дескрипторов.

0
ответ дан 3 revs 18 July 2009 в 01:51
поделиться

JavaScript: 55 символов

p=function(x){return (x==x.split('').reverse().join())}

Вышеупомянутое не будет работать, потому что необходимо звонить join с ""

JavaScript: 55 символов

function p(s){return s==s.split("").reverse().join("")}
0
ответ дан 2 revs, 2 users 64% 18 July 2009 в 01:51
поделиться
  • 1
    Эта опция удерживается от использования и будет удалена в будущем. – Wilhelm Sorban 27 August 2018 в 19:53

Не используя библиотечных функций (потому что необходимо действительно добавить в эти #include стоимость также), вот версия C++ в 96:

int p(char*a,char*b=0,char*c=0){return c?b<a||p(a+1,--b,c)&&*a==*b:b&&*b?p(a,b+1):p(a,b?b:a,b);}
2
ответ дан 2 revs, 2 users 73% 18 July 2009 в 01:51
поделиться

C, 68 символов, нет освобождает:

p(char *s){char *e=s;while(*++e);for(;*s==*--e&&s++<e;);return s>e;}
0
ответ дан Mike M 18 July 2009 в 01:51
поделиться
  • 1
    Это будет работать над словесными символами, но не utf 8? Как ç Еџ Дџ ü ö – user3304007 27 August 2017 в 10:46

Clojure с помощью 37 символов:

user=> (defn p[s](=(seq s)(reverse(seq s))))
#'user/p
user=> (p "radar")
true
user=> (p "moose")
false
2
ответ дан Andrew Baine 18 July 2009 в 01:51
поделиться

Отрывок Java Josh's выше возвратит true каждый раз.

-1
ответ дан John Claus 18 July 2009 в 01:51
поделиться
  • 1
    Стоящий указания, что в отличие от всех вышеупомянутых ответов этот на самом деле имеет дело с " нечто & bar" как этот " foo-bar" и не как этот " нечто - bar". короткий, простой и делает прекрасное задание! – radu.luchian 27 August 2014 в 12:31

CFScript, 39 символов:

function y(x){return(x is reverse(x));}

я никогда не был очень хорош в гольфе.

0
ответ дан Dave DuPlantis 18 July 2009 в 01:51
поделиться
  • 1
    Это - неполный ответ. Как обозначено Joel, что связывает два? Как это решает проблему? – cale_b 20 October 2012 в 14:47

Рискуя тем, чтобы спуститься голоса, большинство все они просто называют реверс команды каким-то, который скрывает всю реальную логику программирования.

интересно, что самый короткий ручной способ сделать это находится на каждом из этих языков.

18
ответ дан Hugoware 18 July 2009 в 01:51
поделиться
  • 1
    Спасибо @glennjackman, которое работало! и дополняя Ваш комментарий, я использую -r так sed -r "s'[[:blank:]]+','g" – Aquarius Power 6 July 2014 в 06:11

С операторами C# и LINQ:

public bool IsPalindrome(string s)
{
    return s.Reverse().SequenceEqual(s);
}

, Если Вы рассматриваете Реверс как обман, можно сделать всю вещь с сокращением:

public bool IsPalindrome(string s)
{
    return s.Aggregate(new StringBuilder(),
                       (sb, c) => sb.Insert(0, c),
                       (sb) => sb.ToString() == s);
}
12
ответ дан 2 revs, 2 users 70% 18 July 2009 в 01:51
поделиться
  • 1
    OSX 10.10.5 : Я хотел бы \s+ работать: sed -E 's/\s+/,/g' orig.txt > modified.txt, но это doesn' t. И даже sed 's/[\t ]+/,/g' orig.txt > modified.txt сбои для соответствия вкладкам. Единственные sed управляют, чтобы работал на меня, был: sed -E 's/[[:space:]]+/,/g' orig.txt > modified.txt – 7stud 17 January 2017 в 19:07

Perl (27 символов):

sub p{$_[0]eq reverse$_[0]}

Ruby (24 символа):

def p(a)a==a.reverse end
10
ответ дан 7 revs, 2 users 79% 18 July 2009 в 01:51
поделиться
  • 1
    Я принимаю заключительный 1 после того, как заключительная изогнутая фигурная скобка является всегда истинным шаблоном, который печатает строку? I' d идут с более читаемым {$1=$1; print}. – tzot 20 April 2010 в 01:20

73 чистых, читаемые, символы, записанные в мире java

boolean p(String s){return s.equals(""+new StringBuffer(s).reverse());}

:)

9
ответ дан 3 revs 18 July 2009 в 01:51
поделиться
  • 1
    да. awk идиома для истинного условия, которое значение по умолчанию печатает к stdout. – ghostdog74 20 April 2010 в 01:59

Моя попытка в C (70 символов):

P(char*s){char*e=s+strlen(s)-1;while(s<e&&*s==*e)s++,e--;return s>=e;}

[Редактирование] Теперь на самом деле работание
[Редактирование 2] Уменьшенный от 74 до 70 при помощи международного возврата по умолчанию

В ответ на некоторые комментарии: я не уверен, рассчитывает ли то злоупотребление препроцессора - Вы могли бы просто определить все это на командной строке и сделать функцию одним символом.

1
ответ дан 4 revs, 2 users 94% 18 July 2009 в 01:51
поделиться
  • 1
    есть ли любой шанс, как разработать: прежде и маркировка поэтому, когда текст маркировки переполняется к следующей строке, это горизонтально выровненное 1-й строки текста? – Srneczek 26 June 2016 в 17:21

24 символа в Perl.

sub p{$_[0]eq+reverse@_}
2
ответ дан 2 revs 18 July 2009 в 01:51
поделиться
  • 1
    Я don' t знают причину, однако, только этот метод с помощью " tr" работы для моего случая. И sed и awk не удалось иметь дело с пробелами в моем файле, который был сгенерирован программой Java. – Leo5188 3 November 2011 в 02:13

Бессмысленная версия Haskell (15 символов, хотя действительно не работает, если Вы не включаете Управление. Стрелка и Управление. Монада и игнорирует ограничение мономорфизма):

p=ap(==)reverse
6
ответ дан Steven Dee 18 July 2009 в 01:51
поделиться
  • 1
    Да, я отредактировал свой ответ в то время как Вы где, добавив Ваш комментарий, для высказывания о-i (даже при том, что I' d рекомендуют не использовать его, сохранить резервное копирование файла - который может всегда быть полезным); didn' t думают о sed myfile.txt, хотя; положительная сторона, Спасибо! – Pascal MARTIN 13 August 2009 в 10:56

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('')}
5
ответ дан PhiLho 18 July 2009 в 01:51
поделиться
  • 1
    Я сказал бы " для 50% visibility". как пример, возможно, было лучше не использовать 50% так, чтобы пользователь знал сразу же, что означает альфа параметра. – Diego F Medina 1 May 2018 в 10:44
(equal p (reverse p))

шепелявость. 18 символов.

хорошо, это - особый случай. Это работало бы, если введено непосредственно в интерпретатор шепелявости, и p был уже определен.

иначе, это было бы необходимо:

(defun g () (equal p (reverse p)))

28 символов.

5
ответ дан 2 revs 18 July 2009 в 01:51
поделиться
  • 1
    Потрясающий один TR ' ' ' '... это работает на меня спасибо – Swap-IOS-Android 21 March 2014 в 10:47

Haskell, 15 символы:

p=ap(==)reverse
[еще 113] читаемая версия, 16 символы:

p x=x==reverse x
29
ответ дан 3 revs 18 July 2009 в 01:51
поделиться
  • 1
    isn' t sed ориентированный на строку инструмент? Если так, не должно иметь значения, что \n включен в [: пространство:] – glenn jackman 13 August 2009 в 17:31

Другая версия Python, которая скорее короче (21 символ):

R=lambda s:s==s[::-1]
28
ответ дан mhawke 18 July 2009 в 01:51
поделиться
  • 1
    GNU sed требует этого синтаксиса: sed ' s / [[:space:]] \+/,/g' имя файла – glenn jackman 13 August 2009 в 17:32

Простая реализация в C использование стандартных библиотечных функций, вдохновленных strlen в другом ответе C.

Количество символов: 57

p(char*s){char*r=strdup(s);strrev(r);return strcmp(r,s);}

Признание: я - плохой парень, не освобождая r здесь. Моя текущая попытка того, чтобы быть хорошим:

p(char*s){char*r=strdup(s);s[0]=strcmp(strrev(r),s);free(r);return s[0];}

приносит его к 73 символам; я думаю о любых способах сделать это короче.

2
ответ дан sundar 18 July 2009 в 01:51
поделиться
  • 1
    @DiegoFMedina That' s на самом деле не плохая идея, спасибо, я изменю ASAP. – plannapus 1 May 2018 в 10:50

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
3
ответ дан 6 revs, 2 users 84% 18 July 2009 в 01:51
поделиться
  • 1
    Gah! Я просто встретился с этой ошибкой в сборке CircleCI. По-видимому, их изображение докера circleci/openjdk:8-jdk только что начало использовать эту конкретную версию патча Java. Решение в этом ответе работало как очарование. – Søren Boisen 30 October 2018 в 18:47

Язык Common LISP, версия закорачивать-и-обманывать (23 символа):

#L(equal !1(reverse !1))

#L является символом макроса читателя, реализованным SHARPL-ЧИТАТЕЛЕМ в выполнить итерации пакете. Это в основном эквивалентно (лямбда (! 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)))))))

Снова, это использует, выполняют итерации, который является в основном более чистой версией встроенного средства ЦИКЛА, таким образом, я склонен рассматривать его как являющийся на базовом языке.

3
ответ дан mathrick 18 July 2009 в 01:51
поделиться
  • 1
    Да, я могу подтвердить, что решения решают проблему, но какова проблема негласно? - Ночное основывается на нашей системе CI, были внезапно красными без любых изменений кода. Действительно ли это - проблема с Начальной загрузкой Spring? – agassner 29 October 2018 в 16:47

Разве использование не является обратной функцией в Вашем виде языка обмана немного? Я имею в виду, смотрение на решение 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
4
ответ дан 3 revs, 2 users 92% 18 July 2009 в 01:51
поделиться
  • 1
    Привет, Sacha! Извините к " hijack" ответ:-). У меня есть быстрый вопрос: есть ли путь в semPlot и/или qgraph [превосходные пакеты, между прочим!] к маркировкам положения (т.е. нагрузка) далеко от центра кривых? Не вдоль кривых, но далеко в " perpendicular" смысл. I' d скорее не обращаются к хождению ЛАТЕКСНЫМ путем низкого уровня.Спасибо! – Aleksandr Blekh 4 November 2014 в 09:57

Вдохновленный предыдущим сообщением, 69 символов

p(char*a){char*b=a,q=0;while(*++b);while(*a)q|=*a++!=*--b;return!q;}

РЕДАКТИРОВАНИЕ: Вниз один символ:

p(char*a){char*b=a,q=0;while(*++b);while(*a)q|=*a++%*--b;return!q;}

EDIT2: 65 символов:

p(char*a){char*b=a;while(*b)b++;while(*a&&*a++==*--b);return!*a;}
3
ответ дан 4 revs 18 July 2009 в 01:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: