Heute machen wir ein ASCII-Sechseck. Sie müssen ein Programm oder eine Funktion schreiben, die eine positive Ganzzahl n annimmt und ein aus Sternchen bestehendes Sechseckgitter der Größe n ausgibt . Ein Sechseck der Größe 2 sieht beispielsweise so aus:
* *
* * *
* *
Während ein Sechseck der Größe 3 so aussieht:
* * *
* * * *
* * * * *
* * * *
* * *
Sie können eine der Standardeingabe- und -ausgabemethoden verwenden , z. B. STDIO / STDOUT, Funktionsargumente und Rückgabewerte oder das Lesen / Schreiben einer Datei.
Sie können davon ausgehen, dass die Eingabe immer gültig ist. Wenn es sich also nicht um eine positive Ganzzahl handelt, kann Ihr Programm tun, was Sie wollen. Sie müssen jedoch den Sonderfall eines Sechsecks der Größe 1 behandeln, bei dem es sich zufällig um ein einzelnes Sternchen handelt:
*
Führende und nachfolgende Leerzeichen sind zulässig, solange die Ausgabe visuell identisch ist.
Beispiele:
1:
*
2:
* *
* * *
* *
3:
* * *
* * * *
* * * * *
* * * *
* * *
4:
* * * *
* * * * *
* * * * * *
* * * * * * *
* * * * * *
* * * * *
* * * *
5:
* * * * *
* * * * * *
* * * * * * *
* * * * * * * *
* * * * * * * * *
* * * * * * * *
* * * * * * *
* * * * * *
* * * * *
6:
* * * * * *
* * * * * * *
* * * * * * * *
* * * * * * * * *
* * * * * * * * * *
* * * * * * * * * * *
* * * * * * * * * *
* * * * * * * * *
* * * * * * * *
* * * * * * *
* * * * * *
12:
* * * * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * * * *
* * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * *
* * * * * * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * *
Wie üblich ist dies Codegolf , daher gelten Standardlücken , und Sie sollten versuchen, das kürzestmögliche Programm in Bytes zu schreiben. Natürlich sind einige Sprachen von Natur aus kürzer oder länger als andere. Denken Sie also daran, dass das Ziel nicht notwendigerweise die kürzeste Gesamtbyteanzahl ist, sondern die Übermittlung in derselben oder einer ähnlichen Sprache zu unterbinden.
Möge der beste Golfer gewinnen!
quelle
Antworten:
Hexagony + Bash Coreutils, 0 + 3 + 8 = 11 Bytes
Beinhaltet +3 für
-g
Flag und +8 für|tr . \*
nicht standardmäßigen Aufruf (siehe diesen Metapost )Die Eingabe wird Hexagony als Argument übergeben. Wenn der Hexagony-Interpreter mit der
-g N
Option aufgerufen wird, wird ein Sechseck von.
s ausgegeben . Wir verwenden dann tr, um diese durch*
s zu ersetzen .quelle
hexagony -g $1|tr . \*
, wenn der Hexagony-Interpreter so heißt.ruby ./interpreter.rb -g 5|tr . \*
Python 2, 61 Bytes
Gibt am Ende jeder Zeile ein Leerzeichen aus.
Vielen Dank an Erik den Outgolfer für das Speichern eines Bytes.
quelle
int(input())
stattinput()
und den üblichenprint(' '*j+'* '*(2*n+~j))
ersetzenprint' '*j+'* '*(2*n+~j)
- cool Code btw ;-)JavaScript (ES6), 77
81 84@Upvoters: Verpassen Sie nicht die Antwort von @ETHproductions, das sind 76 Bytes
Bearbeiten Nach Änderung der Spezifikation überarbeitet, nachfolgendes Leerzeichen zulässig
Nur für den Hut ... hey! Kein Hut?
Prüfung
quelle
Hexagony ,
918786 BytesProbieren Sie es online!
Endlich geschafft.
Zunächst (bevor mir klar wird, wie teuer die Schlaufen sind) erwarte ich, dass dies möglicherweise in die Seitenlänge 5 passt, aber jetzt ist es schwierig genug, es in die Seitenlänge 6 zu passen.
Um das zu bekommen, muss ich den linearen Code ein wenig modifizieren. Wenn ich das schreibe, merke ich sogar, wie ich den linearen Code um
1 bis2 Byte verkleinern kann .quelle
JavaScript (ES6),
77 bis76 ByteIch sagte mir, ich würde nicht schlafen, bis ich einen neuen ES6-Rekord aufgestellt hätte, ohne auf die anderen Antworten zu achten, also hier ist es ...
Testschnipsel
quelle
C
91898074 BytesIch habe ziemlich viel herumgepfiffen, um die richtigen Formeln zu finden, und dann alles zusammengepresst.
Rufen Sie
f
mit der Nummer n an , und es wird das Sechseck auf stdout gedruckt.Ungolfed und erklärt (80-Byte-Version):
Sehen Sie es live auf Coliru
Anmerkungen:
printf
Kann negative Auffüllungen verarbeiten, was zu einem linksbündigen Zeichen mit der Auffüllung auf der rechten Seite führt. Ich habe also versucht, etwas zu bewirken,w = printf("%*c*", y, ' ')
damit der absolute Wert erhalten bleibt, und ich konnte ihn von seinem Rückgabewert abrufen. Leider wird das Zeichen sowohl mit einer als auch mit einer Auffüllbreite gedruckt, sodass die drei Mittellinien identisch waren.Update: Jasen hat eine Möglichkeit gefunden, genau dies zu tun, indem er eine leere Zeichenfolge anstelle eines Zeichens druckt - 6 Bytes sind abgeschnitten!
Das Backspace-Zeichen wird von Coliru falsch behandelt. Wenn Sie diesen Code auf einem lokalen Terminal ausführen, wird das führende Leerzeichen in jeder Zeile entfernt.
quelle
w=printf("\n%*s",abs(y),"");++w<s*printf(" *");
05AB1E ,
1413 BytesCode:
Erläuterung:
Verwendet die CP-1252- Codierung. Probieren Sie es online!
quelle
Gelee , 24 Bytes
Probieren Sie es online!
Jelly schämt sich für die Tatsache, dass es kein Zentralisierungsatom hat. Deshalb wird es von 05AB1E und V geschlagen. Mit 11 bzw. 7 Bytes!
Wenn Sie einen Weg finden, Golf zu spielen, kommentieren Sie bitte. Jede Hilfe wird geschätzt.
Erklärung :
Bonus: Um herauszufinden, wie viele Sterne sich in einem Sechseck befinden, verwenden Sie Folgendes:
quelle
Oktave,
6258 BytesVorherige Antwort:
das kann man nennen als
Versuchen Sie es auf Octave Online
Zum Beispiel für das Basisbild
n=5
istdas kann mit erstellt werden
Die
dilation morphological operator
4 mal auf das Bild mit der folgenden Nachbarmaske angewendet:das kann mit erstellt werden
[k='01010'-48;~k;k]
Ergebnis der Dilatation:
Ersetzen Sie dann 0 und 1 durch '' bzw. '*'
quelle
postgresql9.6, 290 Bytes
formatiertes SQL ist hier:
Ausgabe:
quelle
lpad
Vielleicht können Sie ein paar Bytes sparen. Ich würde auch die Sprache pl / pgsql nennen, aber das wirft Fragen auf, ob Sie dasdo language plpgsql $$
und das Closing zählen müssen$$;
. Diese werden am besten auf Meta angesprochen, wenn sie noch nicht aufgetaucht sind.DECLARE
s? Würde nicht ein einziger funktionieren?V , 17 Bytes
Probieren Sie es online!
Wie üblich ist hier ein Hexdump, da dieser nicht druckbare Zeichen enthält:
quelle
APL (Dyalog Unicode) ,
403635332725 BytesAngenommen
⎕IO←0
, dh nullbasierte Indizierung. Die Ausgabe enthält in jeder Zeile ein vorangestelltes und ein nachgestelltes Leerzeichen.Vielen Dank an @FrownyFrog und @ngn für viel Golf.
Probieren Sie es online!
Wie es funktioniert
quelle
JavaScript (ES6),
83-81ByteDies ist meine erste Antwort (Code Golf). Ich hoffe ich habe alles richtig formatiert.
Im Gegensatz zu den 2 aktuellen ES6-Antworten rufe ich keine Funktion rekursiv auf und verwende die Konsole für die Ausgabe.
quelle
alert
wenn Sie Browser-Js angeben?alert
es bearbeitete, warnte es Zeile für Zeile und nicht die ganze Sache.Haskell,
999779 BytesErläuterung: Dieses Programm basiert auf der Beobachtung, dass jede Zeile eines n-Hexagons (nk) Leerzeichen gefolgt von (n + k-1) Sternchen enthält, wobei einige k von der Zeilennummer abhängen.
Bearbeiten: Auf mapM_ umgestellt. Mir war nicht bewusst, dass ohne Import verfügbar war
quelle
Python 2 ,
100978988878179 Bytes-1 von @ Flp.Tkc
-6 nochmal von @Flp
-2 mit Dank an @ nedla2004. Ich habe versucht herauszufinden, wie ich das zweite Stück loswerden kann, aber ich habe nicht daran gedacht :)
Probieren Sie es online!
Erstellt ein Array für die obere Hälfte und fügt dann das umgekehrte Array abzüglich der Mittellinie hinzu und druckt dann. Druckt genau so, wie es ist, abgesehen davon,
1
welche Abzüge mit einem führenden Leerzeichen versehen sind (ich denke, dass a*
visuell genauso zulässig ist wie a*
mit oder ohne führendem Leerzeichen).quelle
Batch, 161 Bytes
Hinweis: Leerzeichen in Zeile 2. Ungolfed:
quelle
JavaScript (ES6), 83 Byte
quelle
Canvas , 9 Bytes
Probieren Sie es hier aus!
Das eingebaute schlagen: D
Erläuterung:
Keine Ahnung, warum es die riesige Polsterung gibt, aber es ist erlaubt und ich repariere das bald ™.Fest? Hoffe, ich habe nichts kaputt gemachtquelle
Perl 6 , 49 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Powershell,
91897868635248 BytesTestskript:
Ausgabe (zusätzliches Leerzeichen):
Erläuterung:
quelle
gu
.PHP,
8379 BytesLaufen Sie als Pipe mit
-nR
oder versuchen Sie es online .Dies kommt der Antwort von Kodos sehr nahe . Ist aber
str_pad
kürzer alsstr_repeat
selbst beim Golfen.Und der
++
in der Schleife Kopf spart noch etwas mehr.quelle
Ruby, 54 Bytes
Die Lambda-Funktion nimmt n als Argument und gibt eine durch Zeilenumbrüche getrennte Zeichenfolge zurück. (
$/
ist eine Variable, die das standardmäßige Zeilentrennzeichen enthält.)im Testprogramm
quelle
puts
) in die Zeichenanzahl aufzunehmen. Aber wenn Sie die Definition noch einmal lesen, heißt es nur, dass Ihre Funktion das Ergebnis "ausgeben" soll, was als "Rückgabe" des Ergebnisses interpretiert werden könnte. Kühle Lösung.Charly, 125 Bytes
Charly GitHub Seite: https://github.com/KCreate/charly-lang
quelle
SmileBASIC, 74 Bytes
Fügt ein führendes und ein nachfolgendes Leerzeichen hinzu.
Diese "Sechsecke" sehen schrecklich aus, wenn die Zeichen die gleiche Breite und Höhe haben ...
quelle
Schläger / Schema
testen:
quelle
Python 2, 111 Bytes
Eine langweilige, unkomplizierte Implementierung (und ein vollständiges Programm). Gibt in jeder Zeile ein nachgestelltes Leerzeichen aus.
Testfälle:
quelle
Javascript (ES6), 143 Byte
Es ist endlich Weihnachtsferien (Frohe Weihnachten!), Also habe ich etwas Zeit zum Golfen.
Und Junge, es ist schon eine Weile her - daher die große Anzahl von Bytes.
Hier geht:
quelle
for(j=c.length-2;j>-1;j--)c.push(c[j])
kann geschrieben werdenfor(j=a-1;j;c.push(c[--j]))
undfor(i=0;i<a;i++){c.push(" ".repeat(a-i-1)+"* ".repeat(i+a-1)+"*")}
könntefor(i=0;i<a;c.push(" ".repeat(a-i-1)+"* ".repeat(a-1+i++));
. Die return-Anweisung könnte aufreturn a-1?c.join
\ n verkürzt werden.:"*"
Insgesamt sparen diese Änderungen 18B (11 + 7 + 1).Java,
157149129127 BytesProbieren Sie es online!
quelle
String#repeat(int)
, aber TIO ist immer noch JDK 10, daher die emulierterepeat(String,int)
Methode (mit der gleichen Byte-Anzahl). Der eigentliche Code in Java 11 wäre:s->{for(int j=~--s,t;++j<=s;System.out.println(" ".repeat(t)+"* ".repeat(s-~s-t)))t=j<0?-j:j;}
Hexagony (linear),
128127126 BytesBeachten Sie, dass dies nicht Hexagony ist, sondern nur eine (Meta-) Sprache, die Timwi in der esoterischen IDE unterstützt. Daher ist dies nicht für die Prämie berechtigt.
Dies kann jedoch in eine Hexagony-Lösung umgewandelt werden
(und ich denke, es wird kleiner als diese Lösung sein). Ich kann das später tun.Ich muss michmehr anstrengen, umes hier zu tun .Der Initial
❢
dauert 3 Bytes (e2 9d a2
). Jede neue Zeile benötigt 1 Byte (0a
).Nein, versuchen Sie es online !. Dies funktioniert nur in Esoteric IDE.
Kommentierter Code:
quelle
Japt
-R
,1110 BytesProbieren Sie es aus (oder verwenden Sie TIO , um mehrere Tests durchzuführen)
Erläuterung
quelle