Einführung
Für diejenigen, die es nicht wissen, ist ein Palindrom, wenn eine Zeichenfolge der Zeichenfolge in Rückwärtsrichtung entspricht (mit Ausnahme von Interpunction, Leerzeichen usw.). Ein Beispiel für ein Palindrom ist:
abcdcba
Wenn Sie dies umkehren, erhalten Sie:
abcdcba
Welches ist das gleiche. Deshalb nennen wir dies ein Palindrom. Sehen wir uns zum Palindromisieren ein Beispiel für eine Zeichenfolge an:
adbcb
Dies ist kein Palindrom. Um dies zu palindromisieren, müssen wir die umgekehrte Zeichenfolge mit der Anfangszeichenfolge rechts von der Anfangszeichenfolge zusammenführen , wobei beide Versionen intakt bleiben. Je kürzer, desto besser.
Das erste, was wir versuchen können, ist das Folgende:
adbcb
bcbda
^^ ^^
Da nicht alle Zeichen übereinstimmen, ist dies nicht die richtige Position für die umgekehrte Zeichenfolge. Wir gehen einen Schritt nach rechts:
adbcb
bcbda
^^^^
Dies stimmt auch nicht mit allen Zeichen überein. Wir gehen noch einen Schritt nach rechts:
adbcb
bcbda
Dieses Mal stimmen alle Zeichen überein . Wir können fusionieren beide String Verlassen des intakten . Das Endergebnis ist:
adbcbda
Dies ist die palindromisierte Zeichenfolge .
Die Aufgabe
Wenn eine Zeichenfolge (mit mindestens einem Zeichen) nur Kleinbuchstaben enthält (oder wenn dies besser passt, Großbuchstaben), geben Sie die palindromisierte Zeichenfolge aus .
Testfälle
Input Output
abcb abcba
hello hellolleh
bonobo bonobonob
radar radar
hex hexeh
Das ist Code-Golf , also gewinnt die Einsendung mit der geringsten Anzahl von Bytes!
quelle
obonobo
wäre das eine bessere Lösung für den Testfall.bono b o nob
ist ein ganzer Satz. Was ist der Unterschied zwischen Gott und Bono? Gott irrt nicht durch Dublin und gibt vor, Bono zu sein ;-)Antworten:
Jelly,
11 bis10 BytesProbieren Sie es online!
Wie es funktioniert
quelle
Pyth (Festschreiben von b93a874), 11 Bytes
Testsuite
Dieser Code nutzt einen Fehler in der aktuellen Version von Pyth, Commit b93a874 . Der Fehler ist, dass
_IJ+zb
analysiert wird, als wäre esq_J+zbJ+zb
, was äquivalent zu ist_I+zb+zb
, wenn es (nach der Entwurfsabsicht von Pyth) analysiert werden sollteq_J+zbJ
, was äquivalent zu ist_I+zb
. Auf diese Weise kann ich ein Byte speichern. Nachdem der Fehler behoben wurde, wird der richtige Code angezeigt.VkI_IJ+zbJB
. Ich werde diesen Code stattdessen erklären.Grundsätzlich überlagert der Code brute alle möglichen Zeichenfolgen, bis er die kürzeste Zeichenfolge findet, die zur Bildung eines Palindroms an die Eingabe angehängt werden kann, und gibt die kombinierte Zeichenfolge aus.
quelle
Python, 46 Bytes
Wenn die Zeichenfolge ein Palindrom ist, geben Sie es zurück. Andernfalls setzen Sie den ersten Buchstaben für den Rest der Zeichenfolge um das rekursive Ergebnis.
Beispiel Aufschlüsselung:
quelle
s!=s[::-1]
) verwendenHaskell, 36 Bytes
Besser lesbar:
Wenn die Zeichenfolge ein Palindrom ist, geben Sie es zurück. Andernfalls setzen Sie den ersten Buchstaben um das rekursive Ergebnis für das Ende der Zeichenfolge.
Die Zeichenfolge
s
isth:t
in der zweiten Schutzvorrichtung aufgeteilt, sodass in1>0
diesem Fall kein Füllelement erforderlich ist. Dies ist kürzer alss@(h:t)
bei der Eingabe.quelle
Pyth -
1612 Bytes4 Bytes gespart dank @FryAmTheEggman.
FGITW, viel Golfen möglich.
Test Suite .
quelle
Brachylog ,
1665 Bytes (nicht konkurrierend)Probieren Sie es online!
Als ich meine erste Antwort veröffentlichte, befand sie sich noch in der alten Implementierung in Java. Da ich in Prolog alles neu programmiert habe, funktioniert es jetzt so, wie es eigentlich sein sollte.
Erläuterung
Backpropagation bewirkt, dass der erste gültige Wert für
A
diesen Wert der kürzeste ist, den Sie mit Input verknüpfen können, um ihn zu einem Palindrom zu machen.Alternative Lösung, 5 Bytes
Dies entspricht in etwa der obigen Antwort, mit der Ausnahme, dass anstelle von "Ausgabe ist die Verkettung der Eingabe mit einer Zeichenfolge
A
" angegeben wird, dass "Ausgabe eine Zeichenfolge ist, für die die Eingabe ein Präfix der Ausgabe ist".quelle
JavaScript (ES6), 92 Byte
Berechnet und schneidet die Überlappung zwischen der ursprünglichen Zeichenfolge und ihrer Umkehrung.
quelle
Retina,
2925Probieren Sie es online!
Vielen Dank an Martin für 11 Bytes gespart!
Dadurch wird lediglich eine umgekehrte Kopie der Zeichenfolge erstellt und zusammengeführt. Das einzig ausgefallene daran ist die Umkehrmethode:,
O^#r`.\G
die im Sortiermodus ausgeführt wird. Wir sortieren die Buchstaben der zweiten Zeichenfolge (die keine Zeilenumbrüche sind und dank der nacheinander am Ende der Zeichenfolge stehen\G
) nach ihrem numerischen Wert, der, da es keine Zahlen gibt, 0 ist. Dann kehren wir den Wert um Reihenfolge der Ergebnisse dieser stabilen Sortierung mit der^
Option. Alle Kredite für die ausgefallene Verwendung von\G
gehören Martin :)quelle
CJam, 18
Probieren Sie es online aus
Erläuterung:
quelle
Lua,
8988 BytesIch habe das Javascript geschlagen! \ o / 1 Byte dank @LeakyNun ^^ gespeichert
Es ist ein vollständiges Programm, dessen Eingabe als Befehlszeilenargument dient.
ungolfed
quelle
while
können entfernt werden?i=i+1end
?1end
als Hexadezimalzahl auszuwerten . Im Allgemeinen können Sie[abcdef]
eine Zahl nicht direkt nach einer Zahl verwenden, ohne sie als Hexadezimalzahl zu betrachten. Es gibt noch eine Ausnahme0x
.Prolog, 43 Bytes
Dies erwartet einen Code-String als Eingabe, zB bei SWI-Prolog 7:
a(`hello`).
Erläuterung
Dies ist im Grunde eine Portierung meiner Brachylog-Antwort.
quelle
Oktave,
7875 Bytes3 Bytes gespart dank Eʀɪᴋ ʀɪᴋ Gᴛʜᴇ!
ideone schlägt für benannte Funktionen immer noch fehl, aber hier ist ein Testlauf des Codes als Programm.
quelle
Perl, 37 Bytes
Basierend auf der Antwort von xnor.
Beinhaltet +2 für
-lp
Mit Eingabe auf STDIN ausführen, z
palindromize.pl
:quelle
05AB1E , 18 Bytes
Code:
Verwendet CP-1252- Codierung. Probieren Sie es online!
quelle
Pyke, 15 Bytes
Probieren Sie es hier aus!
quelle
J, 20 Bytes
Dies ist ein monadisches Verb. Probieren Sie es hier aus. Verwendung:
Erläuterung
Ich verwende die Tatsache , dass die palindromization von S ist S + reverse (P) , wo P der kürzeste Präfix ist S , deren Entfernung resultiert in einem Palindrom. In J ist es etwas umständlich, nach dem ersten Element eines Arrays zu suchen, das ein Prädikat erfüllt. daher die Indizierung.
quelle
Haskell, 68 Bytes
Anwendungsbeispiel:
f "abcb"
->"abcba"
.Durchsuchen Sie
inits
die Eingabei
(z. B.inits "abcb"
->["", "a", "ab", "abc", "abcb"]
), bis Sie eine finden, an die umgekehrti
ein Palindrom angehängt ist .quelle
r=reverse
vorher gehenf i=
...?MATL ,
1716 BytesLocker inspiriert von @ aditsus CJam-Antwort .
Probieren Sie es online!
Erläuterung
quelle
Ruby, 44 Bytes
Diese Antwort basiert auf den Python- und Haskell- Lösungen von xnor .
quelle
==s?s:
??
zwischen?:
ternär und der?x == 'x'
seit Ruby 1.9Oracle SQL 11.2, 195 Byte
Nicht golfen
quelle
Im Ernst, 34 Bytes
Das letzte Zeichen ist ein nicht unterbrechendes Leerzeichen (ASCII 127 oder
0x7F
).Probieren Sie es online!
Erläuterung:
quelle
202 Bytes
Ich habe es versucht.
Ungolfed:
Kann mir jemand eine Idee geben, wie ich die beiden Aufrufe von .Reverse (). ToArray () gruppieren kann? Eine separate Methode besteht aus mehr Bytes.
quelle
QBIC , 41 Bytes
Erläuterung:
quelle
Haskell, 46 Bytes
Ich frage mich, ob es eine Möglichkeit gibt, die Klammer in
(f$tail l)++[l!!0]
... zu entfernen.quelle