W @ Adama Dyalog APL Rozszerzona The ⍢
(pod) operator środki koniugacji: stosować jedną funkcję, a następnie drugą funkcję, a następnie odwrotność pierwszego. Fajnie jest myśleć o rzeczywistych działaniach w kategoriach odmiany:
Problem jest przekształcany przez g w inną domenę, w której łatwiej jest go rozwiązać przez f, a następnie przekształcany z powrotem w pierwotną domenę. Przykładem z prawdziwego życia jest „pod znieczuleniem”:
apply anesthetics perform surgery wake up from anesthetics
Wyzwanie
Odwrotność linii g
jest poprzedzana „un” g
i odwrotnie. Zdefiniuj dowolną linię między s
i odwrotną, w tej kolejności, jako znajdującą się „pod” s
. Dla każdej wprowadzanej linii f
w kolejności:
- Jeśli
f
i odwrotnie występują oba, nie rób nic - Jeśli
f
nie ma „pod” żadną inną czynnością, wydrukujf
- Jeśli
f
jest „pod” liniąg
, wypiszf + " under " + g
gdzie+
jest konkatenacja.
Wejście
Niepusty ciąg wielowierszowy lub lista ciągów itp., Składająca się ze spacji i małych liter (zamiast tego możesz użyć wielkich liter). Dokładnie jedna linia zaczyna się od „un”; i będzie odwrotnością innej linii. Żadna linia nie będzie pusta.
Wynik
Wyjście w tym samym formacie, w którym wprowadzono dane, lub w sposób dozwolony przez Standard I / O.
Przypadki testowe:
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]
Odpowiedzi:
Brachylog , 90 bajtów
Zrobiłem to, mając wrażenie, że może to być rekurencyjne, a wiele spacji można układać w stosy. Prawdopodobnie nie zoptymalizowany. Ponieważ jest to bracylog, instalacja hydrauliczna zajmuje sporo bajtów.
Wypróbuj online!
źródło
Siatkówka , 82 bajty
Wypróbuj online!Link zawiera przypadki testowe. Wyjaśnienie:
Uruchom cały program w trybie multilinii (tak aby
^
i$
dopasować początek i koniec poszczególnych linii) i powtórzyć aż istnieją żadne zmiany.Poszukaj linii, które mogą zaczynać się od,
un
a po nich linii, która zaczyna się odun
tylko jeśli poprzednia linia nie, podczas gdy reszta linii jest taka sama, i usuń obie linie. (Jest to zmiana zachowania w stosunku do Retina 0.8.2, która dzieli linie przed próbą dopasowania, a zatem nigdy nie może usunąć linii, jeśli dopasowanie musi obejmować więcej niż jedną linię na raz.)Poszukaj linii, które mogą zaczynać się
un
, po których następuje co najmniej jedna linia, a po niej linia, która zaczyna się odun
tylko jeśli linia oryginalna nie, podczas gdy reszta linii jest taka sama.Przenieś oryginalną linię w dół o jedną linię, a także dodaj ją
under
do linii, którą właśnie wykonałem. (Dodatkowe wiersze będą obsługiwane przez powtórzenie.)źródło
Python 2 , 106 bajtów
Wypróbuj online!
Jeśli dane wejściowe mogą być listami ze STDIN, a dane wyjściowe być oddzielone znakiem nowej linii, mamy 94-bajtowe rozwiązanie:
źródło
JavaScript (węzeł Babel) , 91 bajtów
Pobiera dane wejściowe jako tablicę ciągów pisanych małymi literami. Zwraca inną tablicę ciągów.
Wypróbuj online!
Skomentował
źródło
Czysty , 147 bajtów
Wypróbuj online!
źródło