Es gibt eine Fülle von Fragen zum Zeichnen von Formen mit Sternchen - daher dachte ich, dass wir mit so vielen Sternchen eine mit Hilfe der ASCII-Tabelle zeichnen sollten.
Herausforderung
Ihre Aufgabe ist es, ein Programm oder eine Funktion zu schreiben, die keine Eingabe benötigt und genau diesen Text ausgibt:
!
"#
$%
&'
()
*+
,-
./
01
23456789:;<=>?@ABCDEF
GHIJKLMNOPQRSTUVWXYZ[
\]^_
`a bc
de fg
hi jk
lm no
pq rs
tu vw
xy z{
|} ~
Zu Referenzzwecken listet diese Site die vollständige ASCII-Tabelle auf.
Regeln
- Die Ausgabe sollte genau den oben gezeigten Text enthalten. Führende / nachfolgende Leerzeichen sind zulässig.
- Es gelten Standard-Golflöcher - kein Lesen dieses ASCII-Risikos aus dem Internet usw.
- Das ist Code-Golf , also gewinnt die kürzeste Lösung (in Bytes).
code-golf
string
ascii-art
kolmogorov-complexity
FlipTack
quelle
quelle
Antworten:
05AB1E ,
4038373635 BytesProbieren Sie es online!
Erläuterung
quelle
žQ2ôÐ9£s30£R21£RøsrR18£R2ôvyN·ð×ý})˜.C»
Ich habe 39, aber ich denke, Sie können einige mit ZIP rasieren.Python 3 , 110 Bytes
Erzeugt die Vorlage
Mit
%c
forx
werden dannrange(32,128)
die ASCII-Werte mithilfe der Zeichenfolgeninterpolation in das Muster eingefügt.Probieren Sie es online!
Python 2 ist ein Byte länger, wobei das Tupel länger, aber kürzer entpackt wird
print
.quelle
V ,
54, 50 BytesProbieren Sie es online!
Anders als üblich enthält dieses Programm keine nicht druckbaren Zeichen.
Erläuterung:
Nun sieht der Puffer so aus:
Jetzt bauen wir die Mitte auf:
Hier wird es etwas komisch.
Hier ist ein wichtiger Hinweis. Der
>
Befehl ist eigentlich ein Operator , was bedeutet, dass er nichts ohne ein Argument tut, den zu bearbeitenden Text. Beispielsweise,Da sich dieser Befehl jedoch in einer Schleife befindet, können wir ein Zeichen speichern, indem wir keinen Operator angeben. Wenn am Ende einer Schleife ein Operator ansteht, wird er
_
implizit als Argument (die aktuelle Zeile) eingefügt.Jetzt gebe ich zu, dass diese Schleife etwas seltsam ist und es schwierig sein kann, den Überblick darüber zu behalten, wie der gesamte Text zu einem bestimmten Zeitpunkt aussehen sollte. Mit diesem einfacheren Programm können Sie also sehen, wie es nach N Schleifen aussehen wird .
Wenn Sie den Wert auf 9 setzen, sehen Sie, dass wir ein bisschen zusätzlichen Text haben, den wir loswerden müssen. (Nur die aktuelle Zeile).
Also löschen wir die aktuelle Zeile mit
dd
. Aber warte! Weißt du, wie ich sagte, dass Operatoren ein Argument annehmen müssen, das manchmal implizit ausgefüllt wird? Argumente werden auch implizit am Ende des Programms eingetragen. Anstelle vondd
oderd_
(die äquivalent sind) können wir einfachd
V_
für uns ausfüllen lassen .quelle
ÿ
:)Python 3
170165155147 BytesIch habe so viel Golf gespielt, ich habe vergessen, wie es funktioniert ...
Probieren Sie es online!
quelle
JavaScript (ES6),
156…115114 BytesLeider
String.fromCharCode()
kostet das berüchtigte 19 Bytes.Formatiert und kommentiert
quelle
String.fromCharCode(...[...Array(n)].map(_=>k++))
, um 4 Bytes zu sparen.String.fromCharCode()
ein Array aufzurufen , aber ich habe einen anderen Ansatz gewählt. Danke trotzdem!QBIC ,
153151 BytesEs ist wirklich nur eine Reihe von FOR-Schleifen und das Umwandeln eines Int in ein Zeichen (
chr$()
).Beispielausgabe:
quelle
Perl , 113 Bytes
112 Byte Code +
-l
Flag.Probieren Sie es online!
quelle
PHP,
1101051039391 Bytesdruckt eine führende Zeile. Laufen Sie mit
-nr
oder testen Sie es online .Das Grundprinzip wird von Arnauld übernommen, aber dies wiederholt sich.
Und es macht sich die impliziten Typecasts von PHP zunutze:
NULL zu int für den String-Index, float zu int für
%
, boolean zu int für&
und für+=
.Erklärung mit Pseudocode
quelle
Pyth , 53 Bytes
Ein Programm, das das Ergebnis druckt.
Probieren Sie es online!
Wie es funktioniert
srdC127
Erstellt eine Liste der druckbaren ASCII-Zeichen und verkettet diese zu einer Zeichenfolge.c....,18 60
teilt diese Zeichenfolge in Indizes auf18
und60
gibt eine Liste mit drei Zeichenfolgen an, die den verschiedenen Teilen der Ausgabe entsprechen: der oberen, der mittleren und der unteren..e
Beginnt eine nummerierte Karte über die Zeichenfolgen mit den Zeichenfolgen alsb
und ihren Indizes alsk
.[...)
Erstellt eine Liste mit der gewünschten Aktion für jeden Teil des Diagramms. Die richtige Aktion wird durch Indizieren in die Liste mit dem aktuellen Index mit ausgewählt@...k
.oben
cb2
+L*9;
Teilt die Zeichenfolge in Zeichenpaare auf und stellt9
jedem Paar Leerzeichen voran .Mitte
c2b
Teilt die Zeichenfolge in zwei gleichlange Zeichenfolgen auf.Unterseite
cL2cb4
Teilt die Zeichenfolge in Gruppen von vier Zeichen und jede Gruppe in Paare..e
beginnt eine Aufzählungskarte mit den Zeichenfolgenpaaren alsZ
und ihren Indizes alsY
.j*yYdZ
Verbindet die Paare auf2*Y
Leerzeichen und+*-8Yd
stellt8-Y
Leerzeichen voran .js
Führt alle Ergebnisse zusammen und fügt sie in Zeilenumbrüchen der resultierenden Liste hinzu. Dies wird dann implizit gedruckt.quelle
Haskell , 144 Bytes
Probieren Sie es online!
Erläuterung:
b!n=[1..n]>>b
Definiert eine Funktion,!
die eine Liste oder einen Stringb
n
-times wiederholt .unlines([" "!9++p]!9++["*"!21]!2++[" "!(8-n)++p++" "!(2*n)++p|n<-[0..8]])
benutzt diese Funktion, um ein Sternchen aus Sternchen zu zeichnen (Oh, die Ironie!):#
wird als eine Funktion definiert, die*
in einer Zeichenfolge nacheinander Zeichen aus einer gegebenen Liste verwendet. Es wird mit dem obigen Sternchen bezeichnet und[' '..]
ist eine unendliche Liste aller Zeichen, die mit dem Leerzeichen beginnen' '
.quelle
" "!(2*n)
kann sein"(TWO SPACES)"!n
.Kohle , 39 Bytes (nicht konkurrierend)
Probieren Sie es online! AST lieferte eine Erklärung,
χ
wobei es sich um die vorinitialisierte Variable für10
.quelle
J, 63
(nicht konkurrierend)Der Ausdruck wird von rechts nach links ausgewertet.
i: 10
zählt von -10 bis +10|
nimm abs, um +10 auf 0 zurück zu +10 zu bekommen=
Selbstklassifizierung, um die V-Form von Einsen in einem Block von Nullen zu erhalten|.
Zeilenreihenfolge umkehren, um / \ shape zu erhalten( +. 1&|."1 )
Der Hook-Ausdruck verschiebt jede Zeile um eins nach rechts und die ODER-Verknüpfung mit dem Original( 9 21&$@{. , 1: , 1: , }. )
geschachtelte Gabeln zum horizontalen Einlegen und Strecken des Oberteils,
um den Block zur Kumulierung in eine lineare Sequenz zu zerlegen( * +/\ )
kumulieren und mit sich selbst multiplizieren20 21 $
Form zurück zu einem Block 20 Reihen von 21 Elementen31 +
addiere 31, weil die erste 1 ein Leerzeichen Code 32 sein sollte32 >.
Etage bei 32a. {~
Wählen Sie Zeichen aus ASCII Built-Inquelle
smoutput
Befehl oder Äquivalent Präfix müssenRubin, 91 Bytes
Ungolfed
quelle
Ich habe eine Antwort in C # verpasst, also ...
C # (.NET Core) ,
175 bis174 ByteProbieren Sie es online!
quelle
int
s in die for-Schleife setzen:for(int i=0,j,d=32,s=1;i<54;i++)for(j=0
Tcl , 209 Bytes
Probieren Sie es online!
Tcl , 212 Bytes
Probieren Sie es online!
tcl, 213
Demotcl, 214
Demo
tcl, 227
Demo
tcl, 236
Demo
tcl, 237
Demo
Alternativer Ansatz mit gleicher Größe:
Demo
Tcl, 288
Demotcl, 297 bytes (naiver versuch)
Demo
quelle
Poetisch , 899 Bytes
Probieren Sie es online!
Poetic ist ein Esolang, den ich 2018 für ein Klassenprojekt gemacht habe. Es handelt sich im Grunde genommen um einen Brainfuck mit Wortlängen anstelle von Symbolen.
Dieses Gedicht ist ... deprimierend. 😟
quelle
Python 2.7,
194188 Bytesquelle
map(chr
map(c
c
chr
Jq 1,5 , 180 Bytes
Erweitert
Probieren Sie es online!
quelle
Schrägstriche ( /// ), 324 Byte
Die erste (Standard-) Aktion in Schrägstrichen ist "Drucken", daher wird die Zeichenfolge gedruckt. Das
/
und\
muss mit\
s entkommen werden .quelle
Java 8,
176173 BytesPort von @Charlies C # .NET-Antwort , also stelle sicher, dass du ihn positiv bewertest.
-3 Bytes dank @ceilingcat .
Probieren Sie es online aus.
quelle