Sie erhalten eine positive Ganzzahl N
als Eingabe. Ihre Aufgabe ist es, einen Halbzickzack mit N
Seiten zu bauen, von denen jede Länge hat N
. Da es relativ schwierig ist, die Aufgabe klar zu beschreiben, sind hier einige Beispiele:
N = 1
:O
N = 2
:O OO
N = 3
:OO OO OOO
N = 4
:OOOOO OO OO OOOO
N = 5
:OOOOOO OOO OOO OOO OOOOOO
N = 6
:OOOOOOO OOO OOO OOO OOO OOOOOOOOOOOO
N = 7
:OOOOOOOOO OOOO OOOO OOOO OOOO OOOO OOOOOOOOOOOOOO
Wie Sie sehen, besteht ein Halbzickzack aus abwechselnden diagonalen und horizontalen Linien und beginnt immer mit einer diagonalen Linie von links oben nach rechts unten. Beachten Sie, dass die Zeichen in den horizontalen Linien durch ein Leerzeichen getrennt sind.
Regeln
Sie können eine beliebige Nicht-Leerzeichen wählen Charakter statt
O
, es kann sogar widersprüchlich sein.Sie können das Ergebnis als String oder als Liste von Strings ausgeben / zurückgeben, die jeweils eine Zeile darstellen .
Möglicherweise haben Sie eine nachgestellte oder führende Zeile.
Es gelten Standardlücken .
Sie können die Eingabe und Ausgabe mit jedem Standardmittelwert vornehmen .
Wenn möglich, fügen Sie Ihrer Einreichung einen Testlink hinzu. Ich stimme jeder Antwort zu, die Golfbemühungen zeigt und eine Erklärung hat.
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes in jeder Sprache !
Antworten:
Kohle , 24 Bytes
Probieren Sie es online!
-5 danke an Neil .
AST:
quelle
FN§⟦↘→↗→⟧ι⁻Iθ¹→
(nur 15 Bytes) gewählt, aber Richtungslisten scheinen in Charcoal nicht richtig zu funktionieren. Eine Schande.FN✳§⟦↘→↗→⟧ι⁻θ¹O
wird funktionieren, nachdem Dennis gezogen hat, und✳
wird in die richtige Richtung geworfenPython 2 ,
157153 BytesProbieren Sie es online!
n*3/2*~-n+1
ist die Breite jeder Zeile: ⌊3n / 2⌋ · (n − 1) + 1 Zeichen.q*n+s*(4*n-6)
repräsentiert die oberen und unteren Zeilen. Wenn wir es wiederholen und in Scheiben schneiden, erhalten[2*(n-1):]
wir die oberste Reihe; Wenn wir schneiden, erhalten[5*(n-1):]
wir die unterste Reihe. Daher die Definitionp
und die Aufrufe vonp(2)
undp(5)
. Da wir jedoch die Wiederholung und das Schneiden der Zeilenlänge für alle anderen Zeilen benötigen, verwenden wir siep
in der Schleife erneut.i*s+s+o+…
ist nur ein langweiliger Ausdruck für die mittleren Reihen.n>1>p(5)
Wird kurzgeschlossen, wennn≯1
, wasp(5)
dazu führt , dass nicht ausgewertet wird. Daher ist es eine Abkürzung fürif n>1:p(5)
.quelle
Mathematica,
1261251211121048986 Bytes#
ist die Eingabenummer für eine anonyme Funktion (abgeschlossen durch das Finale&
).m=" "&~Array~{#,#^2-#+1};
erstellt eine Matrix von Leerzeichen mit der richtigen Größe, indem ein Array#,#^2-#+1
mit den angegebenen Dimensionen mit den Ausgaben der konstanten anonymen Funktion "Ausgabe eines Leerzeichens" gefüllt wird" "&
.Do[foo,{j,#},{i,#}]
ist ein Paar verschachtelter do-Schleifen, bei denen derj
Bereich von1
bis#
und innerhalb desi
Bereichs von1
bis liegt#
.m[[1[i,#,-i][[j~Mod~4]],j#-#+i+1-j]]="X"
Setzt den entsprechenden Teil der Matrix als ZeichenX
basierend aufj
undi
. Das-i
verwendet negative Indizierung, um Bytes von zu speichern#-i+1
. (Ich habe vergessen,Mod[j,4]
wiej~Mod~4
in der Originalversion dieses Codes zu schreiben .) Jenny_mathy wies darauf hin, dass wir den modularen Rest verwenden können, um die Liste direkt zu indizieren (anstatt zu verwendenSwitch
), um 9 Bytes zu sparen, und JungHwan Min wies darauf hin, dass wir dies nicht getan haben. Es muss nicht verwendet werden,ReplacePart
da wir einen Teil eines Arrays festlegen können, und dies1[i,#,-i][[j~Mod~4]]
nutzt das seltsame Verhalten und die Allgemeingültigkeit von[[foo]]
, um Bytes zu sparen{1,i,#,-i}[[j~Mod~4+1]]
Sie können dies in der Wolfram Cloud-Sandbox testen, indem Sie den folgenden Code einfügen und UMSCHALT + EINGABETASTE oder die NUM-TASTE drücken:
quelle
ReplacePart
hier eigentlich nicht .m=ReplacePart[...]
kann seinm[[{1,i,#,-i}[[j~Mod~4+1]],j#-#+i+1-j]]="X"
- Sie könnenSet
einePart
von einer Liste. Damit entfallen 15 Bytes.{1,i,#,-i}[[j~Mod~4+1]]
kann auch sein1[i,#,-i][[j~Mod~4]]
. Dieser Trick funktioniert , weil[[0]]
kehrt dieHead
einen Ausdruck.C ++,
321234 Bytes-87 Bytes dank Zacharý
Gibt einen Vektor von Strings zurück
quelle
Mathematica, 179 Bytes
für @JungHwanMin bearbeiten
quelle
Mod[z,4]==0
durch ersetzt werdenMod[z,4]<1
?Mod[#,4]
mit#~Mod~4
für -1 Bytes?05AB1E ,
212019 BytesCode
Verwendet den neuen Canvas-Modus:
Verwendet die 05AB1E- Codierung. Probieren Sie es online!
Erläuterung:
Für Eingabe 6 werden die folgenden Argumente (in derselben Reihenfolge) für die Zeichenfläche angegeben:
Um zu erklären, was die Zeichenfläche tut, wählen Sie die erste Gruppe von Argumenten aus der obigen Liste.
Die Zahl 6 bestimmt die Länge der Zeichenfolge, die in die Zeichenfläche geschrieben wird. Der Füllstoff wird verwendet, um auf die Leinwand zu schreiben, was in diesem Fall der Fall ist
O
. Es läuft zyklisch durch den Füllstring. Die Richtung der Zeichenkette wird durch das letzte Argument, die Richtung, bestimmt. Die Richtungen sind:Dies bedeutet, dass die 3 die Richtung nach Südosten vorgibt , was auch online versucht werden kann .
quelle
SOGL V0.12 , 36 Bytes
Probieren Sie es hier aus!
Die Grundidee besteht darin, für jede Nummer des Eingabebereichs entweder einen diagonalen oder einen horizontal gepunkteten Teil hinzuzufügen. In diesem Fall wird das Array gedreht, um das Hinzufügen zu vereinfachen. Erläuterung:
Wenn die Eingabe von 1 nicht erlaubt wäre,
ο.∫2%?.╝}F2\?№@.┌Ο};1w⁄Hh1ž}.4%1>?№
würde das auch funktionieren. Wenn zufällige Zahlen erlaubt.∫2%?.╝}F2\?№@.┌Ο};1w⁄Hh1ž}.4%1>?№
wären, würde das auch funktionieren. Wenn ich nicht faul und implementiert wäre‼
,}F2%?
könnte durch‼
-4 Bytes ersetzt werdenquelle
Mathematica,
10687 BytesGibt ein
SparseArray
Objekt vonString
s zurück. Um die Ausgabe zu visualisieren, können Sie sie anhängenGrid@
. Wirft einen Fehler für case1
, den Sie aber ignorieren können.Erläuterung
Stellen Sie
i
undj
auf 1.Auf
k
Eingang - 1 einstellen.Stellen Sie
l
aufk*input + 1
Iteriere die
l
Zeiten, beginnend mit0
, inkrementiere1
jedes Mal um ...Fügen Sie die imaginäre Komponente der
i
zuj
...Wenn die aktuelle Iteration durch teilbar ist
k
, multiplizieren Siei
mit der imaginären Einheit ...Erstellen Sie ein
Rule
Objekt, das das Element an der Position{j, current iteration + 1}
in ändert"o"
Erstellen Sie ein
SparseArray
Objekt unter Verwendung der generiertenRule
Objekte mit Bemaßung{input, l}
und" "
als Leerzeichen.Probieren Sie es auf Wolfram Sandbox!
quelle
SparseArray
ein Array zählt? Es kann mitGrid
oder visualisiert werdenMatrixForm
, aber normalerweise würde ich es hier nicht als "Liste von Zeichenfolgen" zählen. Wenn ein 2D-Array von Zeichen ausreicht, schneidet das beispielsweise 8 Byte meiner Lösung ab (12 vor Jenny_mathys Hilfe).SparseArray
Antworten, daher gehe ich davon aus, dass es in Ordnung ist.Python 3 ,
228 226 224 215 197195 Bytes-11 Bytes Vielen Dank an @Mr. Xcoder
-2 Bytes Dank an @Mr. Xcoder
Probieren Sie es online!
Erklärung und weniger Golf Code:
quelle
c+=i%(n-1)<1
mitc+=i%~-n<1
für -2 Bytesif 2>n:return'o'
ist ziemlich überflüssig. Ich habe ein Work-Around mitc+=i%[~-n,n][2>n]<1
statt gemachtc+=i%~-n<1
.Haskell , 197 Bytes
Probieren Sie es online!
Dank @Lynn: Die Abstände zwischen
O
s in horizontalen Segmenten des Zickzacks wurden korrigiert , aber es kostete eine Menge Bytes!Einige Erklärungen:
r
ist eine Zeile der Ausgabe: Sie hat das0 y y y y y 0 x x x 0 y ...
Format, die Anzahlx
undy
hängt von der Zeile und der Initiale abn
x='0'
undy=' '
x=' '
undy=' '
x=' '
undy='0'
take(div(3*n)2*(n-1)+1)
schneidet eine unendliche Reihe an der richtigen Stellen=1
:take n
diesen Fall behandelt.quelle
replicate n x
kann durch ersetzt werdenx<$[1..n]
. Außerdem fehlen Ihrer Antwort die Zwischenräume zwischenO
s in horizontalen Zickzack-Segmenten.Python 2 ,
155151146137 BytesProbieren Sie es online!
quelle
`L`[2::5]
speichere aber ein Byte mehr''.join(L)