Eingang:
Ein Faden
Ausgabe:
1) Zuerst entfernen wir das Zeichen am Ende der Eingabe-Zeichenkette, bis wir eine Länge haben, die ein Quadrat ist (dh 1, 4, 9, 16, 25, 36 usw.).
Also abcdefghijklmnopqrstuvwxyz
(Länge 26) wird abcdefghijklmnopqrstuvwxy
( Länge 25).
2) Dann setzen wir dies in ein Quadrat, eine Zeile nach der anderen, von links nach rechts:
abcde
fghij
klmno
pqrst
uvwxy
3) Wir falten es in alle vier Richtungen (wir entfalten solange, bis der äußere gefaltete 'Block' keine inneren Zeichen mehr hat, die sich entfalten könnten):
m
qrs
l n
ghi
abcde
ihgf jihg
mn lk on lm
srqp tsrq
uvwxy
qrs
l n
ghi
m
Einige Dinge, die zu beachten sind, wenn wir nach außen klappen, spiegeln wir im Grunde wie folgt wider (Zahlen zur Verdeutlichung hinzugefügt, die die 'Indizes' in diesen Beispielen darstellen):
Wenn wir die linke Seite ausklappen:
123 to: 321 123
fghij ihgf j
Wenn wir die rechte Seite falten:
123 to: 123 321
fghij f jihg
Wenn wir nach oben klappen:
3q
2l
1g
b to: b
1g 1
2l 2
3q 3
v v
Wenn wir nach unten klappen:
b b
1g 1
2l 2
3q 3
v to: v
3q
2l
1g
Herausforderungsregeln:
- Sie können davon ausgehen, dass die Eingabe immer mindestens 1 Zeichen hat (dies ist auch die Ausgabe).
- Das Ausgabeformat ist flexibel, sodass Sie auf STDOUT oder STDERR drucken können. Rückgabe als String-Array / Liste oder Zeichen-2D-Array; Einzelsaite mit Zeilenumbrüchen; etc.
- Die Eingabe enthält nur alphanumerische Zeichen (
a-zA-Z0-9
) - Sie können auch ein nicht alphanumerisches Zeichen verwenden, um die Leerzeichen in und / oder um die ASCII-Kunst-Ausgabe herum aufzufüllen, wie z
.
. B. einen Punkt . - Nachgestellte Leerzeichen und eine einzelne nachgestellte neue Zeile sind optional.
- Wir setzen die Entfaltung fort, bis der äußere gefaltete 'Block' keine Zentren mehr zum Entfalten hat.
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:
Input: abcdefghijklmnopqrstuvwxy
Output:
m
qrs
l n
ghi
abcde
ihgf jihg
mn lk on lm
srqp tsrq
uvwxy
qrs
l n
ghi
m
Input: A
Ouput:
A
Input: ThisIsATest
Output:
I
Thi
Is sI
ATe
I
Input: HowAboutAVeryLongExampleWhichIsAlsoAnEvenSquareInsteadOfOddOneAndExceeds64Chars
Output:
An
ch
xamp
i I
o E
quar
steadO
S e
s v
h s
E l
VeryLo
HowAbout
oLyreVA noLyreV
xampl Eg el Examp
hci Is hW As hi Ihc
nAo Ev sl ev so EnA
quare Sn Ie Squar
Odaetsn fOdaets
OddOneAn
steadO
S e
s v
h s
E l
VeryLo
xamp
i I
o E
quar
An
ch
Input: Lenght7
Output:
Le
ng
Input: abc
Output:
a
Antworten:
SOGL V0.12 , 75 Bytes
Probieren Sie es hier aus!
Dies erwartet die Eingabe auf dem Stapel, so dass ich
,
zu Beginn aus Gründen der Benutzerfreundlichkeit hinzugefügt habe . Das kann zu Problemen führen, wenn die Eingabe nur Zahlen enthält. Hier ist eine Testsuite dafür.70 Bytes
√lH»{ā;l⁾:A∫Ba{bIwFIWhFbž;FIbI@ž}};}¹K⁴{ē2\⌡±e{@Κ};⁴┼┼};0E{ē2\⌡№:h++}╚
funktionieren auch, aber da ich erst jetzt√
Strings implementiert habe und in der Dokumentation nicht erwähnt wurde, dass es die Länge überschreiten würde, werde ich es nicht zählen.Erläuterung:
quelle
√
nur mit Zahlen funktioniert hat. Der Grund, warum ich die 75-Byte-Version nicht zähle, ist, dass ich das Gefühl habe, dass es unter die Lücke fällt, eine eingebaute Version nur für eine HerausforderungHolzkohle ,
120109 BytesProbieren Sie es online! Beachten Sie, dass
A
seitdem geändert wurde≔
und der Link dies widerspiegelt. Erläuterung:Berechnet
h = int(sqrt(len(q)))
. (Floor
war noch nicht implementiert ...)Extrahiert die
h
Längenschnitteh
aus der Eingabe. (Eigentlich störe ich nicht daran, die Slices auf Länge zu kürzenh
.) Ich verwendefor
eher eine Schleife als eine,Map
weil ichAssign
das Ergebnis desMap
Irgendwo brauche, und das ist nicht trivial, wenn ich mit einer zu tun habeSlice
.Die Entfaltung erfolgt viermal, einmal für jede Richtung (nach unten, rechts, oben, links, wie codiert). Die Schleifenvariable für diese Schleife ist
i
.Nehmen Sie eine Kopie der aufgeschnittenen Schnur.
Springe zurück zum Ursprung der Leinwand, so dass jede Entfaltung mit dem
h
-by-h
Quadrat an derselben Stelle beginnt .Wiederholen Sie die
(h+1)/2
Zeiten; einmal für jede Entfaltung plus einmal für das ursprüngliche Quadrat. Die Schleifenvariable für diese Schleife istk
.Wiederholen Sie diesen Vorgang viermal für jede Seite des entfalteten Quadrats. (Ich benutze die Schleifenvariable nicht
l
.)Drucken Sie eine Seite des entfalteten Quadrats. Da dies die
k
dritte Entfaltung ist, ist die Seite des Quadratsh-2k
undk
entfernt Zeichen vom Rand des ursprünglichen Quadrats.Drehpunkt bereit, um die nächste Seite des Quadrats zu drucken.
Den aufgeschnittenen Faden drehen. (Ja, das ist eine
ξ
. Ich kann es nicht oft benutzen!)Eη
Würde auch für das Äußere funktionierenMap
. Die Drehung hat auch den praktischen Nebeneffekt, dass die Breite des Arrays auf abgeschnitten wirdh
.Nach dem Drucken der Seite bewegt sich der Cursor vom Rand des Quadrats weg. Das Drucken eines Zeichens weniger schlägt für Felder der Seite 1 fehl und ist ohnehin weniger golfen. Nachdem zuvor gedreht wurde, bewegt das Drucken einer neuen Zeile den Cursor bequem zurück in die Ecke.
Drehen Sie das Quadrat je nach Bedarf vertikal oder horizontal.
Berechnen Sie die Verschiebung zur nächsten Entfaltung.
Bewegen Sie sich je nach Bedarf horizontal oder vertikal zur nächsten Entfaltung.
Hier ist ein Link zu der 97-Byte-Version, die Sie erhalten, wenn Sie die neuesten Funktionen von Charcoal nutzen
Floor
: Probieren Sie es online aus! Link ist eine ausführliche Version des Codes.quelle