Schauen Sie sich die folgende Zeichenfolge an. Bemerken Sie ein Muster?
ABEFNOPEFGH DC GQI MHRJ LKJI SK DTL CUM BAZYXWV N EO DP CQ BAZYXWVUTSR
Wie einige vielleicht bemerkt haben, handelt es sich im Grunde genommen um eine Spirale des Alphabets, bei der sich die Abstände zwischen Zeilen / Spalten allmählich um 1 Leerzeichen / Zeilenvorschub erhöhen.
Rigorose Definition
- Lassen Sie uns einen Zähler c haben , der anfangs 0 ist.
- Wir schreiben das erste c + 1 Buchstaben des Alphabets von links nach rechts:
A
. Dann wird von oben nach unten die nächste (c + 1) (C + 2) / 2 Buchstaben (add
B
):AB
.Von links nach rechts das nächste (c + 1) (c + 2) / 2 (addieren
C
):AB C
Und von unten nach oben die nächsten c + 1 Buchstaben (addieren
D
):AB DC
Das Ende des Zyklus erreicht. Erhöhen wir also c (das wird 1). Dann geht es vom ersten Schritt zurück. Der einzige Unterschied besteht darin, dass wir anstelle der ersten c + 1 Buchstaben des Alphabets die nächsten c + 1 Buchstaben verwenden, beginnend mit dem letzten Element dieses Zyklus (
D
in diesem Fall also machen wir weiter mitEFG...
). WennZ
es erreicht ist, geht es zurück vonA
.
Aufgabe
Geben Sie die ersten N Zyklen der Spirale aus, wenn Sie eine Ganzzahl N (positiv für 1-Indizierung oder nicht negativ für 0-Indizierung) haben .
Regeln
Sie können entweder das Kleinbuchstaben- oder das Großbuchstaben-Alphabet verwenden, Ihre Auswahl muss jedoch konsistent sein (verwenden Sie nur eines davon, das Mischen ist nicht zulässig).
Sie können Eingaben und Ausgaben über eine der Standardmethoden in einer beliebigen Programmiersprache vornehmen und dabei beachten, dass diese Lücken standardmäßig verboten sind.
Zulässige Ausgabeformate: Mehrzeilige Zeichenfolge, eine Liste von Zeichenfolgen, die Zeilen darstellen, eine Liste mit mehreren Zeichenlisten, die jeweils eine Zeile darstellen, oder alles andere, was Sie für geeignet halten. Falls Sie das erste Format nicht auswählen, ist es hilfreich, eine hübsche Druckversion Ihres Codes beizufügen.
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes (in jeder Sprache), der die Anforderungen erfüllt!
Testfälle
Die eingegebene Ganzzahl wird durch eine neue Zeile von der entsprechenden Ausgabe getrennt, und die Tests werden durch Bindestriche getrennt. Beachten Sie, dass diese 1-indiziert sind.
1 AB DC -------- 2 ABEF DC G MH LKJI -------- 3 ABEFNOP DC GQ MHR LKJI S DT CU BAZYXWV ------- 4 ABEFNOPEFGH DC GQI MHRJ LKJI SK DTL CUM BAZYXWV N EO DP CQ BAZYXWVUTSR ------- 5 ABEFNOPEFGHFGHIJ DC GQIK MHRJL LKJI SKM DTLN CUMO BAZYXWV NP EOQ DPR CQS BAZYXWVUTSR T RU QV PW OCHSE NMLKJIHGFEDCBAZY ------ 6 ABEFNOPEFGHFGHIJSTUVWX DC GQIKY MHRJLZ LKJI SKMA DTLNB CUMOC BAZYXWV NPD EOQE DPRF CQSG BAZYXWVUTSR TH RUI QVJ PWK OXL NMLKJIHGFEDCBAZY M SN RO QP PQ ODER NMLKJIHGFEDCBAZYXWVUTS
Antworten:
Kohle , 31 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Hinweis: Der Deverbosifier gibt aus irgendeinem Grund einen nachgestellten Separator aus. Erläuterung:
Zeichnen Sie die Kästchen in umgekehrter Reihenfolge (vom größten zum kleinsten).
Berechnen Sie die Größe der Box.
Zeichnen Sie den Rahmen der Box mit einem gedrehten Alphabet.
Berechnen Sie den Buchstaben, der oben links im Feld angezeigt wird (0-indiziert).
quelle
Python 2 , 176 Bytes
Probieren Sie es online!
Erläuterung
Wir konstruieren ein leeres Array von Räumen der richtigen Größe und bewegen uns dann wie folgt darüber, beginnend in der oberen linken Ecke:
1 Schritt →, 1 Schritt ↓, 1 Schritt ←, 1 Schritt ↑
3 Schritte →, 3 Schritte ↓, 3 Schritte ←, 3 Schritte ↑
6 Schritte →, 6 Schritte ↓, 6 Schritte ←, 6 Schritte ↑
10 Schritte →, 10 Schritte ↓, 10 Schritte ←, 10 Schritte ↑
…
Jedes Mal, wenn wir eine leere Zelle finden, platzieren wir dort einen Buchstaben und wechseln zum nächsten Buchstaben im Alphabet.
Im Code
s%4
ist die Richtung (→ ↓ ← ↑), und wir gehen so oft vor:Golfmöglichkeiten
Gibt es einen kürzeren Weg zur Karte
s%4
zu1,0,-1,0
alsabs(2-s%4)-1
?Gibt es einen kürzeren Weg zur Karte
s%4
zu0,1,0,-1
alss%2-s%4/3*2
?Credits
quelle
21/(s%4+3)%3-1
:s%2-2*(s%4>2)
( 179 bytes ). Es könnte aber immer noch golffähig seinC
305281 BytesVielen Dank an @Mr. Xcoder zum Speichern von vier Bytes!
Probieren Sie es online!
quelle
#define
fürfor(
(das spart tatsächlich Bytes). +1 von mir. :)Python 2 ,
262260254245 BytesProbieren Sie es online!
Neue Methode mit mehr Mathematik!
Gibt eine Liste mit Zeichenlisten zurück.
Alte Version:
Python 2 ,
322321308298 BytesProbieren Sie es online!
quelle
.49
aus oder scheitert es bei sehr großen Eingaben?i<j
, da Sie sie viermal verwenden?+1==1+
von meiner vorherigen MethodePerl 5, 177 +2 (-nl) = 179 Bytes
2 Bytes gespart dank Xcali
Probieren Sie es online aus
quelle
-1
anstelle von verwenden$#O
. Auch unter Verwendung$,
statt$n
lassen Sie den Raum entfernen , bevorfor
in$_.=$"x$n for@O
s/ (?=\S)/n/e
zu änderns/.*\K /n/e
APL (Dyalog Classic) , 47 Byte
Probieren Sie es online!
quelle