Ciągi z kontekstem
Na potrzeby tego wyzwania ciąg z kontekstem jest potrójnym ciągiem zwanym lewym kontekstem , częścią danych i prawym kontekstem . Reprezentuje podciąg dłuższego łańcucha. Używamy pionowej rury |jako separatora, więc przykładem łańcucha z kontekstem jest cod|e-go|lf, gdzie jest lewy kontekst cod, dane są e-go, a prawy kontekst lf. Ten przykład przedstawia podciąg e-gow code-golf.
Teraz, aby połączyć dwa ciągi z kontekstem, postępujemy w następujący sposób, używając aa|bcc|deei cc|de|eeejako przykładów. Wyrównujemy ciągi jak na schemacie
a a|b c c|d e e
c c|d e|e e e
tak aby ich części danych sąsiadowały. W tym przypadku częścią danych konkatenacji jest konkatenacja części danych bccde. Lewy kontekst to część, która rozciąga się dalej na lewo od pierwszej części danych, w tym przypadku aa. Podobnie jest właściwy kontekst eee, więc konkatenacja jest ciągiem z kontekstem aa|bccde|eee. W drugim przykładzie zastanów się, a|bb|cda aabb|cd|gdy drugie słowo ma pusty prawy kontekst. Schemat wyrównania to
a|b b|c d
a a b b|c d|
gdzie lewy kontekst drugiego słowa rozciąga się dalej niż pierwszy. Konkatenacja jest aa|bbcd|.
Ale poczekaj, jest gotcha: jeśli litery na schemacie wyrównania nie pasują, konkatenacja nie istnieje! Na przykład, w schemacie aa|bb|ccoraz c|c|cIs
a a|b b|c c
c|c|c
gdzie bi cw czwartej kolumnie się nie zgadzają, więc nie można ich połączyć.
Zadanie
Twoim zadaniem jest napisanie programu, który przyjmuje dwa ciągi z kontekstem, którego części są oddzielone |jak powyżej, i wyświetla ich konkatenację, jeśli istnieje, i coś innego, jeśli nie. „Coś innego” może mieć dowolną wartość, w tym brak danych wyjściowych, o ile nie jest to prawidłowy ciąg znaków z kontekstem i jest taki sam we wszystkich przypadkach. Zgłaszanie błędu jest jednak niedopuszczalne. Możesz podać program STDIN-to-STDOUT lub funkcję, a funkcje anonimowe są również akceptowane. Wygrywa najmniejsza liczba bajtów, a standardowe luki są niedozwolone.
Przypadki testowe
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=""do definicji&powinno rozwiązać ten problem. Przepraszam, że nie