Heute machst du eine weitere Palindrom-Herausforderung!
Ihre heutige Aufgabe ist es also, eine Zeichenfolge zu nehmen und die Mindestanzahl an Buchstaben zu bestimmen, die zum Einfügen erforderlich sind, um sie in ein Palindrom zu verwandeln.
Nehmen wir zum Beispiel den String fishes
.
In diesem Fall wäre das Hinzufügen der beste Weg h if
, das Ergebnis wäre also 3.
fishe s
h if
---------
fishehsif
Jetzt versuchen wir es mit codegolf
. Da es eine Wiederholung gibt o
, können wir einfach tun:
codeg o lf
fl ed c
-------------
flcodegedoclf
um ein Ergebnis von 5 zu erhalten.
Testfälle
ppcg -> 2
codegolf -> 5
palindrome -> 9
stackexchange -> 8
programmingpuzzlesandcodegolf -> 20
code-golf
string
palindrome
Oliver Ni
quelle
quelle
ppcg
, die Punktzahl ist 4 + 2 = 6)Antworten:
Pyth, 10 Bytes
Testsuite.
Es gibt ein paar äquivalente Charakterisierungen des Wertes, den wir suchen:
Die übliche Idee ist das "Skelett" von Buchstaben in der Eingabe, die mit den Buchstaben der Eingabe im Endprodukt übereinstimmen.
Dieses Skelett ist immer ein Palindrom mit Buchstaben, die mit den umgekehrten Gegenstücken übereinstimmen. Jeder Buchstabe, der kein Gerüst ist, ist nicht passend und muss sein Gegenstück enthalten.
Eine Alternative gleicher Länge verwendet stattdessen die vierte Bedingung, die Länge der Eingabe abzüglich der Länge ihrer längsten palindromischen Untersequenz
Link zur Testsuite.
Der Teil, der anders ist, ist
Für beide können wir, anstatt die palindromische Subsequenz von der Eingabe zu entfernen und die Länge zu nehmen, stattdessen ihre Länge von der Länge der Eingabe subtrahieren. Entweder man Kosten 4 Bytes:
-lQl
vsl.-Q
.quelle
Python, 112 Bytes
Sehr ineffizient.
Probieren Sie es online! Sie müssen eine Minute warten, bis der letzte Fall abgeschlossen ist.
Rufen Sie mit
e(<string>, 0, <length of string - 1>)
, wie e ("Fische", 0, 5) `.Ungolfed mit Erklärung:
quelle
l=0
.05AB1E , 11 Bytes
Verwendet die CP-1252- Codierung.
Probieren Sie es online! oder als Testsuite
Erläuterung
quelle
Brachylog , 9 Bytes
Probieren Sie es online!
Diese Herausforderung erforderte wirklich eine Brachylog v2-Antwort, da die Palindromisierung der Einfügung in dieser Sprache so intuitiv ist.
Erläuterung
⊆P↔P
Was bedeutet Palindromisierung durch Insertion (siehe dieses Beispiel ) ?quelle
C,
89121 BytesSchamlose Portierung von Olivers Antwort, könnte sich keine kürzere Lösung vorstellen.
g
ruftf
mit dem Zeiger auf das erste und das letzte Zeichen eines Strings auf (das letzte Zeichen ist Teil des Strings, nicht das'\0'
). Wird noch ineffizienter, weilf
zweimal für denmin
Fall aufgerufen wird.Ungolfed:
Verwendung:
quelle
Brachylog v1 , 13 Bytes
Probieren Sie es online!
Mit diesem Code können Sie die gefundenen Palindrome überprüfen .
Erläuterung
Ich bin fast überrascht, dass dies sogar funktioniert, wenn man sieht, wie lächerlich einfach es ist.
Dies ist garantiert, um das kleinste Palindrom zu finden, da
IrI
Zeichenfolgen mit zunehmender Länge beim Zurückverfolgen erzeugt werden, beginnend mit der leeren Zeichenfolge.Dies ist aufgrund der Verwendung von nicht effizient genug, um den letzten Testfall unter TIO zu berechnen
s - Ordered subset
.quelle
Batch,
234232 BytesArbeitet, indem rekursiv versucht wird, nicht übereinstimmende Zeichen an beiden Enden einzufügen, also sehr langsam (ich habe den letzten Testfall nicht ausprobiert). Rekursionslimits bedeuten, dass dies ohnehin nur für eine begrenzte Stringlänge funktioniert, was also
99
etwas willkürlich ist. Ich musscall
Parameter als lokale Variablen verwenden, da ichsetlocal
für mich nicht arbeiten konnte. Dies bedeutet, dass der%1
Parameter für die:l
Unterroutine ein Ausdruck ist, der die Anzahl der bisher ausgeführten Einfügungen ermittelt.quelle