Produzieren Sie bei einer quadratischen Zeichenfolge die gesamte Ausgabe für die Zeichenfolge in jeder Phase des Aufwickelns.
Die Schnur muss sich jeweils um eine Viertelumdrehung im Uhrzeigersinn entfalten.
Beispiele
Eingabe :
A
Ausgabe :
A
Hinweis : Die für diesen speziellen Testfall duplizierte Eingabe wird nur akzeptiert, wenn dies dazu beiträgt, die Anzahl der Bytes zu verringern.
Eingabe :
DC
AB
Ausgabe :
DC
AB
D
ABC
ABCD
Eingabe :
GFE
HID
ABC
Ausgabe :
GFE
HID
ABC
HG
IF
ABCDE
IH
ABCDEFG
I
ABCDEFGH
ABCDEFGHI
Eingabe :
JIHG
KPOF
LMNE
ABCD
Ausgabe :
JIHG
KPOF
LMNE
ABCD
LKJ
MPI
NOH
ABCDEFG
NML
OPK
ABCDEFGHIJ
ON
PM
ABCDEFGHIJKL
PO
ABCDEFGHIJKLMN
P
ABCDEFGHIJKLMNO
ABCDEFGHIJKLMNOP
Regeln
Das ist Code-Golf, also gewinnt der kürzeste Code in Bytes.
- Jedes vernünftige Format kann für die E / A verwendet werden, sofern es konsistent ist.
- Leerzeichen müssen verwendet werden, um die oberen Zeilen der Ausgabe aufzufüllen.
- Muss in der Lage sein, alle druckbaren Zeichen (einschließlich Leerzeichen:
\x20
-\x7e
) einzugeben :
! "# $% & '() * +, -. / 0123456789:? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _` abcdefghijklmnopqrstuvwxyz {|} ~
- Führende / nachfolgende Leerzeichen sind zulässig.
- Sie können davon ausgehen, dass die Zeichenfolge immer ein Quadrat ist.
- Alle Standardlücken sind verboten.
Inspiration: Schreiben Sie ein quadratisches Programm, das ausgibt, wie oft es „abgewickelt“ wurde .
["A","A"]
für ausgeben"A"
, wie es mein Programm tut (anstelle von["A"]
)? Es erscheint mir vernünftig, da es sich nur um die Anfangs- und Endposition handelt und Sie versuchen, sie nur einmal zu entfalten.Antworten:
SOGL V0.12 ,
2120191817 BytesProbieren Sie es hier aus! (
→
hinzugefügt, da dies Eingaben auf dem Stapel erwartet)Erläuterung:
quelle
Python 2 ,
209 207 205 203 202 201 200196 Bytes-4 Bytes dank @Quelklef !
Probieren Sie es online!
Python 2 ,
219 217 215 213 212 211207 BytesProbieren Sie es online!
Der erste gibt als Liste von Strings aus, der zweite als ASCII-Art.
quelle
[::-1][1:]
kann sein[-2::-1]
, wie in Lynns Antwort.Holzkohle ,
42-35BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Bearbeiten: Speichert 7 Bytes, hauptsächlich durch Umschalten von Zeichenfeldern auf Zeichenfolgen. Erläuterung:
Lesen Sie das Eingabequadrat als Array von Zeichenfolgen in die Variable
q
.Entfernen Sie die letzte Zeichenfolge in dem Array, obwohl sie nicht leer ist.
Drucken Sie den Rest des Arrays.
Drehen Sie den Rest des Arrays, indem Sie jedes Zeichen der letzten Zeichenfolge durchlaufen und das
l
vierte Zeichen jeder verbleibenden Zeichenfolge in dem umgekehrten Array verbinden.Hängen Sie die zuvor entfernte letzte Zeichenfolge an
u
, die den entfalteten Wert enthält, und drucken Sie sie aus.Geben Sie das Ergebnis aus und löschen Sie die Zeichenfläche, um sie für die nächste Iteration vorzubereiten.
Beachten Sie, dass diese Version die endgültige Entfaltung in einer separaten Zeile ausgibt, wenn dies unerwünscht ist, dann für 38 Bytes:
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
←E⁺⟦⪫υω⟧⮌θ⮌κ
Kehrt das aktuelle Array um, stellt die entfaltete Zeile voran, kehrt die Zeichen in jeder Zeile um und druckt dann alles auf den Kopf, um das gewünschte Ergebnis zu erzielen.quelle
Rotate
undTrim
den Cursor verlassen ...Haskell ,
127120 BytesProbieren Sie es online!
Eingabe ist eine Liste von Zeilen, zum Beispiel
["DC","AB"]
für den zweiten Testfall Ausgabe eine Liste von Listen der Zeilen:[["DC","AB"],[" D","ABC"],["ABCD"]]
. Verwenden SiemapM (putStrLn . unlines)
diese Option, um das Ergebnis hübsch auszudrucken.Bearbeiten: Sie haben 7 Bytes gespart, indem Sie festgestellt haben , dass der kürzere
transpose
Wert, den ich während eines Go-Vorgangs gefunden habe, nützlich ist, da er geändert werden kann, um jeden transponierten Wert direkt umzukehren.quelle
05AB1E , 18 Bytes
Probieren Sie es online!
Erläuterung
quelle
J, 62 Bytes
Probieren Sie es online!
Ich bin mir sicher, dass man hier viel Golf spielen kann. Dadurch werden zusätzliche Leerzeichen gedruckt, jedoch nur aufgrund der Art und Weise, in der J die im ausgegebenen Array enthaltenen Arrays so formatiert, dass sie dieselbe Form haben.
Ich denke, wenn ich einmal reingehe und genau kommentiere, was ich tue, bekomme ich vielleicht eine bessere Vorstellung davon, wie man Golf spielt (nachdem ich das jetzt getan habe, weiß ich es nicht wirklich ...). Für die Zwecke des Golfspiels ist es erwähnenswert, dass
Erläuterung
Wenn ich dies nicht spiele, teile ich die Hauptfunktion in drei Teile.
Wir werden mit dem zweiten Testfall arbeiten.
unfurl_reversed
Dies gibt einem die einmal abgewickelte Saite, jedoch in umgekehrter Reihenfolge. All dies geschieht in umgekehrter Reihenfolge, so dass die Art und Weise, in der J Zeichenfolgen automatisch mit Leerzeichen auffüllt, die der Form des Arrays entsprechen, in dem sie sich befinden, den richtigen Abstand ergibt.
|:@}:
ist die Transponierte des Eingangs|.@{:
ist die Umkehrung des Endes der EingabeIch denke, Sie können sehen, was wir tun wollen: Wir wollen die Rückseite des Schwanzes an den letzten Teil der Transponierung des Abschnitts anhängen (das ist ein Schluck, aber im Grunde genommen an
CBA
das Ende von anhängenED
). Dies gibt uns einen Schritt zum Entfalten, umgekehrt.(}:@],{:@],[)
macht genau das.Es hängt
CBA
zuED
, schließt sich dann die mit dem Rest des Arrays. Unsere Ausgabe ist daherwhitespace_filter
Grundsätzlich wird hiermit geprüft, ob eine Zeile vollständig Leerzeichen enthält, und es wird entfernt, wenn dies der Fall ist. Bei der ersten Iteration des Testfalls wird nichts unternommen.
Dies ist notwendig (zumindest bis ich eine Alternative gefunden habe), da wir sonst irgendwann Leerzeichen in unserer Ausgabezeichenfolge auflösen.
entfalten
Unfurl fügt im Grunde genommen die anderen Funktionen zusammen und in Sonderfällen einzelne Zeicheneingaben.
Wenn der Potenz von verb (
^:
) das leere Kästchen (a:
) zugewiesen wird, wendet sie eine Funktion auf eine Eingabe an, bis sie konvergiert und die Ergebnisse in einem Array sammelt.(1 < #)
prüft, ob die Zeilen immer größer als 1 sind (in Sonderfällen 1 Zeileneingaben).|."1
Kehrt jede Zeile um, sodass die Ergebnisse von invertiert werdenwhitespace_filter @: unfurl
.quelle
Python 2 ,
143132 BytesProbieren Sie es online!
b
Ist in jeder Iteration der „Kopf“ der Zeichenfolge (erste n - 1 Zeilen) um 90 Grad gedreht: Wenna
ist,[" NML", " OPK", "ABCDEFGHIJ"]
dannb
ist["ON", "PM", "KL"]
.Um eine Zeichenfolge einmal zu entfalten, fügen wir die letzte Zeile von
b
toa[-1]
(giving"ABCDEFGHIJKL"
) hinzu und berechnen sie dann neu,a[:-1]
indem wir den restlichen Zeichenfolgen in Leerzeichen hinzufügenb
.Wir beenden, indem wir versuchen, herauszufinden,
b
wann es leer ist.Python 2 , 132 Bytes
Probieren Sie es online!
Gleiche Idee, anders geschrieben. Wir beenden, indem wir versuchen,
a.pop(-2)
wanna
nur ein Element hat.quelle
Perl 5 , 155 Bytes
Probieren Sie es online!
Ein paar Bytes gespart, ohne die Logik wirklich zu verändern. Der Fluss unten ist im Grunde immer noch korrekt.
# Perl 5 , 163 BytesProbieren Sie es online!
Wie?
quelle