In dieser Herausforderung besteht Ihre Aufgabe darin, Teilzeichenfolgen mit einer bestimmten Struktur zu lokalisieren.
Eingang
Ihre Eingabe besteht aus zwei nicht leeren alphanumerischen Zeichenfolgen, einem Muster p
und einem Text t
. Die Idee ist, dass jedes Zeichen von p
eine zusammenhängende nicht leere Teilzeichenfolge darstellt, t
die nebeneinander auftritt, und p
deren Verkettung darstellt. Identische Zeichen entsprechen identischen Teilzeichenfolgen. Das Muster aa
stellt beispielsweise ein beliebiges nicht leeres Quadrat dar (eine Zeichenfolge, die durch Verketten einer kürzeren Zeichenfolge mit sich selbst erhalten wird). Somit kann das Muster bei jeder Übereinstimmung mit aa
der Teilzeichenfolge übereinstimmen .byebye
a
bye
Ausgabe
Wenn der Text t
eine p
übereinstimmende :
Teilzeichenfolge enthält , ist Ihre Ausgabe diese Teilzeichenfolge, wobei Doppelpunkte zwischen die Zeichenfolgen eingefügt werden, die den Zeichen von entsprechen p
. Zum Beispiel, wenn wir haben t = byebyenow
und p = aa
dann bye:bye
eine akzeptable Ausgabe. Es kann mehrere Möglichkeiten für den passenden Teilstring geben, Sie sollen jedoch nur eine davon ausgeben.
Wenn t
keine passende Teilzeichenfolge enthalten ist, ist Ihre Ausgabe ein trauriges Gesicht :(
.
Regeln und Erläuterungen
Verschiedene Zeichen von p
können identischen Teilzeichenfolgen entsprechen, sodass p = aba
sie mit der Zeichenfolge übereinstimmen können AAA
. Beachten Sie, dass die Zeichen nicht leeren Zeichenfolgen entsprechen müssen. Insbesondere wenn p
länger als ist t
, muss die Ausgabe sein :(
.
Sie können ein vollständiges Programm oder eine Funktion schreiben und die Reihenfolge der beiden Eingänge ändern. Die niedrigste Byteanzahl gewinnt, und Standardlücken sind nicht zulässig.
Testfälle
Im Format angegeben pattern text -> output
. Beachten Sie, dass möglicherweise andere zulässige Ausgaben vorhanden sind.
a Not -> N
aa Not -> :(
abcd Not -> :(
aaa rerere -> re:re:re
xx ABAAAB -> A:A
MMM ABABBAABBAABBA -> ABBA:ABBA:ABBA
x33x 10100110011001 -> 10:1001:1001:10
abcacb 0a00cca0aa0cc0ca0aa0c00c0aaa0c -> c:a0aa:0c:c:0c:a0aa
abccab 0a00cca0aa0cc0ca0aa0c00c0aaa0c -> a:a:0c0:0c0:a:a
abcbcab 0a00cca0aa0cc0ca0aa0c00c0aaa0c -> :(
abcbdcab 0a00cca0aa0cc0ca0aa0c00c0aaa0c -> 00:c:ca0aa0c:c:0:ca0aa0c:00:c
quelle
O(2^((n * (n + 1))/2))
: PAntworten:
Python, 207 Bytes
Mit anrufen
g(pattern, string)
Verwendet das
re
Modul, um den größten Teil der Arbeit zu erledigen.quelle
JavaScript (SpiderMonkey) (ES5.1), 198 Byte
Seit der Veröffentlichung von ES6 im Juni 2015 veröffentliche ich die ES5.1-Version des Codes zusammen mit der ES6-Entsprechung, deklariere jedoch die ES5.1-Version als Hauptantwort.
Gierige Übereinstimmung, daher gibt der erste Fall "Nicht" anstelle von "N" zurück.
Probieren Sie es online!
JavaScript (Node.js) (ES6), 141 Byte
Probieren Sie es online!
Übernimmt die Argumente in der Currying-Syntax:
f(a)(b)
Erklärung (und ungolfed):
quelle
Brachylog , 35 Bytes
Probieren Sie es online!
Bei nicht ganz kleinen Eingängen sehr langsam. Ich habe den sechsten Testfall nicht wirklich durchgeführt, aber nicht, weil ich es nicht ausprobiert habe, langsam. (Möglicherweise, weil jede Partition jedes Teilstrings brachial erzwungen wurde, beginnend mit der größten, und dann überprüft wurde, ob eine Übereinstimmung vorliegt.) Nimmt die Eingabe als Liste
[pattern,string]
.Verkürzte und geteilte Erklärung:
sᵗ~cᵗX
X ist das Muster, das mit einer Partition eines Teilstrings der Eingabezeichenfolge gepaart ist.
lᵛ
Das Muster und die Partition haben die gleiche Anzahl von Elementen.
Xzdz≠ʰ
Keine zwei eindeutigen
pattern char, matched substring
Paare teilen ein Musterzeichen. Das heißt, kein Musterzeichen wird mehreren Teilzeichenfolgen zugeordnet, obwohl mehrere Musterzeichen einer Teilzeichenfolge zugeordnet werden können.Xt~ṇ{Ḷ∧":"|}ᵐ.∨":("
Die Ausgabe besteht aus den Elementen der Partition, die durch Doppelpunkte verbunden sind, es sei denn, etwas konnte nicht getan werden. In diesem Fall ist dies
:(
stattdessen der Fall .Monolithische Erklärung:
quelle