Einführung
Die Karte des Bäckers ist ein wichtiges dynamisches System, das chaotisches Verhalten aufweist. Es ist eine Funktion vom Einheitsquadrat bis zu sich selbst, die intuitiv wie folgt definiert wird.
- Schneiden Sie das Quadrat vertikal in zwei Hälften, um zwei Rechtecke zu erhalten
0.5×1
. - Stapeln Sie die rechte Hälfte über die linke, so dass ein Rechteck entsteht
0.5×2
- Komprimiere das Rechteck wieder zu einem
1×1
Quadrat.
In dieser Herausforderung implementieren Sie eine diskrete Version dieser Umwandlung.
Ein- und Ausgang
Bei Ihrer Eingabe handelt es sich um ein 2D-Array druckbarer ASCII-Zeichen und 2m×2n
bei einigen um Leerzeichen m, n > 0
. Ihre Ausgabe ist ein ähnliches Array, das mithilfe des 6×4
Arrays wie folgt erhalten wird
ABCDEF
GHIJKL
MNOPQR
STUVWX
als Beispiel. Stapeln Sie zuerst die rechte Hälfte des Arrays über die linke Hälfte:
DEF
JKL
PQR
VWX
ABC
GHI
MNO
STU
Teilen Sie dann die Spalten in Zeichenpaare auf und drehen Sie jedes Paar unabhängig voneinander um 90 Grad im Uhrzeigersinn, um das hohe Rechteck wieder in die ursprüngliche Form zu "komprimieren":
JDKELF
VPWQXR
GAHBIC
SMTNUO
Dies ist die korrekte Ausgabe für das obige Array.
Regeln
Die Eingabe- und Ausgabeformate sind flexibel. Sie können durch Zeilenumbrüche getrennte Zeichenfolgen, Listen von Zeichenfolgen oder 2D-Arrays von Zeichen verwenden. Die Eingabe und Ausgabe müssen jedoch genau dasselbe Format haben: Sie müssen in der Lage sein, Ihre Eingabe beliebig oft für eine gültige Eingabe zu wiederholen.
Sie können entweder ein vollständiges Programm oder eine Funktion schreiben. Die niedrigste Byteanzahl gewinnt, und Standardlücken sind nicht zulässig.
Testfälle
Input:
12
34
Output:
42
31
Input:
Hell
! o
d -
lroW
Output:
lol
o W-
!H e
ldr
Input:
ABCDEF
GHIJKL
MNOPQR
STUVWX
Output:
JDKELF
VPWQXR
GAHBIC
SMTNUO
Input:
*___ ___ o
o|__) |__) *
*| | o
o __ __ *
*| | _ o
o|__ |__| *
Output:
|_____) *o
|_ _ *o
||_ __| *o
o*|_____)
o* |_ _
o*||_ _
c2k
stattck/lk2
.c2k
Teilt die Zeichenfolge in zwei gleiche Teile.Julia, 136 Bytes
Eine sehr einfache Implementierung. Kein besonders konkurrenzfähiger Beitrag, aber es hat Spaß gemacht!
Dadurch wird eine Lambda-Funktion erstellt, die ein zweidimensionales Array als Eingabe akzeptiert und ein transformiertes zweidimensionales Array zurückgibt.
Ungolfed + Erklärung:
Um es aufzurufen, geben Sie der Funktion einen Namen, z
f=A->(...)
.Beispielausgabe:
Und der Beweis, dass es beliebig verkettet werden kann:
Vorschläge sind wie immer willkommen und ich gebe gerne weitere Erklärungen.
quelle
CJam,
2524 BytesEinfache Implementierung der Spezifikation. Erläuterung:
Probieren Sie es hier online aus
quelle
JavaScript (ES6), 104
141Bearbeiten Beim Überprüfen der Spezifikation stellte ich fest, dass die Anzahl der Zeilen gerade sein muss (das habe ich zuvor verpasst). So ist es nicht allzu kompliziert, in einem einzigen Schritt die richtige Quellenposition für jedes Zeichen in der Ausgabe zu finden.
Test In der Firefox / FireBug-Konsole
Ausgabe
quelle
J
4539 BytesJ hat eine Tessellation-Funktion (Cut
;.
), die sehr hilfreich ist.quelle
Haskell,
128127 BytesVerwendung:
f ["12", "34"]
->["42","31"]
Wie es funktioniert:
Edit: @Zgarb hat ein zu speicherndes Byte gefunden.
quelle
g x=x
für den leeren Listenfall tun .GNU sed -r, 179 Bytes
Die Punktzahl enthält +1 für das zu
-r
sedierende Argument.Es hat eine Weile gedauert, bis ich herausgefunden habe, wie das funktioniert
sed
, aber ich glaube, ich habe es jetzt:Beachten Sie, dass alle oben genannten Leerzeichen aus einzelnen tabZeichen bestehen sollten. Kommentare sind in der Golfwertung nicht enthalten.
Beachten Sie auch, dass dies in großem Umfang
:
Markierungszeichen verwendet. Wenn der Eingabestream enthält:
, tritt undefiniertes Verhalten auf. Dies kann abgemildert werden, indem alle:
Zeichen durch nicht druckbare Zeichen (z. B. BEL) ersetzt werden. Dies ist für die Golfwertung kostenlos .Eingabe und Ausgabe ist eine durch Tabulatoren getrennte Liste von Zeichenfolgen:
quelle
J,
3332 ZeichenEin monadisches Verb.
Erläuterung
Beginnen wir mit der Definition
Y
, dass dies unser Beispiel ist.Der erste Teil (
-:@#@{. (}. ,. {.) |:
) wirdY
in zwei Hälften geteilt und an das Ende angehängt:Im zweiten Teil (
_2 |.\"1
) teilen wir dies in Zweierpaare auf und kehren sie um:Schließlich (
0 2 ,.@|:
) transponieren wir die Matrix nach Bedarf und verwerfen die nachlaufende Achse:Der gesamte Ausdruck mit eingefügtem Leerzeichen:
Und als explizites Verb:
quelle