Eingang:
Zwei Zeichenfolgen (HINWEIS: Die Reihenfolge der Eingabe ist wichtig).
Ausgabe:
Beide Wörter / Sätze beginnen in Zeilen mit einer Leerzeile dazwischen. Sie gehen horizontal nebeneinander. Wenn sie jedoch denselben Charakter an derselben Position haben, kreuzen sie sich und gehen dann „nebeneinander“ weiter.
Verwirrend, sagst du? Nennen wir ein Beispiel:
Eingabe: Words crossing over
& Ducks quacking
:
Word quack n
s i g
Duck cross n over
Entschuldigen Sie den schlechten MS-Lack.
Herausforderungsregeln:
- Wir gehen immer zuerst eine gerade Linie zurück, nachdem wir überquert haben, bevor wir wieder überqueren können (siehe Testfall oben {1} - wo
ing
ist gleich, aber nachdem wir überquert habeni
, müssen wir zuerst zurückgehen geradeaus gehen (also ignorierenn
), bevor wir wieder weiter gehen könneng
). - Die Eingaben können unterschiedlich lang sein. In diesem Fall geht die längere Eingabe in einer geraden Linie weiter (siehe Testfälle 1, 2, 4 und 6).
- Beide Eingänge können gleich sein (siehe Testfall 3).
- Die Eingaben enthalten keine Tabulatoren oder Zeilenumbrüche.
- Leerzeichen werden als gleiche Zeichen ignoriert (als Randzeichen) . In diesem Fall wird das nächste (nicht-Leerzeichen-) Zeichen (falls vorhanden) gekreuzt (siehe Testfälle 3, 5 und 6).
- Die Eingaben dürfen keine benachbarten Zeichen (keine Leerzeichen) an derselben Position enthalten. In diesem Fall bewegen sich beide nur horizontal in einer geraden Linie (siehe Testfälle 2).
- Auch wenn das erste Zeichen gleich ist, beginnen wir immer zwei Zeilen auseinander (siehe Testfälle 3 & 6).
- Nachgestellte Leerzeichen und eine einzelne nachgestellte neue Zeile sind optional.
- Sie können davon ausgehen, dass die Eingaben nur druckbare ASCII-Zeichen enthalten (ohne Zeilenumbrüche und Tabulatoren).
- Die Eingänge sind fallempfindlich, so
A
unda
nicht gleich sind , und werden nicht überkreuzen (siehe Testfall 7). - Beide Eingangslängen betragen immer mindestens 2.
- Eingabe und Ausgabe können in jedem vernünftigen Format erfolgen. Kann eine einzelne Zeichenfolge mit Zeilenumbrüchen sein. ein String-Array / eine Liste; gedruckt nach STDOUT; 2D-Array von Zeichen; etc.
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie ggf. auch eine Erklärung hinzu.
Testfälle:
1. Input: "Words crossing over" & "Ducks quacking"
1. Output:
Word quack n
s i g
Duck cross n over
2. Input: "bananas" & "ananas"
2. Output:
bananas
ananas
3. Input: "I see my twin!" & "I see my twin!"
3. Output:
I e y w n
s e m t i !
I e y w n
4. Input: "Is the weather nice?" & "Not really, no.."
4. Output:
Is th ally, no..
e
Not r weather nice?
5. Input: "Codegolf & Programming Puzzles" & "The golfer might solve puzzles"
5. Output:
Code o f & Programming P z l s
g l u z e
The o fer might solve p z l s
6. Input: "Can you turn the lights off?" & "Can you try to solve this?"
6. Output:
C n o urn the ve s off?
a y u t l t
C n o ry to so igh his?
7. Input: "one Ampere" & "two apples"
7. Output:
one Am les
p
two ap ere
8. Input: "Words crossing" & "Words Quacking"
8. Output:
W r s cross n
o d i g
W r s Quack n
Kohle , 69 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
quelle
Python 2 ,
217210 Bytes-1 byte dank officialaimm
Probieren Sie es online!
quelle
s=' '
Haskell,
142138 BytesProbieren Sie es online!
Wie es funktioniert:
quelle
g 0
. In Bezug auf das fehlende Wort: "a" wie in "Variable a", aber das ist in der Tat verwirrend, also habe ich es umformuliert.a
. :) Ich persönlich benutzea
in meinen Erklärungen bei der Angabe der Variablen, obwohl es in der Regel klar genug ist, ohne. Vielen Dank für die Klarstellung, und ich hatte in der Tat eine ziemlich einfache Fehlerbehebung dafür erwartet.'
mit einem Back-tick ersetzt wird) in einem Kommentar mehr, das ist , was ich sagen wollte .. (Also ich zurück-Zecken um Variablen, in meinen Code-Blöcken.)JavaScript (ES6), 112 Byte
Ungolfed:
Testfälle:
Code-Snippet anzeigen
quelle
APL (Dyalog) , 50 Bytes
Probieren Sie es online!
⍵⍀⍨¯1*⍳4
gibt die Matrix an:(Die Punkte stehen für Leerzeichen.) Die Spalten werden um unterschiedliche Beträge gedreht, sodass die ersten drei Zeilen wie das gewünschte Ergebnis aussehen - daher die
3↑
fast am Anfang. Der Rest des Algorithmus berechnet die Rotationsbeträge.Innerhalb der Parens:
3↑⍵
Erstellt eine Matrix wieund
2=⌿
vergleicht seine Zeilen paarweise, dh die erste Zeichenfolge mit der zweiten Zeichenfolge und die zweite Zeichenfolge mit der Zeile mit allen Leerzeichen.Wir sind daran interessiert, wo ersteres wahr (1) und letzteres falsch (0) ist, also reduzieren wir mit
>⌿
, um einen booleschen Vektor mit dem Namen zu erhaltena
.Jetzt müssen wir in jedem Abschnitt von 1 s die geraden Vorkommen auf Null setzen, da keine zwei Drehungen nebeneinander auftreten können. Zuerst erhalten wir eine Nummerierung wie:
durch, grob gesagt, ersetzt
a[i]
mit ,a[i]*max(a[i-1]+1, a[i])
bis das Ergebnis stabilisiert:{⍵⌈a×1+1,¯1↓⍵}⍣≡
, und wir nehmen diese mod 2:2|
Jetzt wissen wir, wo die Drehungen auftreten werden. Wir kopieren jeweils
1
nach links -2∨/
(paarweise "oder"):und berechnen Sie die Teilsummen -
+\
Das gibt uns die Säulendrehungsbeträge, die wir am Anfang benötigten. Modulo 4 ist impliziert.
quelle
Perl 5 , 211 Bytes
Probieren Sie es online!
# Perl 5 , 234 BytesBehebung des Fehlers, auf den Kevin hingewiesen hat
Probieren Sie es online!
quelle
"Can you turn the lights off?" & "Can you try to solve this?"
ich anscheinend eine Fehlermeldung:Modification of non-creatable array value attempted, subscript -1 at .code.tio line 1, <> line 2.
Ist das ein Fehler, oder mache ich etwas falsch? Hier ist der TIO.05AB1E , 31 Bytes
Port der Japt -Antwort von @ETHproductions , aber mit zwei kleinen Unterschieden:
1) Ich nehme die Eingabe als 2D-Liste von Zeichen anstelle einer Liste von Zeichenfolgen.
2) In
counter_variable
05AB1E ist standardmäßig 0 anstelle von 11 (oder 3) wie inB
in Japt, alsoNĀ
wird das als zusätzliche Kontrolle in die Karte eingefügt (und ich drehe nach rechts statt nach links).Probieren Sie es online oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle