Dies ist ein Spiegel: |
. Ich habe gerade herausgefunden, dass man einen Spiegel in die Mitte eines Strings stecken kann, wenn der String auf sich selbst gespiegelt werden kann! Zum Beispiel die Zeichenfolge abccba
. Wenn Sie es in zwei Hälften schneiden, sind die beiden Hälften Spiegelbilder voneinander:
abc <--> cba
Wir können also einen Spiegel in die Mitte der Saite stecken, und unsere neue Saite ist abc|cba
. Manchmal kann nur ein Teil der Zeichenfolge auf sich selbst gespiegelt werden. Zum Beispiel die Zeichenfolge "mirror". Die beiden Rs werden gespiegelt, der Rest der Zeichenfolge jedoch nicht. Das ist in Ordnung, wir entfernen nur die Teile der Zeichenfolge, die sich nicht spiegeln, und wir erhalten die folgende Zeichenfolge:
r|r
Einige Zeichenfolgen können an mehreren Stellen gespiegelt werden. Zum Beispiel "Hallo Welt, xyzzyx". Ich mag es, wenn viel Text in meinem Spiegel reflektiert wird. Deshalb müssen Sie den besten Ort finden, an dem Sie meinen Spiegel platzieren können. In diesem Fall sollten Sie den längeren gespiegelten String ausgeben und wie in unserem letzten Beispiel alles andere entfernen. Diese Zeichenfolge wird:
xyz|zyx
Einige Zeichenfolgen sehen so aus, als könnten sie gespiegelt werden, können dies jedoch nicht. Wenn eine Zeichenfolge nirgendwo gespiegelt werden kann, sollten Sie nichts ausgeben.
Die Herausforderung:
Suchen Sie bei einer Zeichenfolge, die nur printable-ascii enthält, den besten Platz für meinen Spiegel. Mit anderen Worten,
Suchen Sie den größten geraden palindromischen Teilstring und geben Sie ihn mit einem Pipe-Zeichen '|' aus. mittendrin.
Die Eingabe wird 1-50 Zeichen lang sein.
Sie können davon ausgehen, dass die Eingabe keine |
Spiegelungen oder Zeilenumbrüche enthält. Darüber hinaus sind alle druckbaren ASCII-Charaktere Freiwild. Wenn die längste gespiegelte Teilzeichenfolge zwischen zwei Teilzeichenfolgen gebunden ist, können Sie auswählen, welche ausgegeben werden soll. Für die Zeichenfolge "abba ollo" müssen Sie beispielsweise "ab | ba" oder "ol | lo" ausgeben, aber es spielt keine Rolle, welche Sie ausgeben. Bei Strings wird zwischen Groß- und Kleinschreibung unterschieden, z. B. sollte "ABba" nicht "AB | ba" ausgeben, sondern den leeren String.
Beispiel IO:
"Hello World" --> "l|l"
"Programming Puzzles and Code-Golf" --> Either "m|m" or "z|z"
"abcba" --> ""
"Hulluh" --> "ul|lu"
"abcdefggfedcba" --> "abcdefg|gfedcba"
"abcdefggfabc" --> "fg|gf"
"AbbA" --> "Ab|bA"
"This input is a lot like the last one, but with more characters that don't change the output. AbbA" --> "Ab|bA"
Wie üblich ist dies Codegolf, daher gelten Standardlücken, und die kürzeste Antwort in Bytes gewinnt!
quelle
Antworten:
Pyth -
19171513 BytesVielen Dank an @FryAmTheEggman, der mir zwei Bytes gespart hat.
ARRGH der Sonderfall für keine Antwort.Gelöst das!Test Suite .
quelle
:Q)
= Bignose05AB1E ,
191714 BytesCode:
Erläuterung:
Verwendet die CP-1252- Codierung. Probieren Sie es online! .
quelle
Python 2,
10297 BytesEher langsam und ineffizient ... Überprüfen Sie die kleineren Testfälle auf Ideone .
quelle
JavaScript,
100 bis99 Bytesoder
quelle
eval
?eval
zu vermeidenreturn
for
ist kein Ausdruck, daher sind normalerweise geschweifte Klammern erforderlich. areturn
Lua, 133 Bytes
Überprüfen Sie alle Testfälle auf Ideone.com .
quelle
t==t:reverse()
, um ein Byte zu speichern :)Netzhaut , 66 Bytes
Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
Probieren Sie es online! (In der ersten Zeile können mehrere durch Zeilenvorschub getrennte Testfälle gleichzeitig getestet werden.)
Hmmm, viel länger als ich möchte ...
quelle
JavaScript (ES6), 91
Weniger golfen
Prüfung
quelle
Perl 5,
10510098 + 1 =10610199 BytesIch wollte rekursiven Regexen nur einen Versuch geben. Benötigt die
-p
Option. Edit: Gespeichert (durchgestrichen 4) 7 Bytes dank @ msh210. (Das fehlende Byte ist auf eine Speicherung zurückzuführen, die durch die letzte Speicherung von @ msh210 ersetzt wurde.)quelle
@_=(@_,$1)
sein kannpush@_,$1
. (2) Lassen Sie die Zeilenumbrüche und das Finale weg;
. (3) Ich vermute, es gibt eine kürzere Sortierbedingung, die Sie verwenden können (wenn nichts anderes als mindestens --- vielleicht --- Ersatz-
für<=>
)-
und es hat nicht funktioniert (benötigt wahrscheinlich Parens für den Vorrang, der die Speicherung besiegt).y...c>>1
odery...c/2
stattlength>>1
. (Ungetestet)Python 2, 91 Bytes
Ersetzen Sie
\x7f
mit dem tatsächlichen Zeichen DEL, das ASCII 127 ist (Gutschrift an Dennis).Dies folgt einer ähnlichen Strategie wie Dennis 'Antwort : Verwenden
max
und rekursives Verzweigen, um das längste Palindromintervall zu finden. Stattdessen findet es die linke Hälfte und prüft, ob die entsprechende gespiegelte rechte Hälfte mit einem selbst erstellten Startsymbol direkt danach kommt .Die Funktion errät, ob sich das erste Zeichen in der gespiegelten linken Hälfte befindet. Wenn nicht, wird es einfach fallen gelassen und der Rest wird wiederholt. Wenn dies der Fall ist, wird es dem Stapel
p
umgekehrter Zeichen hinzugefügt . Wenn die Zeichenfolge jemals mit dem Stapel beginnt, wird die Spiegelzeichenfolge generiert und als ein möglichst langer Spiegel betrachtet. Um dies|
als Ausgabe zu vermeiden , werden nur nicht leere Stapel berücksichtigt.quelle
Gelee , 17 Bytes
Probieren Sie es online!
Geschehen mit Hilfe von Mr. Xcoder und DJMcMayhem im Chat erledigt
Wie es funktioniert
quelle
Haskell,
126111 Bytesquelle
TSQL
227223 BytesIch habe die Länge auf maximal 99 Bytes fest codiert, dies sparte Bytes, machte es aber langsamer. Es hat immer noch eine anständige Leistung.
Golf gespielt:
Ungolfed:
Geige
quelle
Python 2, 149 Bytes
Probieren Sie es online aus
Dieses Programm findet die erste Hälfte des größten palindromischen Teilstrings mit gerader Länge und gibt diesen String aus, gefolgt von einem
|
, gefolgt von diesem String in umgekehrter Reihenfolge. Wenn es keine geeignete Zeichenfolge gibt,t
wird die leere Zeichenfolge verwendet und als leere Zeichenfolge'|'*(L(t)>0)
ausgewertet.quelle
Java 8,
294283232 BytesErläuterung:
Probieren Sie es hier aus.
quelle