Palindrom jest jakiś ciąg znaków, który jest wpisany w ten sam sposób zarówno w przód iw tył. Na przykład: „Eva, czy mogę dźgać nietoperze w jaskini?” jest palindromem (EVACANISTAB | BATSINACAVE)
W przypadku tego kodu golfowego, używając wybranego języka, określ, czy dany ciąg jest palindromem, czy nie.
Edge Cases:
- Interpunkcja nie jest wliczana do palindromii.
- Postacie kontrolne nie są liczone do palindromii.
- Białe znaki nie są wliczane do palindromii.
- Liczby są liczone do palindromii.
- Przypadek w tym wyzwaniu nie jest liczony do palindromii.
- Długość łańcuchów do oceny jest nieograniczona, z wyjątkiem tego, co narzuca Twój wybrany język.
- W tym wyzwaniu ogranicz się do zestawu znaków ASCII.
Wymagania techniczne:
- Potrzebne są tylko ciała metod; dodatkowe rzeczy, takie jak podpisy metod, deklaracje struktury danych itp. nie liczą się do wymogu zwycięstwa.
- Kod musi się kompilować lub interpretować bez błędów i wyjątków czasu kompilacji.
- Kod nie może generować żadnych nieobsługiwanych wyjątków lub awarii. (Prawie nie trzeba dodawać. Prawie.)
- Kod musi zwracać pewną wartość wskazującą na palindrominess. Typ danych zależy od używanego języka (np. Użytkownik C # może użyć a
bool
, podczas gdy użytkownik JavaScript może użyć avar
.) - Nie możesz pisać własnego tłumacza wykonującego to zadanie jako „rodzimego”, abyś mógł „golfa” uzyskać prawie zwycięski wynik. (Mam nadzieję, że nie trzeba dodawać.)
Warunek zwycięstwa:
- Najkrótszy kod ze znaków wygrywa.
Obecny przywódca: tmartin (k, 25 znaków)
... Chcesz magiczny zielony znacznik wyboru obok swojej odpowiedzi? Pokonaj odpowiedź tego faceta!
code-golf
palindrome
decision-problem
Andrew Gray
źródło
źródło
Odpowiedzi:
K, 25
.
źródło
{x~(|)x:(_)x inter(,/).Q`a`A`n}
{#|:\_x@&x in,/.Q`a`A`n}
, gdzie 1 to prawda, a 2 to fałszPerl, 26 znaków
Ocenia wartość 1, gdy
$_
jest palindromem""
(jedną z fałszywych wartości Perla), gdy nie jest.Przykładowe użycie:
wynik:
źródło
_
w ciągu, prawda? I nie wymaga żadnych danych wejściowych, więc nie musisz używać tej-p
opcji?\W
w wyrażeniach regularnych wyklucza podkreślenie. Obawiam się, że będziesz potrzebować[^a-z\d]
w wyrażeniu regularnym. Obawiam się, że i tak mnie pokonano._|\W
zamiast[_\W]
._|\W
do\Pl
: ideone.com/0ufdaQ . Powinny być tylko litery Unicode.\Pl
nie pasuje do cyfr, więc myślę, że_|\W
to najlepsze, co możesz zrobić.Tylko C # 82 :)
Nie mogłem oprzeć się pokusie napisania programu bez płyt kotłowych w moim ulubionym języku.
Test jest dostępny tutaj: http://ideone.com/8bwz7z
źródło
GolfScript,
36 34 3130 znakówPodobny algorytm do mojego poprzedniego (Javascript) rozwiązania .
0"0:A[a{"@{>^}+/
- Zoptymalizowane przez Petera Taylora i Howarda. Moja wersja była"/9@Z"{1$<},,2%\;
. Howard podarował konkatenację funkcji, a Peter Taylor podarował XOR dla modulo-2. Jest to w zasadzie ogólna metoda porównywania, jeśli wartość jest w sekwencji zakresów.{.96>32*-}%
(11 znaków) nie jest tak naprawdę ulepszeniem w stosunku do Javascript.toUpperCase()
(14 znaków), zwłaszcza, że zniekształca niektóre dziwne znaki interpunkcyjne występującez
w tabeli ASCII (co nie ma tutaj znaczenia).zgodnie z sugestią Petera Taylora, jeśli jednak najpierw odfiltrujemy alfanumeryczne, możemy przekonwertować małe litery i cyfry, ustawiając jeden bit dla każdego znaku:
{32|}
.-1%=
wykonuje wszystkie palindromowe ciężkie podnoszenie. Jedną z rzeczy, których tak naprawdę nie lubię, jest to, ile czasu zajęło mi znalezienie sposobu na odwrócenie tablicy. Powinienem był przeczytać dokumenty. Pozostałe dwie postacie wykonują zarządzanie stosami i porównywanie.Test: http://golfscript.apphb.com/?c=IkV2YSwgY2FuIEkgc3RhYiBiYXRzIGluIGEgY2F2ZT8iCgp7IjA6QVtheyJcez59KywsMiV9LHszMnx9JS4tMSU9
Ponadto, jeśli mogę założyć, że nie występuje żaden z następujących znaków kontrolnych: (ucieczka łącza danych, sterowanie urządzeniem 1-4, potwierdzenie negatywne, synchroniczne bezczynność, koniec bloku transmisji, anulowanie, koniec medium) (wszyscy zgadzamy się, że są to wszystkie dość niejasne) lub jeśli mogę traktować je jako wielkie litery cyfr 0–9, możemy zapisać kolejne dwa znaki:
GolfScript, 28 znaków
Test: http://golfscript.apphb.com/?c=IkV2YSwgY2FuIEkgc3RhYiBiYXRzIGluIGEgY2F2ZT8iCgp7MzJ8fSV7MCIwOmF7IkB7Pl59Ky99LC4tMSU9
źródło
{"0:A["\{>}+,,2%},
+
na blokach. To fajna sztuczka.a{
do listy znaków filtru, aby uwzględnić małe litery, ale możesz wtedy wpisać tylko wielkie litery{32|}%
. Rezultat końcowy to{"0:A[a{"\{>}+,,2%},{32|}%.-1%=
0"0:A[a{"@{>^}+/
działa.JavaScript, 53 znaki:
jest wyrażeniem javascript, którego wynikiem jest prawda, jeśli
x
jest palindromem, lub fałsz, jeśli nie jest. Zakłada się, żex
jest łańcuchem. Jeśli to nie jest gwarantowane, przygotujx+="",
Oto bułka tarta: Ze względu na to, jak
reverse()
działa,zawodzi. Jednak,
jest całkowicie w porządku.
źródło
+""
rzut na ciąg,+
rzut na liczbę|0
i~~
rzut na liczbę całkowitą,!!
rzut na wartość logiczną./[^\W_]/g
R: 66
Stosowanie:
źródło
Bash:
524846 znakówPobiera to żądło, aby sprawdzić jako pierwszy parametr, i ustawia kod wyjścia na 0 dla palindromu i 1 na brak.
Przykładowy przebieg:
źródło
Python 2: 49 (bez liczenia podpisu metody)
Kompletny program z wejściem i wyjściem może być zapisany w 74 znakach.
Przykładowe użycie:
(
huge_palindrome.txt
Zawiera tę 17826 słowo palindrom)To rozwiązanie można dostosować do Pythona 3, dodając kilka znaków:
Python 3: 55
źródło
sys.stdin.read
jest w zasadzie taki sam jakraw_input
s
zmiennej. Postanowiłem podać pełną definicję, ale jak zwykle w 2013 r., Nie dołączaj podpisu metody w długościJAVA (lub najbardziej szczegółowy język w historii),
1029695 charUżycie (z nie golfowym kodem):
Skrócony za pomocą komentatora poniżej
źródło
if(s==null) return 1==0;
? Czy też Java wymusza curlies naif
wyciągach?null
dobrym nawykiem, ale nie jest praktykowany w CodeGolf. Jak mogę powiedzieć, nikt inny nie zrobił tego w tym pytaniu. Pomiń to. 2) Odstęp między argumentami poprawia czytelność, ale nie gra w golfa. Usunąć to; 3) Zamiast jawnietoLowerCase()
użyć łańcuchaequalsIgnoreCase()
później zamiastequals()
. W ten sposób musisz dostosować wyrażenie regularne, ale nadal o 1 znak krótszy. pastebin.com/s7H84fajreplaceAll("[^A-Za-z0-9]","")
=>replaceAll("\\W","")
replaceAll("\\W|_","");
usunąć_
=> 95 znakówMathematica
5453Jeden bajt zapisany dzięki CatsAreFluffy:
Dla osób z wersją 10.2 lub wcześniejszą:
Przykład
źródło
PalindromeQ
jest o 1 bajt krótszy niż#==Reverse@#&
PalindromeQ= #==Reverse@#&
J, 30 znaków
Stosowanie:
źródło
k (
50 48 4538 znaków)Pomija wszystkie błędy, zwracając wartość domyślną
0b
(false).Przykład:
edycja: ogolono jeszcze trzy znaki, unikając zmiennej pośredniej. H / T, CS. -7: Nie trzeba tłumić błędów.
źródło
Rubin:
4338 znakówPrzykładowy przebieg:
źródło
s.tr!('^A-Za-z0-9','').upcase!.reverse==s
!
metod! Zachowujesz mnie niesamowicie @Howard swoimi sztuczkami.tr
itr!
wydaje się zachowywać inaczej, gdy nie mają nic do transliteracji: pastebin.com/4YThW2qN Powodujep['757']
to awarię testu z „NoMethodError: niezdefiniowana metoda„ upcase! ” dla błędu zero: NilClass ”.s=s.upcase.tr('^A-Z0-9','');s==s.reverse
C ++,
107(błędnie policzony),100(błędnie policzony), 81using namespace std;
.Używa,
int
ponieważ jest krótszy niżchar
lubauto
.źródło
Lua, 56 lat
źródło
%W
jest coś\W
w wyrażeniu regularnym, wyklucza także znaki takie jak podkreślenie. To jest niepożądane.%w
nie obejmuje_
(%W
oczywiście obejmuje to, więc)s=s:lower():gsub('%W','')return s:reverse()==s
46 znakówfunction(s)
Python 3/2 59 znaków:
źródło
Haskell, 43
Przy użyciu standardowych bibliotek
Control.Monad
,Control.Monad.Instances
orazData.Char
:źródło
import Data.Char
import Control.Monad
ap(==)reverse.map toLower.filter isAlphaNum
nie robi to z dodawaniem spacjami lub takie, przepraszam, nie jestem zbyt chętnie z Haskell :)Control.Monad.Instances
również. (Używam instancji monada czytelnikowiap
, ale to wystąpienie nie jest eksportowana przezControl.Monad
.)PHP 60 znaków.
Najpierw spróbuj na codegolf.
Przykład:
źródło
echo($x=preg_replace('/\W/','',strtolower($c)))==strrev($x);
.Python 2 64 Charecters:
źródło
77
wersję postaci. Nie mam pojęcia, dlaczego abhiram opublikował wersję bez golfa.re.findall('[a-z0-9]+',input.lower())
znaki z części 3 są krótsze.Haskell 48
używane w ten sposób:
źródło
Smalltalk , Squeak / Pharo o smaku
116 znaków przy użyciu tradycyjnego formatowania z zakładkami
Dodajesz dwie metody do ciągu:
Możemy oczywiście wyeliminować niektóre spacje lub użyć krótszych nazw metod, ale nie zdradzajmy ducha Smalltalk.
Co więcej, będzie to obsługiwać francuskie palindromy, jak w http://fr.wikipedia.org/wiki/Liste_de_palindromes_fran%C3%A7ais , niewiele odpowiedzi na tej stronie może.
źródło
Python 3 (51 znaków)
i może być Python 2
oparty na rozwiązaniu abhiram (z bardziej agresywnym golfem)
można skrócić do 46 znaków, używając RE '\ w'
i wariant z ekstremalnie skróconym korpusem funkcyjnym (27 znaków)
źródło
Windows PowerShell,
564745 znakówZaktualizowano (patrz komentarze) i można usunąć nawiasy kwadratowe wokół wyrażenia regularnego:
Oryginał (56)
Oryginał bez golfa:
źródło
($s=$s-replace'[\W]')-eq(-join$s[$s.length..0])
($s=$s-replace'\W')-eq-join$s[$s.length..0]
.C ++, 74 bajty
Ten kod jest naprawdę bardzo elegancki i łatwy do zrozumienia (gdy jest poprawnie sformatowany). Nie sądzę, że można skrócić C ++ i nie używa on żadnych standardowych funkcji bibliotecznych.
Przykładowe użycie:
Ładnie sformatowana wersja:
źródło
error: ISO C++ forbids declaration of ‘p’ with no type
twoja funkcja powinna mieć typ zwracany.while(*++e);
zamiastwhile(*e)++e;
. Ale jak wspomniał Tytus, ta odpowiedź jest nieprawidłowa.PHP,
26 84 80 78 6263 bajtypobiera dane wejściowe z argumentu pierwszego wiersza poleceń; drukuje
1
dla prawdy, pusty ciąg dla fałszu.I18n jest małym rozszerzeniem, ponieważ nie ma wielobajtowej alternatywy dla
strrev
(110 bajtów; uruchom z-r
):utf8_strrev rażąco skradziony z podręcznika PHP . Możesz także rzucić okiem na ten post na blogu .
źródło
-R
spowodowałby problemy z łamaniem linii w łańcuchu do przetestowania, prawda? Ze specyfikacji „-R <kod> Uruchom PHP <kod> dla każdej linii wejściowej”. Ponadto<?=strrev($s=strtolower(preg_replace("#\W#","",$argn)))==$s;
byłby krótszy.$argn
bez niego-R
.$argv[1]="O Genie, der Herr ehre dein Ego!"; # :D
Ruby, 48
Całkiem proste i pospiesznie wykonane, więc nie grałem zbyt dużo w golfa. Będę grał w golfa później.
źródło
Pylongolf2 , 24 bajty
c
pobiera dane wejściowe,╨2
aby przekonwertować na małe litery.Następnie wypycham wyrażenie regularne na stos i używam
-
do usunięcia wszystkich znaków niealfabetycznych z danych wejściowych._
powiela dane wejściowe.╨1
odwraca go, a=
następnie porównuje.~
drukuje stos na końcu, który drukuje albotrue
albofalse
.źródło
PowerShell,
194190 bajtówRekurencyjna implementacja pokazująca, jak nienazwany blok skryptowy PowerShell może się nazywać.
bez golfa:
testy:
źródło
[^a-z0-9]
?05AB1E , 4 bajty (niekonkurujące)
Nie konkuruje , ponieważ język jest późniejszy niż wyzwanie. Kod:
Wyjaśnienie:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online! .
źródło
Galaretka, 10 znaków (niekonkurujących)
Zwraca 1 jeśli prawda, 0 jeśli fałsz
Wypróbuj online!
źródło
fØBŒlŒḂ
:f
filtr do utrzymaniaØB
zestawu [a-zA-0-9] iŒl
nawróconego na małe litery, a następnieŒḂ
testu jeśli palindrom.