Ihre Aufgabe: Machen Sie ein sechseckiges Dreieck mit Seitenlänge n
, wobei n
eine positive ganze Zahl oder 0 ist.
Lassen Sie mich zunächst ein Sechseck definieren:
/ \
| |
\ /
(Erstaunliche ASCII-Kunst, oder?)
Sechsecke können durch Teilen von Seiten miteinander verbunden werden:
/ \ / \
| | |
\ / \ /
/ \
| |
/ \ /
| |
\ /
Ein sechseckiges Dreieck ist das folgende:
/ \
| |
/ \ / \
| | |
\ / \ /
Dieses sechseckige Dreieck hat eine Seitenlänge von 2 bis 2 Sechsecken, um eine Seite herzustellen. Ein sechseckiges Dreieck mit der Seitenlänge 1 ist nur ein einzelnes Sechseck, und ein Sechseck mit der Seitenlänge 0 ist leer.
Ein sechseckiges Dreieck ist ein Dreieck aus Sechsecken, die durch ihre Seiten miteinander verbunden sind. Das obere Sechseck ist an den beiden unteren Seiten mit den beiden darunterliegenden Sechsecken verbunden. Das Dreieck in der linken unteren Ecke ist mit dem Dreieck in der rechten oberen Ecke und dem Dreieck in der rechten unteren Ecke und dem Dreieck in der linken oberen Ecke verbunden. Es gibt Sechsecke zwischen den Ecken, die durch ihre gegenüberliegenden Seiten verbunden sind, und ihre Anzahl ist n-2
. Die Dreiecke sind nicht ausgefüllt.
Mehr Beispiele:
Side length 3:
/ \
| |
/ \ / \
| | |
/ \ / \ / \
| | | |
\ / \ / \ /
Side length 4:
/ \
| |
/ \ / \
| | |
/ \ / \ / \
| | | |
/ \ / \ / \ / \
| | | | |
\ / \ / \ / \ /
(This triangle isn't really filled, the borders make it look like there is a hexagon in the middle, but there is not.)
Side length 5:
/ \
| |
/ \ / \
| | |
/ \ / \ / \
| | | |
/ \ / \ / \
| | | |
/ \ / \ / \ / \ / \
| | | | | |
\ / \ / \ / \ / \ /
Side length 6:
/ \
| |
/ \ / \
| | |
/ \ / \ / \
| | | |
/ \ / \ / \
| | | |
/ \ / \ / \
| | | |
/ \ / \ / \ / \ / \ / \
| | | | | | |
\ / \ / \ / \ / \ / \ /
quelle
Antworten:
Charcoal ,
624339 BytesProbieren Sie es online!Bearbeiten: Einige Bytes nur dank @ ASCII gespeichert (ich weiß nicht genau, wie viele ich auch weitere
6 bis10 Bytes gespeichert habe, aber dann 4 Bytes für einen Bugfix ausgeben musste). Verwenden Sie jetzt verschachtelte Schleifen.quelle
A / \¶| |¶ \ /αNβFβ«α←←»Fβ«α↖↖M⁶←»Fβ«αM⁴↑←←
(übrigens wird jede»
am Ende benötigte Kohle automatisch vervollständigt )Assign(hexagon_with_space_to_left, a);InputNumber(b);for(b){Print(a);Move(:Left);Move(:Left);}for(b){Print(a);Move(:UpLeft);Move(:UpLeft);Move(6, :Left);}for(b){Print(a);Move(4, :Up);Move(:Left);Move(:Left);}
zeichnet jede for schleife eine seitePython 2,
184177174164 BytesProbieren Sie es online!
-7 Bytes dank Ørjan Johansen
quelle
|
den oberen drei Reihen und in der unteren sechseckigen Reihe fehlt das rechte s.p[:4]*(i+2)
stattp[:4]*(i+1)
scheint es zu beheben.b
an einer Stelle. Wenn Sie dies mit Ihrem~
Trick kombinieren, sind Siew=' '*2*~(i-n)
7 Byte kürzer.JavaScript (ES6), 243 Byte
quelle
JavaScript (ES6),
133129128126 BytesErstellt die Ausgabe zeichenweise mit zwei for- Schleifen.
Wie es funktioniert
In der äußeren Schleife iteriert y von n * 2-1 bis -1 . In der inneren Schleife iteriert x von n * 4-1 bis -1 . Wir setzen k = (x + y) & 3 , welches das zugrunde liegende Muster ist, das zur Erzeugung der Sechsecke verwendet wird.
Unten ist das resultierende Gitter für n = 4 :
In geraden Zeilen wird eine Zelle mit einem Pipe-Zeichen gefüllt, wenn k = 3 ist , und ansonsten mit einem Leerzeichen. Die Pipe ist das fünfte Zeichen in unserer Referenzzeichenfolge
" \ /|"
, daher wird der richtige Index durch (k + 1) & 4 angegeben .In ungeraden Zeilen wird jede Zelle direkt mit dem entsprechenden Zeichen in der Referenzzeichenfolge gefüllt:
Unten sehen Sie unser aktualisiertes Beispiel (Leerzeichen durch Punkte ersetzt):
In den folgenden Formeln definieren wir N = n * 4 für die Lesbarkeit (obwohl dieselbe Variable im Code verwendet wird).
Die Dreiecksform wird durch Testen erhalten:
Und der innere Teil wird durch Testen entfernt:
Demo
Code-Snippet anzeigen
quelle
[x>y-2&x<n-y&(x>n-y-6|x<y+4|y<2)&&y&1?x+y&3:x-~y&4]
Arbeit?(x+y+1)&4
sind nicht dasselbe wie(((x+y)&3)+1)&4
.Jelly ,
6261 BytesDerzeit enthält sechs Sechser.
Probieren Sie es online!
Wie?
quelle
>
In der Erklärung fehlt (<space
)ẋ
unter dem Raum in der Erklärung ist falsch ausgerichtet" gemeint haben , lassen Sie es mich wissen.Pyth , 82 Bytes
Probieren Sie es online!
quelle
Mathematica, 155 Bytes
mit
\n
durch eine newline ersetzt.Besser lesbar:
Erstellt ein Array von Zeichen, die horizontal mit i von 1 bis 4 n + 1 und vertikal mit j von 1 bis 2 n + 1 indiziert werden . Zunächst
Switch[Mod[i+d+{j,-j},4],{1,3},"/",{3,1},"\\",{1,1},"|",_," "]
füllt in einem hexagonalen Gitter:dann
If[i+j<d||i-j>d+1||i+j>d+5&&i-j<d-3&&j<d-1," ",...]
ersetzt diese mit" "
außerhalb des ungefüllten Dreiecks.quelle