В Dyalog APL Extended от @ Adám⍢
оператор (under) означает сопряжение: примените одну функцию, затем вторую функцию, а затем инверсию первой. Интересно думать о реальных действиях с точки зрения сопряжения:
Задача преобразуется g в другой домен, где она более легко решается с помощью f, а затем снова превращается в исходный домен. Пример из реальной жизни «под наркозом»:
apply anesthetics perform surgery wake up from anesthetics
Вызов
Обратной линии перед g
"un" ставится префикс g
, и наоборот. Определите любую линию между s
и ее обратной, в этом порядке, как «под» s
. Для каждой строки f
ввода по порядку:
- Если
f
и происходит обратное, ничего не делать - Если
f
не "под" любым другим действием, распечататьf
- Если
f
находится «под» линиейg
, выведитеf + " under " + g
где+
конкатенация.
вход
Непустая многострочная строка или список строк и т. Д., Состоящий из пробелов и строчных букв (вместо этого вы можете использовать прописные). Ровно одна строка будет начинаться с «un»; и это будет инверсия какой-то другой линии. Ни одна строка не будет пустой.
Выход
Вывод в том же формате, в котором вы вводили данные, или в соответствии с разрешением стандартного ввода-вывода
Тестовые случаи:
Input:
apply anesthetics
perform surgery
unapply anesthetics
Output:
perform surgery under apply anesthetics
Input:
unite asia
establish the silk road
ite asia
Output:
establish the silk road under unite asia
Input:
desire a book
walk to store
take the book
pay for the book
unwalk to store
read the book
Output:
desire a book
take the book under walk to store
pay for the book under walk to store
read the book
Input:
drink excessively
undrink excessively
Output:
[empty string]
Ответы:
Брахилог , 90 байт
Я сделал это, находясь под впечатлением, что это может быть рекурсивно, и несколько нижних слоев могут быть сложены. Вероятно, не оптимизирован. Кроме того, поскольку это bracylog, сантехника занимает довольно много байтов.
Попробуйте онлайн!
источник
Сетчатка , 82 байта
Попробуйте онлайн!Ссылка включает в себя тестовые случаи. Объяснение:
Запустите всю программу в многострочном режиме (так, чтобы
^
и$
соответствует началу и конец отдельных линий) и повторить до тех пор, пока никаких изменений.Ищите строки, которые могут начинаться с
un
и сопровождаются строкой, которая начинается сun
только в том случае, если предыдущая строка не совпадает, а остальная часть строки совпадает, и удалите обе строки. (Это изменение поведения в Retina 0.8.2, которое разбивает строки перед попыткой сопоставления и, следовательно, никогда не может удалять строки, если совпадение должно занимать более одной строки одновременно.)Найдите строки, которые могут начинаться с
un
, по крайней мере за одной строкой, за которой следует строка, начинающаяся сun
только в том случае, если исходная строка не совпадает, в то время как остальная часть строки совпадает.Переместите оригинальную линию вниз на одну строку, а также добавьте ее
under
к только что пройденной строке. (Дополнительные строки будут обработаны повторением.)источник
Python 2 , 106 байт
Попробуйте онлайн!
Если входные данные могут быть списком из STDIN, а выходные - разделены символом новой строки, у нас есть это 94-байтовое решение:
источник
JavaScript (Babel Node) , 91 байт
Принимает ввод в виде массива строк в нижнем регистре. Возвращает другой массив строк.
Попробуйте онлайн!
комментарии
источник
Чисто , 147 байт
Попробуйте онлайн!
источник