In @ Adáms Dyalog APL Extended bedeutet der ⍢
(Unter-) Operator Konjugation: Wende eine Funktion an, dann eine zweite Funktion, dann die Inverse der ersten. Es macht Spaß, an reale Aktionen in Bezug auf Konjugation zu denken:
Ein Problem wird von g in eine andere Domäne transformiert, wo es von f leichter gelöst wird, und dann zurück in die ursprüngliche Domäne transformiert. Ein Beispiel aus dem wirklichen Leben ist "unter Betäubung":
apply anesthetics perform surgery wake up from anesthetics
Herausforderung
Die Umkehrung einer Zeile g
wird "un" vorangestellt g
und umgekehrt. Definieren Sie eine beliebige Linie zwischen s
und ihrer Umkehrung in dieser Reihenfolge als "unter" s
. Für jede f
Eingabezeile in der Reihenfolge:
- Wenn
f
und seine Umkehrung beide auftreten, nichts tun - Wenn
f
keine andere Aktion ausgeführt wird, drucken Sief
- Wenn
f
"unter" einer Zeile stehtg
, wird gedruckt,f + " under " + g
wo+
sich die Verkettung befindet.
Eingang
Eine nicht leere mehrzeilige Zeichenfolge oder eine Liste von Zeichenfolgen usw., die aus Leerzeichen und Kleinbuchstaben besteht (Sie können stattdessen auch Großbuchstaben verwenden). Genau eine Zeile beginnt mit "un"; und es wird das Gegenteil einer anderen Zeile sein. Keine Zeile wird leer sein.
Ausgabe
Die Ausgabe erfolgt in demselben Format, in dem Sie die Eingabe vorgenommen haben, oder wie von Standard-E / A zugelassen.
Testfälle:
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]
Antworten:
Brachylog , 90 Bytes
Ich machte dies, während ich den Eindruck hatte, dass dies rekursiv sein und mehrere Untergründe gestapelt werden könnten. Wahrscheinlich nicht optimiert. Da dies auch bracylog ist, nimmt die Installation einige Bytes in Anspruch.
Probieren Sie es online!
quelle
Netzhaut , 82 Bytes
Probieren Sie es online! Link enthält Testfälle. Erläuterung:
Führen Sie das gesamte Programm in mehrzeiligen Modus (so dass
^
und$
den Anfang und das Ende der einzelnen Linien entsprechen) und wiederholen , bis es keine Änderungen geben.Suchen Sie nach Zeilen, die möglicherweise mit
un
einer Zeile beginnen und auf die eine Zeile folgt, dieun
nur dann beginnt, wenn die vorherige Zeile nicht übereinstimmt, während der Rest der Zeile identisch ist, und löschen Sie beide Zeilen. (Dies ist eine Verhaltensänderung von Retina 0.8.2, bei der die Linien vor dem Versuch, eine Übereinstimmung zu erzielen, aufgeteilt werden und daher niemals Linien gelöscht werden können, wenn die Übereinstimmung mehr als eine Linie gleichzeitig umfassen muss.)Suchen Sie nach Zeilen, die möglicherweise beginnen
un
, gefolgt von mindestens einer Zeile, gefolgt von einer Zeile, dieun
nur beginnt, wenn die ursprüngliche Zeile nicht übereinstimmt, während der Rest der Zeile identisch ist.Verschieben Sie die ursprüngliche Zeile um eine Zeile nach unten und fügen Sie sie
under
an die gerade durchlaufene Zeile an. (Zusätzliche Zeilen werden von der Wiederholung behandelt.)quelle
Python 2 , 106 Bytes
Probieren Sie es online!
Wenn die Eingabe eine Liste von STDIN sein kann und die Ausgabe durch Zeilenumbrüche getrennt ist, haben wir diese 94-Byte-Lösung:
quelle
JavaScript (Babel Node) , 91 Byte
Übernimmt die Eingabe als ein Array von Zeichenfolgen in Kleinbuchstaben. Gibt ein weiteres Array von Zeichenfolgen zurück.
Probieren Sie es online!
Kommentiert
quelle
Sauber , 147 Bytes
Probieren Sie es online!
quelle