Einführung
Ein palindromischer Abschluss einer Eingabezeichenfolge ist das kürzeste Palindrom, das aus der Eingabezeichenfolge konstruiert werden kann, wobei das letzte Palindrom mit der Eingabezeichenfolge beginnt.
Für diese Herausforderung werden wir einen Zwei-Wege-Palindromverschluss in Betracht ziehen, so dass
- Palindrom links Das Schließen einer Eingabezeichenfolge ist das kürzestmögliche Palindrom, das mit der Eingabezeichenfolge beginnt.
- Right Palindromic Closure einer Eingabezeichenfolge ist das kürzeste mögliche Palindrom, das mit der Eingabezeichenfolge endet.
- Der bidirektionale palindromische Abschluss einer Eingabezeichenfolge ist der kürzere Wert für den linken oder rechten palindromischen Abschluss der Eingabezeichenfolge.
Aufgabe
Ihre Aufgabe ist einfach. Geben Sie bei einer Zeichenfolge (die nur aus druckbarem ASCII, neuen Zeilen und Leerzeichen besteht) den bidirektionalen palindromischen Abschluss dieser Zeichenfolge aus. Bei Gleichstand ist entweder der linke oder der rechte palindromische Verschluss ein gültiger Ausgang.
Sie können ein Programm oder eine Funktion schreiben, Eingaben über STDIN (oder die nächstgelegene Alternative), ein Befehlszeilenargument oder ein Funktionsargument vornehmen und das Ergebnis entweder an STDOUT (oder die nächstgelegene Alternative) ausgeben oder als Zeichenfolge zurückgeben.
Sie können davon ausgehen, dass die Eingabe niemals eine leere Zeichenfolge sein wird.
Einige Beispiele:
<Input> -> <Output>
"abcdef" -> "abcdefedcba" (or "fedcbabcdef")
"abcba" -> "abcba"
"abcb" -> "abcba"
"cbca" -> "acbca"
Der erste Preis für die Idee geht an VisualMelon, die endgültige Idee mit Hilfe von Martin und Zgarb
Die Begriffe palindromischer Verschluss, links-pallindromischer Verschluss und rechts-palindromischer Verschluss wurden in dieser Arbeit zuerst verwendet und definiert .
quelle
Antworten:
Pyth,
2219Probieren Sie es online aus .
Erläuterung
Der Zwei-Wege - palindromische Verschluss entweder die Form
AX
oderXA
, woX
die Eingabezeichenfolge ist , undA
ist eine TeilzeichenfolgeX
. Ich muss eigentlich eine zusammenhängende Teilzeichenfolge seinX
, ein Präfix für die eine Form, ein Suffix für die andere Form. Aber diese Mängel interessieren mich nicht. Ein Teilstring (zusammenhängend oder nicht) ist alles, was ich in Pyth brauche.Bearbeiten
In der alten Version wurden die Zeichenfolgen nach der Länge sortiert
.olN...
. Soeben wurde erkannt, dassy
die Teilzeichenfolgen nach Länge sortiert zurückgegeben werden. Diese Palindrome sind also bereits sortiert.quelle
Clip , 40
Beispiel
Erläuterung
quelle
CJam, 30 Bytes
Ich hatte wirklich gehofft, jetzt eine Antwort von CJam zu sehen
Ich hasse diesen
{,}$
Block wirklich , aber ich bekomme eine ungeordnete Liste möglicher Palindrome aufgrund des von mir verwendeten Generierungsalgorithmus.Code Erklärung
Probieren Sie es hier online aus
quelle
{,}$
Block dort auch wirklich ! Nur ein Scherz, ich habe keine Ahnung, was irgendetwas in CJam macht.Python 2,
11511310910596 BytesKann hoffentlich weiter Golf spielen. Möglicherweise bemerkenswerte Teile:
quelle
a
.Mathematica, 96 Bytes
Es muss einen eleganteren Weg geben als diesen ...
Dies definiert eine unbenannte Funktion, die eine Zeichenfolge akzeptiert und das Ergebnis zurückgibt.
Die Grundidee ist zu
Characters
.Verwenden Sie die Mustererkennung, um die richtige Palindromie für jeden von ihnen zu finden:
Beachten Sie, dass dies keine flache Liste zurückgibt. Zum Beispiel, weil
{a,b,c}
du bekommen würdestSortieren Sie die beiden Ergebnisse nach Länge.
""<>#&@@
.quelle
abacaba
wenn der Eingang istabac
. Die richtige Antwort lautetcabac
. Ich denke, Sie sollten sie abflachen, bevor Sie nach Länge sortieren.Brachylog (2), 6 Bytes, Sprachnachstellung
Probieren Sie es online!
Wie bei Brachylog üblich, ist dies eine Funktion, kein vollständiges Programm.
Erläuterung
Soweit ich weiß (es ist nicht meine Sprache, aber es scheint unwahrscheinlich),
a
wurde Brachylog für diese Herausforderung nicht hinzugefügt, aber es ist hier sehr praktisch. Wir verwenden die Methode "Umgekehrt und behaupten, sie hat sich nicht geändert", um zu behaupten, dass der gefundene Wert ein Palindrom ist.Was den Grund für die Entstehung des kürzesten Palindroms betrifft, so wird die Auswertungsreihenfolge von Prolog (und damit auch von Brachylog) stark von der ersten ausgewerteten Sache beeinflusst. In diesem Fall handelt es sich um einen "umgekehrten" Befehl, der (wie die meisten Listenoperationen) eine Auswertungsreihenfolge festlegt, um die Größe der resultierenden Liste zu minimieren. Da dies der Größe der Ausgabe entspricht, minimiert das Programm zufällig genau das Richtige, sodass ich keine expliziten Hinweise hinzufügen musste.
quelle
a
- Für diese Herausforderung wurde kein Adfix hinzugefügt. Ich hatte kein verfügbares Symbol mit guten Mnemoniken für Präfix und Suffix, daher habe ich beide in adfix zusammengeführt, das nur bei Bedarf Indizes zum Auswählen von Präfixen oder Suffixen verwenden kann.Rubin, 76 + 2 = 78
Mit Befehlszeilen-Flags
-pl
(diel
möglicherweise nicht benötigt werden, je nachdem, wie Sie Eingaben vornehmen), führen Sie ausWenn eine Zeichenfolge 'abaa' angegeben wird, werden die Zeichenfolgen 'cbca 0 acbc' und 'acbc 0 cbca' generiert, wobei 0 das nicht druckbare Zeichen mit ASCII-Code 0 ist. Anschließend wird eine Kopie der am längsten wiederholten Zeichenfolge gelöscht, die 0 in jeder Zeichenfolge enthält. 'a' in der ersten und 'cbc' in der zweiten, um die beiden Abschlüsse zu bekommen. Es wird dann das kürzeste Ergebnis ausgegeben.
Das einzig wirklich seltsame an dem Code ist, dass er die Strings beim Sortieren verkürzt, was wir vermeiden können, weil
min_by
der Block nur einmal pro verglichenem Element ausgeführt wird (sowohl weil es sich um eine Schwartzsche Transformation handelt, als auch weil es nur zwei gibt) zu vergleichende Elemente).quelle
Python 3, 107 Bytes
Zu testen:
quelle
Haskell, 107 Bytes
Prüfung:
quelle
J,
6662 BytesRecht einfach. Die zwei Tricks, die ich benutze:
Der rechte palindromische Verschluss ist der linke palindromische Verschluss der umgekehrten Saite.
Ermitteln der Länge des Strings mit minimaler Länge und Palindromität mit dem Ausdruck min (is_palindrome / length).
Probieren Sie es hier online aus.
quelle