Ein Palindrom ist ein Wort, das sein eigenes Gegenteil ist.
Nun gibt es einige Wörter, die wie Palindrome aussehen, dies aber nicht sind. Zum Beispiel betrachtet das Wort sheesh
, sheesh
ist kein Palindrom , weil seine Rückseite ist hseehs
die anders ist, aber wenn man bedenkt , sh
ein einzelner Buchstabe sein, dann ist es umgekehrt sheesh
. Diese Art von Wort nennen wir ein Halbpalindrom.
Insbesondere ist ein Wort ein Halbpalindrom, wenn wir das Wort in eine bestimmte Anzahl von Abschnitten aufteilen können, sodass beim Umkehren der Reihenfolge der Abschnitte das ursprüngliche Wort gebildet wird. (Für sheesh
diese Chunks gilt sh e e sh
) Wir werden auch verlangen, dass kein Chunk Buchstaben aus beiden Worthälften enthält (ansonsten wäre jedes Wort ein Halbpalindrom). Beispielsweise rear
handelt es sich nicht um ein Halbpalindrom, da r ea r
es einen Block ( ea
) enthält, der Buchstaben von beiden Seiten des ursprünglichen Wortes enthält. Wir betrachten das zentrale Zeichen in einem Wort mit ungerader Länge als keine Seite des Wortes, daher muss das zentrale Zeichen bei Wörtern mit ungerader Länge immer in einem eigenen Block stehen.
Ihre Aufgabe wird es sein, eine Liste positiver Ganzzahlen zu erstellen und festzustellen, ob es sich um ein Halbpalindrom handelt. Ihr Code sollte zwei konsistente, ungleiche Werte ausgeben, einen, wenn die Eingabe ein Halbpalindrom ist, und den anderen, wenn die Eingabe ein Halbpalindrom ist. Die Byte-Sequenz Ihres Codes muss jedoch selbst ein Semi-Palindrom sein.
Antworten werden in Bytes bewertet, wobei weniger Bytes besser sind.
Testfälle
[] -> True
[1] -> True
[2,1,2] -> True
[3,4,2,2,3,4] -> True
[3,5,1,3,5] -> True
[1,2,3,1] -> False
[1,2,3,3,4,1] -> False
[11,44,1,1] -> False
[1,3,2,4,1,2,3] -> False
Programm, um mehr Testfälle zu generieren.
borrible wies darauf hin, dass diese generalisierten Smarandache-Palindromen ähnlich sind . Wenn Sie also weiterlesen möchten, ist dies ein Ausgangspunkt.
quelle
Antworten:
Retina 0,8,2 ,
8569 BytesProbieren Sie es online!Erläuterung:
Wählt den Match-Modus aus. Tatsächlich verwendet Retina für ein einzeiliges Programm standardmäßig den Übereinstimmungsmodus, aber die zweite Kopie des Codes würde immer übereinstimmen, wenn diese zusätzlichen Zeichen nicht berücksichtigt würden.
Das Spiel muss am Anfang beginnen.
Erfassen Sie eine Reihe von Zeichenfolgen. Jeder Lauf muss mit einem Komma enden.
Passen Sie optional eine Ziffernfolge und ein Komma an.
Ordnen Sie optional alle Erfassungen in umgekehrter Reihenfolge zu, und platzieren Sie sie nacheinander.
Das Spiel muss am Ende enden.
Backtrack, es sei denn, alle Captures wurden gepoppt. Es funktioniert, indem das Match immer noch am Anfang der Zeichenkette sein muss, wenn wir eine nicht gepoppte Aufnahme haben, was unmöglich ist.
quelle
Jelly ,
2723 BytesGibt 1 für Semi-Palindrome zurück, sonst 0 .
Probieren Sie es online!
Wie es funktioniert
quelle
Python 2 ,
157153147143 Bytes-4 bytes dank tsh .
Probieren Sie es online!
quelle
x==x[::-1]
,len(x)<2
um 2 * 2 Bytes zu speichern; 143 Bytes05AB1E ,
59474341 Bytes-12 Bytes dank @Emigna .
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
2ä
øøε.œ} `umgehen und 6 Bytes einsparen. Sie scheinen auch 30 unbenutzte Bytes in ...€
statt mit verwendet werdenε }
. :)05AB1E , 37 Bytes
Verwendet ungefähr dieselbe Technik wie Jonathan .
Probieren Sie es online!
Volles Programm. Empfängt eine Liste von STDIN, gibt 1 oder aus 0 an STDOUT aus.
Filtern Sie die Partitionen, die ...
Diese Bedingung: Die Längen von jedem (
€g
) werden in einer Liste gespeichert, deren Präfixe (η
) dann summiert werden (O
), wodurch wir die kumulativen Summen der Längenliste erhalten. Dann wird die oberste Hälfte des Maximums dieser Liste auf den Stapel geschoben - wobei jedoch auch die ursprüngliche Liste darauf bleibt (Z;î
) und wenn sieå
in den kumulativen Summen vorkommt ( ), dann gibt die Funktion wahrheitsgetreu zurück.Für jeden vergleiche (
Q
) a mit einem vertauschten, die separat auf den Stapel geschoben werden vonÂ
. Gibt eine Liste von 0 s und 1 s zurück.Maximal. Wenn eine wahr ist, dann 1 sonst 0 . Ausführung beenden. Alles was folgt wird komplett ignoriert.
quelle
Python 2 ,
275251205 Bytes-24 Bytes dank @KevinCruijssen
-44 Bytes dank @PostLeftGhostHunter
-2 weitere Bytes dank @KevinCruijssen
Gibt True für Semi-Palindrome zurück, andernfalls None
Probieren Sie es online!
quelle
Jelly ,
3332 Bytes-1 Danke an Erik the Outgolfer
Danke auch an Dennis für die Fehlerbehebung und die Überarbeitung eines Implementierungsdetails in Jelly.
Semi-Palindrome ergeben
1
, andere ergeben0
.Oder sehen Sie sich die Testsuite an .
Die einzigen Brocken sind die
ŒḂ
s ({3 rd und 4 th } {vs 29 th & 30 th } Byte), nur den Code zu parsen ermöglichen.Wie?
Alle Arbeiten werden von der rechten Seite ausgeführt - dem "Hauptlink":
quelle
Perl 6 ,
8779 Bytes-8 Bytes mit einigen Tricks aus Jo Kings Antwort
Probieren Sie es online!
Portierung der JavaScript-Antwort von tsh. Gibt zwei verschiedene Regex-Objekte zurück.
quelle
Ruby , 129 Bytes
Probieren Sie es online!
quelle
JavaScript (Node.js) , 139 Byte
Probieren Sie es online!
quelle
C (gcc) (X 86), 216 Bytes
Probieren Sie es online!
p(L,a,n)
Gibt 0 zurück, wenn das Array mita
der LängeL
ein Halbpalindrom ist, andernfalls 1. Da bereits alle Präfixe der Länge>n
überprüft wurden, wird das Präfix der Längen
mit dem Suffix der Länge verglichenn
.p(L,a)
ist der Einstiegspunkt.Leider ist die interessantere Lösung länger:
224 Bytes
Probieren Sie es online!
Ungolfed:
quelle
Japt , 66 Bytes
Japt Interpreter
Diese Version wurde stark verbessert und schlägt die meisten praktischen Sprachen. Funktioniert jetzt mit einem Array von Ganzzahlen, da die vorherige Methode einen Fehler aufwies.
Erläuterung:
quelle
PHP 237 Bytes
rekursive Funktion, gibt zurück
true
(für Eingaben mit weniger als zwei Elementen) oder1
für wahr,0
für falsch. Probieren Sie es online aus (enthält Aufschlüsselung).Die tatsächliche Codelänge beträgt 118 Byte. Semi-Palindrom, erstellt durch Code-Duplikation.
Für eine bessere Leistung, ersetzen
&
mit&&
und legen Sie!$x&&
vor++$i
.quelle
Scala, 252 Bytes
Probieren Sie es online!
PS. Anscheinend ist die Lösung 2-mal länger, nur um die Anforderung zu erfüllen, dass der Quellcode auch halbpalindrom ist.
PPS. Kein Code-Golf-Kandidat, sondern eine rein funktionale Lösung mit Pattern Matching:
quelle
Perl 6 , 81 Bytes
Probieren Sie es online!
Gibt den regulären Ausdruck
/../
für True und den regulären Ausdruck zurück/^(.+)(.*)$0$/
für False zurück. Funktioniert ähnlich wie die Antwort von nwellnhof , konvertiert die Liste jedoch vorher in einen String.quelle