In dieser Herausforderung erhalten Sie eine alphabetische Zeichenfolge als Eingabe. Wir definieren den "Anti-String" einer bestimmten Eingabe als String, wobei alle Buchstaben invertiert sind. Beispielsweise
AaBbbUy -> aAbBBuY
Sie sollten ein Programm schreiben, das eine Zeichenfolge als Eingabe verwendet und nach der längsten zusammenhängenden Teilzeichenfolge sucht, deren Anti-Zeichenfolge ebenfalls eine zusammenhängende Teilzeichenfolge ist. Die beiden Teilzeichenfolgen sollten sich nicht überlappen.
Als Beispiel, wenn Sie die Zeichenfolge erhalten haben
fAbbAcGfaBBagF
Die fettgedruckten Teile wären das längste String-Anti-String-Paar.
Ihr Programm sollte, sobald es das Paar gefunden hat, diese zu jeweils einem Zeichen zusammenfassen. Dies sollte durch Entfernen aller Zeichen außer dem ersten Zeichen jeder Teilzeichenfolge erreicht werden. Zum Beispiel die obige Zeichenfolge
fAbbAcGfaBBagF
würde werden
fAcGfagF
Ihr Programm sollte dann den Vorgang wiederholen, bis das längste String-Anti-String-Paar ein einzelnes Zeichen oder kürzer ist.
Wenn Sie beispielsweise mit derselben Zeichenfolge arbeiten, ist das neue Paar nach dem Zusammenbruch das längste
fAcGfagF
Also brechen wir die Saite wieder zusammen
fAcGag
Jetzt kann der String nicht mehr weiter reduziert werden, daher sollten wir ihn ausgeben.
Im Falle eines Gleichstands zwischen Kandidatenpaaren (Beispiel AvaVA
) können Sie entweder eine Reduzierung vornehmen ( AaA
oder AvV
aber nicht Aa
).
Dies ist Codegolf, daher werden die Antworten in Bytes bewertet, wobei weniger Bytes besser sind.
Testfälle
fAbbAcGfaBBagF -> fAcGag
AvaVA -> AaA / AvV
QQQQQQQ -> QQQQQQQ
fAbbAcQQQQaBBacqqqqA -> fAbcQBcq
gaq -> gaq
fAbbAcGfaBBagFaBBa -> fcGaBBag
Motivationen
Obwohl dieses Problem willkürlich erscheint, ist es tatsächlich ein Problem, auf das ich beim Erstellen von Code zur Verarbeitung grundlegender Polygone gestoßen bin. Dieser Prozess kann verwendet werden, um ein Grundpolygon auf ein kleineres n -gon zu reduzieren . Nachdem ich es ausprobiert hatte, dachte ich, dass es ein schönes kleines Golfspiel werden würde.
quelle
aaaAAAaaa -> aAaaa
?Antworten:
Perl,
6461 BytesEnthält
+1
fürp
quelle
JavaScript (ES6), 200 Byte
Verwendet Arrays von Zeichen für E / A.
Probieren Sie es online!
quelle
Netzhaut , 119 Bytes
Probieren Sie es online! Link enthält Testfälle. Erläuterung:
Duplizieren Sie die Eingabe und drehen Sie die Groß- / Kleinschreibung der ersten Kopie um.
Wenn überhaupt keine Anti-Strings vorhanden sind, löschen Sie das gespiegelte Duplikat.
Listen Sie alle möglichen reduzierten Anti-Strings auf.
Sortieren Sie sie nach Länge, nehmen Sie die kürzeste (dh längste Anti-String) und wiederholen Sie, bis alle Anti-Strings zusammengebrochen sind.
quelle
Python 3 ,
189181 BytesDank an Jonathan Frech, der es zu einem reinen Einzeiler gemacht hat.
Probieren Sie es online!
Meine eigene Version, jetzt veraltet (189 Bytes):
Probieren Sie es online!
any()
geschachtelte Schleifen frühzeitig ausbrechen undset()
für veränderbare globale Objekte im Verständnis verwendbar. Der Rest ist nur die unkomplizierte Umsetzung der Anforderungen mitstr.swapcase
.Python 2 , 160 Bytes
Probieren Sie es online!
Es stellt sich heraus, dass reguläre verschachtelte for-Schleifen mit frühem Durchbruch
return
viel kürzer sind als der "clevere" Trick mitany
.quelle
set
als Funktion voreingestellte Variable wird nicht mit weiteren Aufrufen kollidieren, da ich denke, dass Ihr Code die Menge vollständig als leer markiert.x
wäre nicht leer. Wie Sie es haben, denke ich, entspricht es.C (GCC) ,
240238227225222216 BytesElfdreizehn Bytes gespeichert ; golfedb|=S[p+m]!=S[q+m]+32-(S[q+m]>90)*64
bisb|=abs(S[p+m]-S[q+m])-32
zub|=32-S[p+m]+S[q+m]&63
.for(...;...;p++)S[p+1]=S[p+L];
zufor(...;...;S[++p]=S[p+L]);
.Probieren Sie es online!
quelle
Python 2 , 180 Bytes
Probieren Sie es online!
quelle
Stax , 30 Bytes
Führen Sie es aus und debuggen Sie es
Dies ist die entsprechende ASCII-Darstellung desselben Programms.
Es wird ein regulärer Ansatz verwendet. Ersetzt wiederholt reguläre Zeichenfolgen. Diese werden aus jeder zusammenhängenden Teilzeichenfolge des aktuellen Werts erstellt. Zum Beispiel für die Eingabe
fAbbAcGfaBBagF
ist einer der TeilstringsAbbA
. In diesem Fall wird der reguläre AusdruckAbbA(.*)aBBa
durch ersetztA$1a
.quelle
Wolfram-Sprache (Mathematica) , 148 Bytes
Probieren Sie es online!
quelle
Japt
-h
, 33 BytesVersuch es
quelle