Строки с контекстом
Для целей этой задачи строка с контекстом представляет собой тройку строк, называемых левым контекстом , частью данных и правым контекстом . Он представляет подстроку более длинной строки. Мы используем вертикальную трубу |в качестве разделителя, поэтому пример строки с контекстом: cod|e-go|lfгде левый контекст cod, данные e-goи правый контекст lf. Этот пример представляет собой подстроку e-goиз code-golf.
Теперь, чтобы объединить две строки с контекстом, мы поступим следующим образом, используя aa|bcc|deeи в cc|de|eeeкачестве примеров. Мы выравниваем строки как на диаграмме
a a|b c c|d e e
c c|d e|e e e
так что их части данных являются смежными. Часть данных конкатенации в данном случае является конкатенацией частей данных bccde. В этом случае левый контекст - это часть, которая расширяет дальше слева от первой части данных aa. Точно так же правильный контекст eee, поэтому конкатенация - это строка с контекстом aa|bccde|eee. Для второго примера рассмотрим a|bb|cdи aabb|cd|, где второе слово имеет пустой правый контекст. Диаграмма выравнивания
a|b b|c d
a a b b|c d|
где левый контекст второго слова распространяется дальше, чем первый. Конкатенация есть aa|bbcd|.
Но подождите, есть ошибка: если буквы диаграммы выравнивания не совпадают, конкатенация не существует! В качестве примера, диаграммы aa|bb|ccи c|c|cIS
a a|b b|c c
c|c|c
где bи cв четвертой колонке не согласны, поэтому они не могут быть объединены.
Задание
Ваша задача - написать программу, которая принимает две строки с контекстом, части которого разделены, |как указано выше, и выводит их конкатенацию, если она существует, и что-то еще, если нет. «Что-то еще» может быть любым значением, включая отсутствие вывода, если оно не является допустимой строкой с контекстом и одинаково во всех случаях. Однако выбрасывание ошибки не допускается. Вы можете указать либо программу STDIN-to-STDOUT, либо функцию, и анонимные функции также принимаются. Наименьшее количество байтов выигрывает, и стандартные лазейки запрещены.
Тестовые случаи
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=""к определению&должно решить это. Извините, я не указал это более явно в спецификации, я отредактирую это.