Zeichenfolgen mit Kontext
Für diese Herausforderung ist eine Zeichenfolge mit Kontext ein Tripel von Zeichenfolgen, die als linker Kontext , Datenteil und rechter Kontext bezeichnet werden . Es repräsentiert eine Teilzeichenfolge einer längeren Zeichenfolge. Wir verwenden die vertikale Pipe |
als Trennzeichen. Ein Beispiel für eine Zeichenfolge mit Kontext ist also cod|e-go|lf
, wo sich der linke Kontext cod
, die Daten e-go
und der rechte Kontext befinden lf
. Dieses Beispiel repräsentiert die Teilzeichenfolge e-go
von code-golf
.
Um nun zwei Zeichenfolgen mit dem Kontext zu verknüpfen, gehen wir wie folgt vor, wobei wir aa|bcc|dee
und cc|de|eee
als Beispiele verwenden. Wir richten die Zeichenfolgen wie im Diagramm aus
a a|b c c|d e e
c c|d e|e e e
so dass ihre Datenteile benachbart sind. Der Datenteil der Verkettung ist in diesem Fall die Verkettung der Datenteile bccde
. Der linke Kontext ist in diesem Fall der Teil, der sich weiter links vom ersten Datenteil erstreckt aa
. Ebenso ist der richtige Kontext eee
, also ist die Verkettung die Zeichenfolge mit dem Kontext aa|bccde|eee
. Als zweites Beispiel betrachten Sie a|bb|cd
und aabb|cd|
, wobei das zweite Wort einen leeren rechten Kontext hat. Das Ausrichtungsdiagramm ist
a|b b|c d
a a b b|c d|
wobei sich der linke Kontext des zweiten Wortes weiter erstreckt als der des ersten. Die Verkettung ist aa|bbcd|
.
Aber warte, es gibt ein Problem: Wenn die Buchstaben des Ausrichtungsdiagramms nicht übereinstimmen, existiert die Verkettung nicht! Als ein Beispiel der Schaltbild aa|bb|cc
und c|c|c
IS
a a|b b|c c
c|c|c
Wo die b
und c
in der vierten Spalte nicht übereinstimmen, können sie nicht verkettet werden.
Die Aufgabe
Ihre Aufgabe ist es, ein Programm zu schreiben, das zwei Zeichenfolgen mit Kontext enthält, deren Teile |
wie oben voneinander getrennt sind , und deren Verkettung auszugeben, falls vorhanden, und etwas anderes, falls nicht. Das "etwas anderes" kann ein beliebiger Wert sein, einschließlich keiner Ausgabe, solange es sich nicht um eine gültige Zeichenfolge mit Kontext handelt und in allen Fällen dieselbe. Das Auslösen eines Fehlers ist jedoch nicht akzeptabel. Sie können entweder ein STDIN-zu-STDOUT-Programm oder eine Funktion angeben. Anonyme Funktionen werden ebenfalls akzeptiert. Die kleinste Byteanzahl gewinnt, und Standardlücken sind nicht zulässig.
Testfälle
aa|bcc|dee cc|de|eee -> aa|bccde|eee
a|bb|cd aabb|cd| -> aa|bbcd|
a|b|cccd aab|cc|c -> aa|bcc|cd
a|b|c b||cd -> a|b|cd
aa|bb|cc c|c|c -> None
aaa|b|c abb|cd|d -> None
|bb|cd abb|c|ed -> None
a|b|c a||cd -> None
|1<2=""
zur Definition von&
sollte das lösen. Es tut mir leid, dass ich dies nicht expliziter in den Spezifikationen angegeben habe. Ich werde es in bearbeiten.'|'
Zeichen zurückgegeben, wenn die Zeichenfolgen nicht in Ordnung sind?Python (242 Bytes)
Erläuterung
Die Lambda-Funktion
m
gibt die längere von zwei Zeichenfolgen zurück, solange sie ein gemeinsames Präfix haben. Es tut dies durch die leere Zeichenkette Verketten''
anstelle der fehlenden Werte, dann das Ergebnis drehen (die die Formen annehmen könnenaa
,ab
,a
, oderb
in Fällen der Übereinstimmung / Nichtübereinstimmung / ungleiche Länge) in einen Satz von eindeutigen Zeichen an jeder Position.join
Erwartet ein einzelnes Argument. Wenn Sie also eine Menge mit mehr als einem Element entpacken, wird a ausgelöstTypeError
.Die Hauptfunktion dann
m
die kombinieren linken Kontext und Datenteil das erste Wort , mit dem linken Kontext der zweiten (von rechts nach links über umgekehrt Strings)m
, um den richtigen Kontext des ersten Wortes mit dem Datenteil und dem richtigen Kontext des zweiten Wortes zu kombinierenDie Datenteile der beiden ursprünglichen Wörter werden von der rechten und linken Seite des neuen Kontexts abgeschnitten.
Da wir wissen, dass Fehlausrichtungen a auslösen
m
,TypeError
fangen wir in diesen Fällen die Ausnahme ab und kehren implizit zurückNone
.Testen
Ausgabe
quelle