Geben Sie bei einer gegebenen Zeichenfolge s
die kleinste zusammenhängende Teilzeichenfolge zurück, die Sie entfernen können, um ein Palindrom zu erstellen.
Beispiele:
800233008 -> 2
racecarFOOL -> FOOL
abcdedcba -> (empty string)
ngryL Myrgn -> "L " (or " M")
123456789 -> 12345678 (or 23456789)
aabcdbaa -> c (or d)
[[]] -> [[ (or ]])
a -> (empty string)
Testfallvorschläge von Benutzern (wenn Sie einen Randfall finden, der nicht aufgeführt ist, senden Sie bitte einen Kommentar):
aabaab -> b | Suggested by Zgarb, some returned "aa".
Regeln
- In der Eingabe werden nur druckbare ASCII-Zeichen angezeigt (keine Zeilenumbrüche, halten Sie es einfach).
- Nicht wirklich eine Regel, aber beachten Sie
<>
,/\
,()
,[]
und{}
sind nicht Palindrome.
Dies ist Code-Golf , die kleinste Anzahl an Bytes gewinnt.
+100 Kopfgeld wurde von Adnan beansprucht
code-golf
string
palindrome
Magische Kraken-Urne
quelle
quelle
aabaab
[[]]
ein Palindrom?]][[
. Betrachten Sie dasaabb
ist das gleiche, nur verschiedene Charaktere.Antworten:
Gelee , 16 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
J , 24 Bytes
Probieren Sie es online!
Erläuterung
quelle
(;"e f)&>
als Testgeschirr Verb wählen ?Wolfram Language (Mathematica) ,
5351 BytesDie Byteanzahl setzt die CP-1252-Codierung voraus.
Probieren Sie es online!
Definiert einen unären Operator
±
(oder eine FunktionPlusMinus
). Eingabe und Ausgabe sind Listen von Zeichen. Die Testsuite führt die Konvertierung von und zu tatsächlichen Zeichenfolgen aus.quelle
Reverse
Vergleich mit dem Original dann kürzer als bei PalindromeQ? Ich kenne Mathematica nicht, also keine Ahnung.Characters@#/.{a___,Shortest@b___,c___}/;PalindromeQ[a<>c]:>b~~""&
Reverse[x={a,c}]==x
ist zwei Bytes länger. Ich weiß nicht, ob es eine kürzere Alternative gibt.Gelee , 20 Bytes
Probieren Sie es online!
quelle
05AB1E , 18 Bytes
Verwendet die 05AB1E- Codierung. Probieren Sie es online!
quelle
ǝ
war ernsthaft genial.Python 3 , 97 Bytes
Probieren Sie es online!
quelle
Python 2 , 116 Bytes
Probieren Sie es online!
Mit Hilfe von Halvard Hummel ein paar Bytes gerettet !
quelle
Japt ,
2622 BytesOnline testen! Ich versuche herauszufinden, wie
false
ich etwas Falsches und eine Zeichenfolge etwas Wahres in einem Byte zuordnen kann. Zur Zeit benutze ich+0
...quelle
Bash , 108 Bytes
Übernimmt die Eingabe als Befehlszeilenargument.
Probieren Sie es online! mit Anführungszeichen, die um die Ausgabe gedruckt werden, um führende / nachfolgende Leerzeichen anzuzeigen.
quelle
Prolog , 271 Byte
Irgendwann wurde mir klar, dass dies für Code-Golf-Verhältnisse enorm sein wird. Deshalb habe ich ein paar zusätzliche Leerzeichen gelassen, um die Ähnlichkeit mit der nicht verschleierten Version zu bewahren. Aber ich denke immer noch, dass es interessant sein könnte, da es eine andere Herangehensweise an das Problem ist.
Die nicht verschleierte Version:
quelle
C ++,
254248246 Bytes-6 Bytes dank Zacharý -2 Bytes dank Toby Speight
Damit...
T
als Makrodefinition verwendet, weil es einenR""
weiteren Effekt auf das Stringliteral hat (es ist ein Präfix, das verwendet wird, um unformatierte Stringliterale zu definieren, siehe cppreference für weitere Informationen), der nicht vorhanden ist, wenn ich es tueT""
p(std::string)
zu testen, ob die Zeichenfolge ein Palindrom ist. Wenn dies1
der Fall ist, wird zurückgegeben, wohin gewirkt wirdtrue
, andernfalls wird zurückgegeben0
, wohin gewirkt wirdfalse
the last index - number of erased char
. Wenn das Löschen eines Teils ein Palindrom ist, kehrt es zurück. Wenn Sie beispielsweise die Zeichenfolge"aabcdbaa"
als Parameter übergeben, sind beidec
undd
eine gültige Antwort. Dieser Code wird jedoch zurückgegeben,c
da er gelöscht und geprüft wird, ob es sich um ein Palindrom handelt, bevor geprüft wird, ob er gelöschtd
und ob es sich um ein Palindrom handeltHier ist der Code zum Testen:
quelle
using s=std::string;int p(s t){for(int i=0;i<t.S/2;++i)if(t[i]!=t[t.S-i-1])T 0;T 1;}s d(s e){if(!p(e))for(int i,w=1;w<e.S;++w)for(i=0;i<=e.S-w;++i){s t=e;t.erase(i,w);if(p(t))T e.substr(i,w);}T"";}
/2
weggelassen werden? Wenn Sie über die gesamte Länge iterieren, wiederholen Sie einfach die von uns durchgeführten Tests, die harmlos sein sollten. Vielleicht möchten Sie erweitern, was Sie mit dem "anderen Effekt" von meinenR""
(dh es wird als unformatiertes String-Literal analysiert).Gelee , 33 Bytes
Probieren Sie es online!
quelle
PHP 104 + 1 Bytes
Laufen Sie als Pipe mit
-nR
oder versuchen Sie es online .quelle
Haskell ,
109105 BytesProbieren Sie es online!
EDIT: Danke @ H.PWiz für das Abheben von 4 Bytes! Ich muss mit diesen Monaden besser werden!
quelle
JavaScript, 90 Bytes
Probieren Sie es online!
Code-Snippet anzeigen
quelle
Perl 5, 72 + 1 (-p) Bytes
Probieren Sie es online aus
quelle
JavaScript (ES6),
91 bis78 ByteEingabe und Ausgabe sind Listen von Zeichen.
Entfernt rekursiv einen immer größeren Ausschnitt aus der Eingabe, bis ein Palindrom gefunden wird.
Snippet:
Code-Snippet anzeigen
quelle
TSQL (2016) 349B
Nicht die kompakteste, aber unkomplizierte Lösung:
quelle
@
als Variable für einige Bytes verwenden. In der CTE können Siewhere''=value)
für einen anderen verwenden und müssen nichtC
in das Ergebnis zurückkehren.Schale , 18 Bytes
Probieren Sie es online!
Erläuterung
quelle
Haskell ,
98948180 BytesProbieren Sie es online! Anwendungsbeispiel:
""#0 $ "aabaab"
Erträge"b"
.Edit: -1 Byte danke an Ørjan Johansen.
quelle
""
durch ersetzent
.C ++,
189186176167 BytesIch begann mit der Antwort von HatsuPointerKun und änderte den Test, um die Gleichheit einfach mit der umgekehrten Zeichenfolge zu vergleichen. dann habe ich geändert, wie wir die Kandidaten-Strings aufzählen. Danach wurden die Makros jeweils nur ein- oder zweimal verwendet, und es war kürzer, sie inline zu setzen.
Erläuterung
Äquivalenter lesbarer Code:
Die Aufzählung der Kandidaten beginnt mit der Initialisierung einer Zeichenfolge, wobei die ersten
w
Zeichen weggelassen werden. Anschließend werden aufeinanderfolgende Zeichen aus dem Original kopiert, um die Lücke zu schließen. Zum Beispiel mit dem Stringfoobar
undw
== 2:Der erste Durchgang (mit
w
== 0) ist ein No-Op, daher wird der gesamte String immer wieder berücksichtigt. Das ist in Ordnung - Golfen übertrifft Effizienz! Die letzte Iteration dieser Schleife greift auf den One-Past-The-End-Index zu. Ich scheine mit GCC davonzukommen, aber genau genommen ist das Undefined Behaviour.Testprogramm
Ein direkter Auszug aus der Antwort von HatsuPointerKun :
quelle
REXX, 132 Bytes
quelle
Ruby ,
8684 BytesProbieren Sie es online!
quelle
z=s.size-l+1
.C (gcc) , 307 Bytes
Probieren Sie es online!
quelle