Einführung
Die Idee ist, das Sternchen (Stern) *
zu verwenden, um einen ASCII-Stern in einer bestimmten Dimension anzuzeigen. Die Bemaßung ist eine Eingabenummer größer oder gleich , die die Höhe in Linien des oberen Punkts des Sterns angibt. Die Sterne hier sollen sechs spitze Sterne mit größeren Größen sein, die aus einer Bildperspektive besser aussehen.
In allen Fällen soll die ASCII-Darstellung der Sterne als zwei Dreiecke erscheinen, die sich überlappen, wie in den folgenden Beispielen gezeigt.
Parametrics
Das folgende Bild und die Datentabelle beschreiben Attribute für die ersten sieben Größen des Sterns. Jeder der Parameter wächst in einer arithmetischen Folge, wenn zunimmt, mit der Ausnahme, dass unterschiedlich ist .
Beispiele
Für eine Eingabe von 1 (der entartete Fall) sollte die Programmausgabe wie folgt lauten:
*
*****
*****
*
Eingabe von 2:
*
***
*********
*******
*********
***
*
(3)
*
***
*****
***************
*************
***********
*************
***************
*****
***
*
(5)
*
***
*****
*******
*********
***************************
*************************
***********************
*********************
*******************
*********************
***********************
*************************
***************************
*********
*******
*****
***
*
Herausforderung
Ihre Aufgabe ist es, eine Funktion oder ein Programm zu erstellen, das die Zahl N als Eingabe akzeptiert und dann den Stern mit der entsprechenden Größe nur aus Zeichen und dem
*
Zeichen ausgibt .
- Sie können davon ausgehen, dass der Eingabewert immer eine positive ganze Zahl ist.
- Das nachfolgende Leerzeichen in den Ausgabezeilen ist in Ordnung.
- Der Programmalgorithmus sollte allgemein genug sein, damit jede Eingabe die Star-Art-Ausgabe erzeugt. Praktische Einschränkungen bestehen natürlich aufgrund der Anzeigeausgabegröße.
- Die Ausgabe sollte nach STDOUT erfolgen.
- Standardlücken sind verboten.
- Dies ist Code-Golf, daher gelten alle üblichen Golfregeln.
Wertung
Das ist Code-Golf, also gewinnt der Code mit der kürzesten Anzahl von Bytes!
Antworten:
05AB1E , 21 Bytes
Probieren Sie es online! oder als Testsuite
Erläuterung
quelle
3*s≠-L·<
wie6*s≠·-ÅÉ
oder≠3/-6*ÅÉ
, aber leider keine kürzer .. Nizza Antwort, wie immer! :)xs3*<ŸRsLì'*×.º.C.∊
für 19 :). Ich habe gelogen, es funktioniert nicht für 1. Lassen Sie es für Inspiration.Haskell , 114 Bytes
Erstellt eine Funktion,
g
die eine Zahl annimmt und eineIO
Monade erzeugt , die den Stern nach STDOUT druckt. Ich finde das okProbieren Sie es online!
Erläuterung
Lassen Sie uns zuerst über das Lambda sprechen.
Dies braucht eine Zahl,
n
um als Sterne gezeichnet zu werden. Wir drucken doppelt so viele Sterne und dann noch einen und füllen ihn rechts auf die Größe des Bildes auf. Wir füllen dies rechts durcha
Leerzeichen auf, um die Sternlinie zu zentrieren. Wir können dieses Lambda verwenden, um jede Linie zu zeichnen.Aus diesem Lambda erschaffen wir
(%)
.(%)
Beginnt damit,mapM_
mit unserem Lambda ein Profil in die Form zu bringen.Jetzt müssen wir nur noch eine Liste des Profils für den Stern erstellen. Wir können dies tun, indem wir zuerst ein Dreieck mit
[1..a]
und dann mit einigen Nullen auffüllen++replicate b 0
. Wenn wir das Profil des Dreiecks nehmen und es umkehren, erhalten wir die andere Hälfte des Sterns. Um sie zu überlagern, erstellen wir einfach ein neues Profil, in dem jeder Eintrag das Maximum der beiden Dreiecke ist. Das istzipWith max
.Wir nennen dies dann auf zwei Arten: als
3%1
Eingabe von1
und mit dem(3*a-1)%a
Anderen.Ab hier fummeln wir ein bisschen an einigen Werten herum, um ein paar Bytes zu rasieren. Da
3*a-1
es ziemlich lang ist, versetzen wir einige unserer anderen Werte um 1, so dass alles abbricht und wir3*a
stattdessen das beabsichtigte Verhalten erhalten . Und zwar beginnen wir unsere Liste an2
statt1
und tun2*n-3
statt ,2*n-1
die für die Änderung zu bilden.Alternative Version, 114 Bytes
Dieser baut eine punktfreie Funktion auf
(%)<*>min 2
Probieren Sie es online!
Probieren Sie es online!
Probieren Sie es online!
quelle
R ,
125107101 BytesProbieren Sie es online!
Bisheriger (anderer) Ansatz:
R ,
150148136135130128 BytesProbieren Sie es online!
quelle
Python 2 ,
1019997 BytesProbieren Sie es online!
-2 Bytes, danke an Lynn
quelle
i+x>n*6or
spart also zwei Bytes.i+x>~i/n/2%2*6*n
oder so etwas wiei+x>3*n*(~i/n&2)
(beide 96 Bytes.)JavaScript (V8) ,
101108 BytesEDIT: +7 Bytes zum Drucken auf STDOUT
Probieren Sie es online!
Kommentiert (ohne
print
)quelle
Jelly , 21 Bytes
Ein vollständiges Programm, das eine positive Ganzzahl akzeptiert, die an STDOUT ausgegeben wird.
Probieren Sie es online! Oder sehen Sie sich eine Testsuite an .
Wie?
quelle
Canvas ,
2523 BytesProbieren Sie es hier aus!
15 Bytes ohne Bearbeitung
1
quelle
Jelly , 21 Bytes
Probieren Sie es online!
Ein monadischer Link, der eine einzelne Ganzzahl als linkes Argument akzeptiert und eine durch Zeilenumbrüche getrennte Jelly-Zeichenfolge mit dem Stern als Ausgabe zurückgibt. Bei der Ausführung als vollständiges Programm wird der Stern implizit an STDOUT ausgegeben.
Erläuterung
quelle
×3’»3
die gleiche Länge hat ^ _ ^ɓ
es zu benutzen, spielte es keine Rolle, aber ich behielt es, weil es mir immer noch gefiel!Holzkohle , 25 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Zeichnen Sie ein unregelmäßiges Fünfeck, das das obere rechte Viertel des Sterns darstellt, aber eine spezielle Hülle
1
, um die Reihe um eine zusätzliche Spalte zu verbreitern.Überlege, um den Stern zu vervollständigen.
Mehr Spezialgehäuse, um den Stern für
1
eine zusätzliche Reihe höher zu machen.Alternativlösung, auch 25 Bytes:
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Drucken Sie ein Extra
*
für den Fall von1
.Zeichnen Sie die linke Hälfte eines Dreiecks der entsprechenden Größe.
Nachdenken, um das Dreieck zu vervollständigen.
Überlappen Sie es mit seinem Spiegelbild, außer im Fall von
1
, in dem es nur reflektiert wird.14 Bytes ohne Sondergehäuse für
1
:Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Zeichnen Sie ein Dreieck der entsprechenden Größe.
Überlappen Sie es mit seinem Spiegelbild.
quelle
Perl 6 , 74 Bytes
Probieren Sie es online!
Erstellt buchstäblich ein Dreieck mit den richtigen Proportionen und überlappt es mit einer kopierten Kopie unter Verwendung der Zeichenfolge oder des Operators (
~|
). Ausgabe als Liste von Zeilen mit Leerzeichen vor und nach der Zeile.Erläuterung:
quelle
J ,
5350 BytesProbieren Sie es online!
ungolfed
Wie
Verwenden Sie eine Funktionstabelle (wie eine Zeittabelle der 3. Klasse), um das halbe Dreieck zu konstruieren, indem Sie
>:
(größer oder gleich) als Funktion verwenden. Kehren Sie dann jede Reihe um, hacken Sie die letzte Spalte und nähen Sie die beiden Seiten zusammen, um das volle Dreieck zu erhalten (jedoch aus 1 und 0). Fügen Sien
am unteren Rand Zeilen mit Nullen hinzu. Kehren Sie schließlich das Ganze um und überlagern Sie es mit dem Booleschen Wert oder+.
, um das Ergebnis zu erhalten. Dann drehen Sie die 1 auf*
und 0 auf Leerzeichen.quelle
T-SQL, 194 Bytes
@
ist der Eingabewert@c
regelt die Breite des oberen Dreiecks@d
behandelt das breite untere Dreieck@e
Enthält die Ausgabe entweder@c
oder@d
- dies spart einige Bytes@f
behandelt den Sonderfall 1 als Eingabe.@c*@=3
legt fest, wann verwendet werden soll@f
. 5 Bytes billiger als das Schreiben@c=3and @=1
Probieren Sie es online aus
quelle
Japt
-R
, 25 Bytes+5 Bytes für
n=1
: \Versuch es
quelle