Einführung
Wir alle kennen das coole S (auch bekannt als Superman S, Stüssy S, Super S, Skater S, Pointy S, Graffiti S usw. usw.): Milliarden von Schulkindern auf der ganzen Welt haben dieses S gezeichnet und fühlten sich sofort stolz auf sich. Für den Fall, dass Sie Ihre Kindheit vergessen haben oder eine völlig unkühle hatten , hier ein Bild von diesem coolen S:
Geben Sie bei einem Skalierungsfaktor n
als Eingabe (mit ) das Cool S in ASCII-Grafik aus.
Wie zeichnet man es
Auf der Wikipedia-Seite zum Cool S:
Ausgabe
Das Cool S wenn n
= 1 ist:
^
/ \
/ \
/ \
| | |
| | |
\ \ /
\ \/
/\ \
/ \ \
| | |
| | |
\ /
\ /
\ /
v
Und für verschiedene Werte von n
machst du einfach die Ausgabezeiten n
größer. Zum Beispiel n
= 2:
^
/ \
/ \
/ \
/ \
/ \
| | |
| | |
| | |
| | |
\ \ /
\ \ /
\ \/
/\ \
/ \ \
/ \ \
| | |
| | |
| | |
| | |
\ /
\ /
\ /
\ /
\ /
v
Beachten Sie, dass die vertikalen Abschnitte zweimal länger sind und der Abstand zwischen den vertikalen Linien zweimal größer ist.
Und wann n
= 3:
^
/ \
/ \
/ \
/ \
/ \
/ \
/ \
| | |
| | |
| | |
| | |
| | |
| | |
\ \ /
\ \ /
\ \ /
\ \/
/\ \
/ \ \
/ \ \
/ \ \
| | |
| | |
| | |
| | |
| | |
| | |
\ /
\ /
\ /
\ /
\ /
\ /
\ /
v
Hinweis: Obwohl nicht erforderlich, unterstützt Ihr Code möglicherweise auchn
= 0:
^
/ \
\\/
/\\
\ /
v
Gewinnen
Das kürzeste Programm in Bytes gewinnt.
Λ
Antworten:
Charcoal ,
58 53 47 4341 BytesProbieren Sie es online!
Ich wollte nur einen anderen Ansatz ausprobieren, dies zeichnet das Äußere über Reflexionen (danke an Neil für die Erweiterung der Idee) und zeichnet dann den inneren Teil. Da Charcoal die
:Left
Standardrichtung zum Zeichnen von Linien hat, nutze ich diese Richtung so weit wie möglich, um einige Bytes zu sparen, indem ich das S horizontal zeichne, wie folgt:Und dann muss ich nur die Leinwand um 90 Grad gegen den Uhrzeigersinn drehen.
quelle
Rotate
? Das gibt mir eine Idee ...Python 3 ,
255249248209 Bytes-6 Bytes dank Kevin Cruijssen
-1 Byte dank Kevin Cruijssen
-39 Bytes dank Rod und Jo King
Probieren Sie es online!
Es behandelt jetzt n = 0.
quelle
o+~d
kannm-d
undrange(o)
kann seinrange(m+1)
, und dann können Sie entferneno=m+1\n
, um 6 Bytes zu sparen. Gute Antwort, +1 von mir.p(s)\np(s[::-1])
inp(s+q+s[::-1])
: 248 Byteprint
, und 4 durch Entfernen[]
vonjoin([...])
, 238 Bytes Summierenq.join
in einer Variablen speichern, um ein Byte zu speichernq.join
und ein paar andere DingeCharcoal ,
474241 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung: Zeichnet die folgenden Linien in der angegebenen Reihenfolge:
Wo
5
ist das aktuelle Zeichen der Zeichenfolgev^
. Am Ende der ersten Schleife befindet sich der Cursor dann an einem Punkt9
. Die gesamte Leinwand wird dann gedreht, so dass die andere Hälfte des Cool S gezeichnet werden kann. (Die Zeichenfläche wird tatsächlich zweimal gedreht, dies ist jedoch nur ein Implementierungsdetail.)Charcoal unterstützt dies nicht,
RotateCopy(:Up, 4)
aber wenn dies der Fall wäre, würde dies für 33 Bytes funktionieren:quelle
Canvas ,
363229 BytesProbieren Sie es hier aus!
Eine ganze Menge Stack-Manipulation. (veraltete) Erklärung:
quelle
Python 2 ,
227208207202196181 BytesProbieren Sie es online!
Danke an Jo King für 1 Byte; und dann noch 5 Bytes insgesamt (über
n => 2*n
).Funktioniert auch für
n=0
.quelle
C (gcc) ,
379353344334 BytesIch habe ein paar
#define
s zur Eliminierung von Unterausdrücken und mehrere globale Zeichen verwendet, um zwischen den internen Funktionen zu kommunizieren. Die Hauptschleife geht {0,1,2,3,3,2,1,0}, um das S zu konstruieren.Vielen Dank an Jonathan Frech für die Vorschläge.
Probieren Sie es online!
quelle
w -r-1
könnte möglicherweise golfen werdenw~r
.C (GCC) ,
260254 Byte-6 bytes dank ceilingcat .
Probieren Sie es online!
Heruntergewirtschaftet
Wir können die Form in Teile teilen:
Jeder Teil könnte durch eine Anzahl von Zeilen, drei Zeichen und drei Beziehungen zu bestimmten Werten beschrieben werden, die die Feldbreite bei jeder Zeile bestimmen.
Eine erste Iteration war:
Die Aufrufe des
g()
Makros sehen in etwa so aus, als ob eine Tabelle erstellt und durchlaufen werden könnte. Feldbreiten beziehen sich manchmal auf den Indexzähler und manchmal nicht. Wir können die Feldbreite verallgemeinernF * i + A
, wobei F ein Faktor ist,i
mit dem multipliziert werden soll, und A ein Wert ist, der der Breite hinzugefügt werden soll. So wäre-2 * i + t
zum Beispiel die letzte Breite des vierten Aufrufs oben .So erhalten wir:
Am Ende war es nicht viel kürzer als eine verschärfte Version der
g()
aufrufenden, aber kürzer ist kürzer.quelle
Java, 435 Bytes
Die Funktion selbst benötigt 435 Bytes. Es gibt sicherlich Raum für Verbesserungen, "hohes Niveau" durch Analyse der Regeln, wo welcher Charakter zu platzieren ist (am Ende ist das S punktsymmetrisch), und "niedriges Niveau" durch klassisches Golfen (vielleicht eine andere Variable herausziehen oder) Kombination von zwei
for
Schleifen). Aber es ist ein erster Schuss mit dieser eher ungolfischen Sprache:quelle
t=...
ein bisschen weniger verwendet wurden, um Bytes zu sparen. Wenn Sie Fragen zu den von mir vorgenommenen Änderungen haben, lassen Sie es mich wissen. :)PHP ,
378374378377376335331328 Bytes-3 Bytes dank manatwork
-4 Bytes, verwendet str_pad anstelle von str_repeat
-41 Bytes, dank manatworks 'Vorschlägen
-1 Byte, zwei Inkremente zu einem + = 2 zusammengeführt
-1 Byte, überflüssiges \ entfernt
-4 Bytes durch einmaliges Echo.Ich habe vergessen, dass ich den String an die Funktion übergeben musste, damit dies mehr Bytes sindFunktioniert auch für n = 0.
Probieren Sie es online!
quelle
'v'
im Finale entfernenecho
.$i>0
und$m>0
kann einfach als$i
und geschrieben werden$m
..
Verkettung danach auf,
. Probieren Sie es online!Python 3 ,
321307 BytesVielen Dank an @EsolangingFruit für die Einsparung von 14 Bytes
Probieren Sie es online!
Python 2 , 303 Bytes
Probieren Sie es online!
quelle
'\\','/'
in der zweiten Zeile durch ersetzen*'\/'
, um drei Bytes zu sparen.print
input()
automatischeval()
geändert, sodass Sie denint()
Anruf auch überspringen können .for l in L:print(*l,sep="")
(ich glaube nicht, dass es in Python 2 eine Entsprechung gibt).