Einführung
Alice ist eine 2-D-Sprache von Martin Ender, die zwei verschiedene Ausführungsmodi hat, Kardinal und Ordinal . Wenn der Befehlszeiger übergibt , durch einen Spiegel (entweder /
oder \
), schaltet er von einem Modus zum anderen.
In dieser Herausforderung konzentrieren wir uns auf den Ordnungsmodus , in dem Befehle auf Zeichenfolgen ausgeführt werden und der Befehlszeiger sich diagonal bewegt und gegen die Kanten des Codes prallt.
Einfache Programme, die nur im Ordnungsmodus arbeiten, können in einem recht kompakten Stil geschrieben werden, wie im folgenden Beispiel:
/fbd/
@aec\
Hier wird die IP beginnt in Kardinal - Modus von der ersten Zelle in Richtung Osten, durch den ersten Spiegel und beginnt sich zu bewegen diagonal und Prellen, Ausführen von Befehlen a
, b
und c
. Es trifft dann den Nordosten Spiegel, der es nach Süden in Richtung der anderen Spiegel gehen lässt und starten Sie dann zurück in Richtung Westen prallt, stoßen Befehle d
, e
, f
und schließlich @
, die das Programm beendet.
Diese Art von Struktur ist recht kompakt, aber nicht einfach zu schreiben und zu warten (das Hinzufügen eines einzelnen Befehls kann dazu führen, dass wir den größten Teil des Codes neu anordnen müssen!). Daher möchte ich, dass Sie mir bei der Formatierung helfen.
Die Aufgabe
Ordnen Sie bei einer Befehlsfolge, bei der jeder Befehl ein einzelnes druckbares ASCII-Zeichen ist, diese in zwei Zeilen neu an, sodass die erste Hälfte der Folge beginnend mit dem ersten Zeichen der zweiten Zeile gelesen werden kann und sich dann immer diagonal nach rechts bewegt. während die zweite Hälfte gelesen werden kann, wobei die verbleibenden Zeichen von rechts nach links genommen werden. Mach dir keine Sorgen über Spiegel und das Abschlusssymbol, ich werde sie selbst hinzufügen.
So abcdef
sollten Sie beispielsweise bei gegebener Eingabe ausgeben
fbd
aec
Wenn die Eingabe ungerade ist, sollten Sie irgendwo ein einzelnes Leerzeichen hinzufügen (was in Alice ein Noop ist), solange die Reihenfolge der gefundenen Befehle gleich bleibt. Sie können auch zwei Zeilen ausgeben, deren Länge sich um ein Zeichen unterscheidet. In diesem Fall wird davon ausgegangen, dass die kürzere Zeile am Ende ein einzelnes Leerzeichen enthält.
Regeln
Dies ist Code-Golf , die kürzeste Antwort in Bytes gewinnt!
- Sie können über eine der Standardeingabe- / Ausgabemethoden eingeben / ausgeben
- Die Eingabe besteht aus einer einzelnen Zeile druckbarer ASCII-Zeichen
- In der Ausgabe ist eine einzelne nachfolgende Newline zulässig
- Einige Ausgaben Ihres Programms verhalten sich möglicherweise nicht vollständig korrekt, wenn sie als Alice-Programme ausgeführt werden (z. B. wenn der Auffüllbereich in ein Zeichenfolgenliteral eingefügt wird). Sie müssen sich nicht mit diesen Situationen befassen
- Standardlücken sind verboten
Testfälle
--Input
abcdef
--Output
fbd
aec
--Input
123
--Output
2
13
OR
31
2
OR
3
12
OR
32
1
--Input
O
--Output
O
OR
O
--Input
"Hello, World!"o
--Output
oH!lloo
""edlr,W
--Input
i.szR.szno
--Output
o.zz.
inssR
--Input
" ^^} .~[}.~~[}{~~{}[^^^^.""!}"r.h~;a*y'~i.*So
--Output
o *^i}'.*[;.h~r}}~"{.[^
"S .^~ y~a}~~.["{!~"}^^^
(Odd length, your solution may be different)
Gelee ,
2322 Bytes-1 Byte dank Leo (unten links kann die Auffüllung sein)
Ein vollständiges Programm, das das Ergebnis druckt (der monadische Link gibt eine Liste mit Listen mit Zeichenlisten zurück).
Probieren Sie es online aus! oder sehen Sie sich eine Testsuite an .
Wie?
quelle
JavaScript (ES6), 104 Byte
Funktioniert durch Emulieren des Ausführungspfads und Ausfüllen der Befehle.
quelle
1&~i
erreicht den vertikalen Zick-Zack, während dasi+i>l?l-i:i
den halben Spiegel erreicht. Sobald alle Befehle an den gewünschten Ausführungspositionen eingegeben wurden, wird das Array zusammengetragen, um das gewünschte Ergebnis zu erzielen.