Ein Palindrom ist eine Zeichenfolge, die vorwärts und rückwärts gleich geschrieben wird. Zum Beispiel: "Eva, kann ich Fledermäuse in eine Höhle stechen?" ist ein Palindrom (EVACANISTAB | BATSINACAVE)
Bestimmen Sie für diesen Code Golf in der Sprache Ihrer Wahl, ob eine bestimmte Zeichenfolge ein Palindrom ist oder nicht.
Edge Cases:
- Interpunktion wird nicht zur Palindromie gezählt.
- Steuerzeichen werden nicht zur Palindromie gezählt.
- Leerzeichen werden nicht zur Palindromie gezählt.
- Zahlen werden zur Palindromie gezählt.
- Der Fall in dieser Herausforderung wird nicht auf die Palindromie angerechnet.
- Die Länge der auszuwertenden Zeichenfolgen ist unbegrenzt, es sei denn, die Sprache Ihrer Wahl schreibt dies vor.
- Beschränken Sie sich für diese Herausforderung auf den ASCII-Zeichensatz.
Technische Voraussetzungen:
- Es werden nur Methodenkörper benötigt. Zusätzliche Dinge wie Methodensignaturen, Datenstrukturdeklarationen usw. zählen nicht zur Siegbedingung.
- Code muss ohne Fehler oder Ausnahmen zur Kompilierungszeit kompiliert oder interpretiert werden.
- Code darf keine unbehandelten Ausnahmen oder Abstürze auslösen. (Fast unnötig zu sagen. Fast.)
- Der Code muss einen Wert zurückgeben, der auf Palindromie hinweist. Der Datentyp hängt von der Sprache ab, die Sie verwenden (z. B. könnte ein C # -Benutzer a verwenden
bool
, während ein JavaScript-Benutzer a verwenden könntevar
.) - Möglicherweise schreiben Sie keinen eigenen Dolmetscher, der diese Aufgabe als "native" Fähigkeit ausführt, sodass Sie eine fast gewinnbringende Punktzahl "golfen" können. (Hoffentlich unnötig zu sagen.)
Siegbedingung:
- Der kürzeste Code in Zeichen gewinnt.
Aktueller Anführer: tmartin (k, 25 Zeichen)
... Möchten Sie das magische grüne Häkchen bei Ihrer Antwort sehen? Schlage die Antwort dieses Typen!
code-golf
palindrome
decision-problem
Andrew Gray
quelle
quelle
Antworten:
K 25
.
quelle
{x~(|)x:(_)x inter(,/).Q`a`A`n}
{#|:\_x@&x in,/.Q`a`A`n}
, wobei 1 wahr und 2 falsch istPerl, 26 char
Wird zu 1 ausgewertet, wenn
$_
es sich um ein Palindrom handelt""
(einer der falschen Werte von Perl), wenn dies nicht der Fall ist.Beispielnutzung:
Ausgabe:
quelle
_
in der Zeichenfolge gibt, nicht wahr? Und es sind keine Eingaben erforderlich. Müssen Sie die-p
Option nicht verwenden?\W
In regulären Ausdrücken wird der Unterstrich ausgeschlossen. Ich fürchte, Sie werden[^a-z\d]
in Ihrer Regex brauchen . Ich fürchte, ich bin sowieso geschlagen._|\W
anstelle von[_\W]
._|\W
auf\Pl
: ideone.com/0ufdaQ . Sollte nur die Unicode-Buchstaben sein.\Pl
stimmen die Ziffern nicht überein. Ich denke,_|\W
das Beste, was Sie tun können.Nur C # 82 :)
Ich konnte der Versuchung nicht widerstehen, ein Programm ohne Boilerplate in meiner Lieblingssprache zu schreiben.
Ein Test ist hier verfügbar: http://ideone.com/8bwz7z
quelle
GolfScript,
36 34 3130 ZeichenÄhnlicher Algorithmus zu meiner vorherigen (Javascript) Lösung .
0"0:A[a{"@{>^}+/
- Optimiert von Peter Taylor und Howard. Meine Version war"/9@Z"{1$<},,2%\;
. Howard spendete Verkettung von Funktionen und Peter Taylor spendete XOR für Modulo-2. Dies ist im Grunde eine generische Methode zum Vergleichen, wenn sich der Wert in einer Folge von Bereichen befindet.{.96>32*-}%
(11 Zeichen) ist keine wirkliche Verbesserung gegenüber Javascript.toUpperCase()
(14 Zeichen), zumal es einige seltsame Satzzeichenz
in der ASCII-Tabelle (die hier keine Rolle spielen) verstümmelt.Wenn wir jedoch zuerst die alphanumerischen Zeichen herausfiltern, können wir, wie von Peter Taylor vorgeschlagen, in Kleinbuchstaben und Ziffern konvertieren, indem wir in jedem Zeichen ein Bit setzen:
{32|}
.-1%=
macht das ganze palindromische schwere Heben. Ein Teil, den ich nicht besonders mag, ist, wie lange ich gebraucht habe, um herauszufinden, wie ich ein Array umkehren kann. Ich hätte die Dokumentation lesen sollen. Die anderen beiden Zeichen führen die Stapelverwaltung und den Vergleich durch.Test: http://golfscript.apphb.com/?c=IkV2YSwgY2FuIEkgc3RhYiBiYXRzIGluIGEgY2F2ZT8iCgp7IjA6QVtheyJcez59KywsMiV9LHszMnx9JS4tMSU9
Wenn ich davon ausgehen kann, dass keines der folgenden Steuerzeichen vorhanden ist: (Escape-Datenverbindung, Gerätesteuerung 1-4, negative Bestätigung, synchroner Leerlauf, Ende des Übertragungsblocks, Abbrechen, Ende des Mediums) (wir sind uns alle einig, dass dies der Fall ist alle ziemlich dunkel) oder wenn ich sie als Großbuchstaben der Ziffern 0-9 behandeln kann, können wir zwei weitere Zeichen speichern:
GolfScript, 28 Zeichen
Test: http://golfscript.apphb.com/?c=IkV2YSwgY2FuIEkgc3RhYiBiYXRzIGluIGEgY2F2ZT8iCgp7MzJ8fSV7MCIwOmF7IkB7Pl59Ky99LC4tMSU9
quelle
{"0:A["\{>}+,,2%},
+
auf Blöcken falsch verstanden . Das ist ein cooler Trick.a{
des Filters hinzufügen , um die Kleinbuchstaben einzuschließen, aber Sie können dann mit nur in Großbuchstaben schreiben{32|}%
. Das Endergebnis ist{"0:A[a{"\{>}+,,2%},{32|}%.-1%=
0"0:A[a{"@{>^}+/
wie der Job.Javascript, 53 Zeichen:
ist ein Javascript-Ausdruck, der als wahr ausgewertet wird, wenn
x
es sich um ein Palindrom handelt, und als falsch, wenn dies nicht der Fall ist. Es wird davon ausgegangen, dassx
es sich um eine Zeichenfolge handelt. Wenn dies nicht garantiert ist, müssen Sie voranstellenx+="",
Hier ist ein Breadcrumb: Aufgrund der Funktionsweise
reverse()
,scheitert. Jedoch,
ist vollkommen in Ordnung.
quelle
+""
Wirft in einen String,+
wirft in eine Zahl|0
und~~
wirft in eine Ganzzahl,!!
wirft in einen Booleschen Wert./[^\W_]/g
R: 66
Verwendungszweck:
quelle
Bash:
524846 ZeichenDies nimmt die Stichprobe als ersten Parameter und setzt den Exit-Code auf 0 für Palindrome und 1 für nicht.
Probelauf:
quelle
Python 2: 49 (ohne die Methodensignatur zu zählen)
Ein komplettes Programm mit Ein- und Ausgabe kann in 74 Zeichen geschrieben werden.
Anwendungsbeispiel:
(
huge_palindrome.txt
enthält dieses 17.826 Wort Palindrom)Diese Lösung kann an Python 3 angepasst werden und einige Zeichen hinzufügen:
Python 3: 55
quelle
sys.stdin.read
ist im Grunde das gleiche wieraw_input
s
Variablen haben. Ich habe mich für die vollständige Definition entschieden, aber, wie im Jahr 2013 üblich, die Methodensignatur nicht in die Länge aufgenommenJAVA (oder die ausführlichste Sprache aller Zeiten),
1029695 ZeichenVerwendung (mit ungolfed Code):
Mit Hilfe des Kommentators unten gekürzt
quelle
if(s==null) return 1==0;
:? Oder erzwingt Java Curlies aufif
Anweisungen?null
eine gute Gewohnheit ist, aber nicht in CodeGolf geübt. Wie ich sehen kann, hat es in dieser Frage niemand anders getan. Überspring es. 2) Der Abstand zwischen den Argumenten erleichtert die Lesbarkeit, nicht jedoch das Golfen. Entfernen Sie es; 3) Anstelle von explizit wirdtoLowerCase()
der StringequalsIgnoreCase()
später anstelle von verwendetequals()
. Auf diese Weise müssen Sie den regulären Ausdruck anpassen, aber immer noch 1 Zeichen kürzer. pastebin.com/s7H84fajreplaceAll("[^A-Za-z0-9]","")
=>replaceAll("\\W","")
replaceAll("\\W|_","");
zu entfernen_
=> 95 ZeichenMathematica
5453Ein Byte gespart dank CatsAreFluffy:
Für diejenigen mit Version 10.2 oder früher:
Beispiel
quelle
PalindromeQ
ist 1 Byte kürzer als#==Reverse@#&
PalindromeQ= #==Reverse@#&
J 30 Zeichen
Verwendungszweck:
quelle
k (
50 48 4538 Zeichen)Unterdrückt alle Fehler und gibt den Standardwert
0b
(false) zurück.Beispiel:
bearbeiten: drei weitere Zeichen durch Vermeiden von Zwischenvariablen rasiert. H / T, CS. -7: Keine Notwendigkeit, Fehler zu unterdrücken.
quelle
Ruby:
4338 ZeichenProbelauf:
quelle
s.tr!('^A-Za-z0-9','').upcase!.reverse==s
!
Methoden gekümmert! Sie halten mich @Howard mit Ihren Tricks erstaunlich.tr
undtr!
scheint anders zu verhalten , wenn sie nichts zu transkribieren haben: pastebin.com/4YThW2qN , dass die machenp['757']
Test mit „NoMethodError zum Absturz zu bringen: nicht definierte Methode` upcase‘ für nil: NilClass ”Fehler.s=s.upcase.tr('^A-Z0-9','');s==s.reverse
C ++,
107(falsch gezählt),100(falsch gezählt), 81using namespace std;
.Wird verwendet,
int
weil es kürzer alschar
oder istauto
.quelle
Lua, 56
quelle
%W
es sich um etwas\W
in Regex handelt, werden auch Zeichen wie Unterstriche ausgeschlossen. Das ist unerwünscht.%w
nicht enthalten_
(%W
offensichtlich enthält es dann)s=s:lower():gsub('%W','')return s:reverse()==s
46 Zeichenfunction(s)
Python 3/2 59 Zeichen:
quelle
Haskell, 43
Mit den Standard - Bibliotheken
Control.Monad
,Control.Monad.Instances
undData.Char
:quelle
import Data.Char
import Control.Monad
ap(==)reverse.map toLower.filter isAlphaNum
Weder tut es mit dem Hinzufügen von Leerzeichen oder dergleichen, tut mir leid, ich bin nicht so begeistert von Haskell :)Control.Monad.Instances
auch. (Ich verwende die Reader-Monad-Instanz mitap
, aber diese Instanz wird nicht von exportiertControl.Monad
.)PHP 60 Zeichen.
Versuchen Sie zuerst Codegolf.
Beispiel:
quelle
echo($x=preg_replace('/\W/','',strtolower($c)))==strrev($x);
.Python 2 64-Zeichen:
quelle
77
Zeichenversion. Keine Ahnung, warum abhiram die ungolfed version gepostet hat.re.findall('[a-z0-9]+',input.lower())
Zeichen von Teil 3 kürzer werden.Haskell 48
wie folgt verwendet:
quelle
Smalltalk , Squeak / Pharo-Geschmack
116 Zeichen mit traditioneller Formatierung mit Tabulatoren
Sie fügen String zwei Methoden hinzu:
Wir könnten natürlich einige Leerzeichen entfernen oder kürzere Methodennamen verwenden, aber wir sollten den Geist von Smalltalk nicht verraten.
Darüber hinaus werden hiermit französische Palindrome behandelt, wie dies in http://fr.wikipedia.org/wiki/Liste_de_palindromes_fran%C3%A7ais der Fall ist , und es können nicht viele Antworten auf dieser Seite gefunden werden.
quelle
Python 3 (51 Zeichen)
und kann Python 2 sein
basierend auf Abhiram- Lösung (mit aggressiverem Golfen)
kann mit RE '\ w' auf 46 Zeichen gekürzt werden
und Variante mit extrem verkürztem Funktionskörper (27 Zeichen)
quelle
Windows PowerShell,
564745 ZeichenAktualisiert (siehe Kommentare) und kann die Klammern um den regulären Ausdruck entfernen:
Original (56)
Original ohne Golf:
quelle
($s=$s-replace'[\W]')-eq(-join$s[$s.length..0])
($s=$s-replace'\W')-eq-join$s[$s.length..0]
.C ++, 74 Bytes
Dieser Code ist eigentlich sehr elegant und leicht zu verstehen (wenn er richtig formatiert ist). Ich glaube nicht, dass es möglich ist, in C ++ kürzer zu werden, und es werden keine Standardbibliotheksfunktionen verwendet.
Anwendungsbeispiel:
Schön formatierte Version:
quelle
error: ISO C++ forbids declaration of ‘p’ with no type
Ihre Funktion sollte einen Rückgabetyp haben.while(*++e);
anstelle von speichernwhile(*e)++e;
. Aber wie Titus sagte, ist diese Antwort ungültig.PHP,
26 84 80 78 6263 BytesNimmt Eingaben vom ersten Befehlszeilenargument entgegen; druckt
1
für wahrheitsgemäße, leere Zeichenfolge für falsch.I18n ist ein wenig expansiv, da es keine Multibyte-Alternative für
strrev
(110 Bytes; laufe mit-r
) gibt:utf8_strrev krass aus dem PHP-Handbuch gestohlen . Vielleicht möchten Sie auch einen Blick auf diesen Blogeintrag werfen .
quelle
-R
würde Probleme mit Zeilenumbrüchen in der Zeichenkette verursachen, oder? Aus der Spezifikation "-R <code> Führe PHP <code> für jede Eingabezeile aus". Darüber hinaus<?=strrev($s=strtolower(preg_replace("#\W#","",$argn)))==$s;
wäre kürzer.$argn
ohne geht es nicht-R
.$argv[1]="O Genie, der Herr ehre dein Ego!"; # :D
Rubin, 48
Ganz einfach und hastig gemacht, also nicht zu viel golfen. Ich werde später mehr Golf spielen.
quelle
Pylongolf2 , 24 Bytes
c
Nimmt die Eingabe,╨2
um in Kleinbuchstaben umzuwandeln.Ich drücke dann einen regulären Ausdruck auf den Stapel und
-
entferne damit alle nicht alphabetischen Zeichen in der Eingabe._
dupliziert die Eingabe.╨1
kehrt es um und=
vergleicht sie dann.~
druckt den Stapel am Ende, der entwedertrue
oder drucktfalse
.quelle
PowerShell,
194190 BytesEine rekursive Implementierung, um zu zeigen, wie sich ein unbenannter PowerShell-Skriptblock selbst aufrufen kann.
ungolfed:
Tests:
quelle
[^a-z0-9]
?05AB1E , 4 Bytes (nicht konkurrierend)
Nicht konkurrierend , da die Sprache die Herausforderung datiert. Code:
Erläuterung:
Verwendet die CP-1252- Codierung. Probieren Sie es online! .
quelle
Jelly, 10 Charaktere (nicht konkurrierend)
Gibt 1 zurück, wenn wahr, 0, wenn falsch
Probieren Sie es online!
quelle
fØBŒlŒḂ
:f
Filter zu halten ,ØB
der Menge [a-zA-Z0-9] undŒl
Umrechnen in Kleinbuchstaben, dannŒḂ
testen , ob Palindrom.