Betrachten Sie diese Spirale
###########
#
# #######
# # #
# # ### #
# # # # #
# # # # #
# # # #
# ##### #
# #
#########
Ausgehend von der Mitte:
- Die erste Zeile (nach oben) besteht aus 3 Zeichen.
- Die zweite Zeile hat die gleiche Anzahl von Zeichen (3)
- Als nächstes fügen wir zwei Zeichen (5) für die nächsten beiden Seiten hinzu.
- Dieses Muster setzt sich fort, zwei Seiten gleicher Länge erhöhen dann die Länge um 2.
Ich möchte diese Spirale für N Linien erzeugen.
- Schreiben Sie in einer beliebigen Sprache.
- Die Eingabe / das Argument usw. ist die Anzahl der Zeilen in Ihrer Spirale.
- Jede Zeile beginnt mit dem Endzeichen der vorherigen Zeile im Uhrzeigersinn um 90 Grad gegenüber der vorherigen Zeile.
- Es ist mir egal, wie viel Leerzeichen vor oder nach jeder Zeile stehen, solange die Elemente der Spirale in einer Linie stehen.
- Geben Sie Text aus, um die Spirale mit einem von Ihnen ausgewählten Nicht-Leerzeichen zu zeichnen.
- Versuchen Sie dies in der kleinsten Anzahl von Bytes zu tun.
Testfälle (mit einem Hash als Ausgabe):
N = 1
#
#
#
N = 2
###
#
#
N = 3
###
# #
# #
#
#
N = 10
###########
#
# #######
# # #
# # ### #
# # # # #
# # # # #
# # # #
# ##### #
# #
#########
*
statt#
. Erwartet?Antworten:
05AB1E ,
1311 BytesCode:
Vielen Dank an Emigna für das Speichern von zwei Bytes!
Verwendet die 05AB1E- Codierung. Probieren Sie es online!
Erläuterung
Die Länge jeder einzelnen Kante der Spirale beginnt mit der Länge 3 und erhöht sich schrittweise alle zwei Schritte um zwei:
Dies gibt uns im Grunde die gewünschte Liste von Längen.
Die Zeichenfläche fungiert als eine Funktion, die drei Parameter einblendet (wobei der am weitesten rechts stehende Parameter zuerst eingeblendet wird): <Länge (n)> , <Zeichen (n)> , <Richtung (en)> . Der directions-Parameter ist in diesem Fall eine Liste von Zahlen. Die Nummern, die den Richtungen entsprechen, sind:
In diesem Fall entspricht [0, 2, 4, 6] der Richtungsliste
[↑, →, ↓, ←]
. Die Zeichenfläche iteriert über jede Länge, die aus der Längenliste abgerufen wurde, verwendet das Zeichen '#' und iteriert zyklisch über die Richtungsliste.quelle
0246S
=3Ý·
Python 2 ,
176170165161157 BytesProbieren Sie es online!
Wiederholt: Dreht
g
dien
Iteration der Spirale in eine 'kanonische' Position (ähnlich N = 3 oder N = 7), fügt ein neues Segment hinzu, indem links von jeder vorhandenen Zeile 2 Leerzeichen hinzugefügt werden und dann die letzte Zeile ersetzt wird mit allen'#'
s (was zu einer Position führt, die mit N = 4 oder N = 8 vergleichbar ist), und schließlichg
erneut verwenden, um sie zurück in die richtige Position zu drehen. Aufschäumen, ausspülen, wiederholen.quelle
Kohle ,
161514 Bytes-2 Bytes dank @Neil .
Probieren Sie es online (ausführlich) oder online (rein) .
Erläuterung:
Die Druckrichtung ist standardmäßig rechts und wir möchten nach oben starten, also drehen wir uns zunächst um 45 Grad gegen den Uhrzeigersinn:
Dann Schleife
i
im Bereich[0, input)
:Drucken Sie eine neue Zeile, um den Effekt des Zurückrückens um eine Position nachzuahmen:
Drucken "#"
x
Höhe der Zeit in der Stromrichtung:Wo
x
ist3 + i // 2 * 2
:Und drehen Sie dann 45 Grad im Uhrzeigersinn für die nächste Iteration der Schleife:
quelle
⊗÷ι²
ist ein Byte kürzer als⁻ι﹪ι²
. Sie können den Effekt des Zurücksetzens auch erzielen, indem Sie ein\n
vor dem#
s drucken , wodurch Sie das entfernen können,»#
um insgesamt Byte zu sparen.⊗÷ι²
, aber was wären die Änderungen für das Drucken eines\n
vor dem#
s? Die Spirale ist falsch, wenn ich die addierePrint("\n")
.#
.Python 2 ,
179178 BytesDanke an Kevin Cruijssen für -1 Byte.
Probieren Sie es online!
Python 2 , 179 Bytes
Bei diesem Ansatz werden Formeln für
x
undy
Deltas anstelle einer Nachschlageliste verwendet.Probieren Sie es online!
quelle
n+1+n%2
bisn%2-~n
für -1 Byte. Und ich muss daran denken,0--n/4*2
dass ich 1 kürzer bin als-(-n/4*2)
. Schöne Antwort, +1 von mir.JavaScript (ES6), 185 Byte
Natürlich kann man mehr Golf spielen, vielleicht mit Curry, aber hier ist mein sehr bescheidener Versuch. Zeilenumbrüche zur besseren Lesbarkeit hinzugefügt, mit Ausnahme des vorletzten Zeichens
Verwendung:
d(10)
Gibt eine Zeichenfolge gemäß dem N = 10-Abfragebeispiel zurück.Definiert eine Funktion
r(a,n)
eine Anordnung zum Drehena
vonn
Umdrehungen; eine Funktions(n)
zum Erzeugen eines zweidimensionalen Arrays, das eine Spirale von Größe darstellt,n
durch rekursives Drehen und Hinzufügen von Abständen und Linien (nicht zurück in die Ausgangsposition gedreht); und eine Funktion,d(n)
um eine Spirale der Größe zu zeichnenn
, die gemäß der Herausforderung gleichmäßig gedreht und als zurückgegebene Zeichenfolge gerendert wird.Das war eine sehr lustige Herausforderung: ¬)
quelle