Einführung
Lassen Sie uns, teilweise inspiriert von dieser StackOverflow-Frage , einen ASCII-Blitz zeichnen.
Schreiben Sie ein Programm, das eine positive Ganzzahl n
über STDIN oder die Befehlszeile annimmt und den folgenden ASCII-Blitz ausgibt.
Eingang
Positive ganze Zahl n
die die Anzahl der zu zeichnenden Blitz-Zick-Zack-Ebenen darstellt.
Beispielausgabe
n = 1
__
\ \
\ \
\ \
\/
n = 2
__
\ \
\ \
__\ \
\ __\
\ \
\ \
\/
n = 3
__
\ \
\ \
__\ \
\ __\
\ \
__\ \
\ __\
\ \
\ \
\/
n = 4
__
\ \
\ \
__\ \
\ __\
\ \
__\ \
\ __\
\ \
__\ \
\ __\
\ \
\ \
\/
. . . etc
Zusätzliche Bemerkungen
- Sie können eine Funktion schreiben, die
n
als einziges Argument die Zeichenfolge ausgibt oder zurückgibt. - Nachgestellte Leerzeichen und neue Zeilen sind in Ordnung.
- Keine führenden Leerzeichen, außer wenn dies für das angegebene Muster angemessen ist.
- Kürzester Code in Bytes gewinnt.
Antworten:
Java,
201196189186182 BytesOffensichtlich nicht das Beste, aber es ist in Java.
quelle
main
Methode eingeben .main
nicht zur Byteanzahl zählen sollte, und einigen Sprachen, die ausführliche Schlüsselwörter haben, sollten möglicherweise Makros erlaubt sein. Dann wäre es interessantCJam, 41 Bytes
Ich kann wahrscheinlich ein paar Bytes mehr herauspressen, aber hier ist etwas Komprimierung. Ich suchte eine Basis aus, die zu keinen Unprintables führen würde.
Probieren Sie es online aus .
Der Blitz teilt ich in
top + middle * (input-1) + bottom
, in dertop
,middle
,bottom
(komprimierte Basisumwandlung unter Verwendung) sind(Leerzeichen sind mit
.
s gekennzeichnet)40 Bytes
Dank an Optimizer
quelle
top + middle * (input-1) + bottom
Vielen Dank für die Erklärung mit , es erinnerte mich daran, dass Powershell Strings multiplizieren konnte: PJavaScript ( ES6 ) 76
Unter Verwendung der Vorlagenzeichenfolge werden die 3 Zeilenvorschübe signifikant und gezählt.
Testlauf des Snippets (nur Firefox)
quelle
PowerShell,
72 -63 ByteDummes Windows und dein \ r \ n ... Das könnten
67 bis59 Bytes gewesen sein!quelle
PHP -
84 7978 BytesZeigen Sie die Ergebnisquelle an oder binden Sie sie ein
<pre />
, um die Ergebnisse zu überprüfen. Die Zeilenumbrüche sind im Code erforderlich.Die -1 könnte auf die verschoben werden
define
, aber ich hielt das für einen Betrüger.1. Verbesserung: durch
\n
aktuelle Zeilenumbrüche ersetzen2. Da ich einen var definieren kann, habe ich einen CONTANT verwendet, der die
$
. + ein nicht benötigtes Leerzeichen in str_repeat3.: Entfernt versehentlich den Wert -1, speichert aber ein Byte, indem
<?=
anstelle von Echo verwendet wird.quelle
Pyth,
6054 Bytes (Danke @isaacg)Mein erster Versuch bei Pyth, wahrscheinlich sehr schlecht.
Überprüfen Sie es hier .
quelle
\n
. Auch die erste\\
könnte in dem Programm nur ein\
.CJam, 50 Bytes
Probieren Sie es hier aus
quelle
Brainfuck, 164 Bytes
Mit Kommentaren:
Okay, wie diese Brainfuck-Antwort Java und C # schlägt?
quelle
> <> (Fisch), 409 Bytes
Führen Sie den Befehl aus,
fish.py bolt.fish --value n
wobeibolt.fish
der Programmname undn
Ihre positive Ganzzahleingabe ist.Es ist nicht kurz, aber es sieht cool aus. Mein Versuch war es, es wie einen Blitzschlag aussehen zu lassen. Außerdem treten immer Fehler beim Abschluss auf.
quelle
Perl, 69 + 1
69 Zeichen plus 1 für die
-n
Befehlszeilenoption zum Abrufen der Eingabe von stdin.Anwendungsbeispiel:
quelle
perl -pe'$_="__\ns s"."__s\\ __\\\n s"x--$_." s \\/";s!s!\\ \\\n!g'
. Auch\n
kann mit einem wörtlichen Zeilenumbruch für eine weiteres 3 - Zeichen gespeichert ersetzt werden.Javascript (ES6), 86
Ich werde nicht gewinnen, aber ich liebe 1-Zeilen-Lösung und ich hasse Schrägstriche.
quelle
atob
Dokumentation anC 101 Bytes
Meine nicht so originelle Implementierung in c
quelle
221 Bytes
Dies ist nicht die beste oder die kleinste Antwort, aber ich dachte, ich würde es versuchen. Fsacers Antwort ist viel kürzer und ich denke, Sie sollten es überprüfen. Ich habe mich gerade dazu entschlossen, dies wirklich nur als alternative Methode zu tun.
quelle
class C{static void Main(string[]n){var e=int.Parse(n[0]);var o=@"__{0}\ \{0} \ \{0}";while(e-->1){o+=@"__\ \{0}\ __\{0} \ \{0}";}System.Console.Write(o+@" \ \{0} \/{0}","\n");}}
C #, 166 Bytes
EDIT 1: Verbesserte das Ergebnis von 186B auf 173B.
EDIT 2: 1B wurde mit
PadLeft
anstelle von gespeichertPadRight
EDIT 3: gespeicherte 8B durch Eintropfen
PadLeft
‚s zweite Parameter und unter Verwendung von wortgetreuen Stringliteralequelle
public
am Anfang auf das verzichten, und statt eines char-Arrays können Sie einString.PadRight(int, char)
kürzeres Array verwenden , mit dem Sie ein ASCII-Zeichen verwenden können, das nicht entkommen muss.Awk, 101 + 8 Bytes
101 Zeichen plus 8
-v n=$1
, um eine Ganzzahl aus der Shell zu erhalten.Neu auf dieser SE-Site, unklar ob diese Parameter zählen sollten.
Ungolfed
Anwendungsbeispiel:
quelle
-v
Teil nicht erforderlich . Ganz zu schweigen davon, dass die gesamte variable Idee nicht erforderlich ist, genau wie der separateEND
Block. 89 Zeichen:{l="\\ \\";print"__\n"l"\n "l;for(;--$1;)print"__"l"\n\\ __\\\n "l;print" "l"\n \\/"}
pastebin.com/NCznF9kHPython
978278char:Dies ist mein erster Code Golf
@ (^ _ ^) @
Hier testen
quelle
C
119108 BytesErster Versuch, 150 Bytes
main
Akzeptiert ein int-Argument. Führen Sie den folgenden Befehl aus:./lightning . . .
to pass4
als Argument.quelle
Python 3,
126118117 BytesNur etwas, mit dem wir anfangen können.
quelle
[0]*(n-1)
, umn-1
Iterationen zu erhalten . Sie können auch schreiben(n-1)
als~-n
.i in [0]
zui in[0]
.for i in[0]*~-n:p(' \\ \\\n__\\ \\\n\\ __\\')
.Python 2, 76 Bytes
Drucken Sie einfach die ersten drei Zeilen und dann die nächsten drei Zeilen
n-1
und drucken Sie dann die letzten zwei Zeilen. Alles auf einen Streich.Und hier ist ein netter Versuch einer Alternative, die (leider) genau die gleiche Anzahl von Bytes verwendet:
quelle
*
, das gibt mir 77 Bytes - oder nicht, aber das kostet 79 Bytes. :(F #, 98 Zeichen, 105 Bytes
quelle
CJam 54 Chars
nicht die kürzeste, aber seit ich heute mit CJam angefangen habe, bin ich damit zufrieden.
Versuch es
quelle
Pascal:
149142141137 ZeichenSchließlich ist Pascals einzige Stärke beim Golfen, dass Backslashes kein Entkommen brauchen ...
quelle
for n:=2 to n do
funktioniert auch.Google Sheets, 60 Bytes
Anonyme Arbeitsblattfunktion, die Eingaben aus dem Bereich
[A1]
und Ausgaben in die aufrufende Zelle übernimmt .quelle
Perl 5 , 58 + 1 (
-n
) = 59 BytesProbieren Sie es online!
quelle
SpecBAS -
135104 BytesDer Apostroph in PRINT-Anweisungen bewegt den Cursor in eine neue Zeile.
Mit SpecBAS können Sie ASCII-Zeichen in eine Zeichenfolge über einbinden
#n
, sodass einige Wagenrückläufe (ASCII 13) eingebaut sind.Erstellen Sie eine Zeichenfolge aus Wagenrückläufen und anderen Zeichen, und
REP$
wiederholen Sie sie dann so oft wie erforderlich.quelle
PHP 155
Ungolfed Version
quelle
echo$l=PHP_EOL,"__$l";$g="\\ \\$l";for($i=0;$i<$argv[1];$i++){echo($i?"__$g\\ __\\$l":$g)," $g";}echo" $g",' \\/',$l;
$i=0
; Entferne die Klammern für diefor
Schlaufe. Inkrementiere den Zähler in der Schleife (echo($i++?"…
).Java,
183180 BytesLua, 110 Bytes
quelle
Netzhaut , 46 Bytes
Nimmt Eingaben als unär.
Jede Zeile sollte in eine eigene Datei und gehen
#
in den Dateien in eine neue geändert werden. Dies ist unpraktisch, aber Sie können den Code so wie er ist als eine Datei mit dem-s
Flag ausführen , wobei die#
Markierungen erhalten bleiben. Sie können die#
Zeilenumbrüche in der Ausgabe zur besseren Lesbarkeit ändern . Z.B:Der Algorithmus ist sehr einfach. Die Linienpaare (Regex - Ersatzpaare) führen die folgenden Substitutionsschritte aus:
1
von der unären Eingabe.\ \
Teile des Blitzes, um die gewünschte Ausgabe zu erhalten.quelle
Powershell, 59 Bytes
Testskript:
Ausgabe:
Erläuterung:
Dieses Skript ist traditionell
top
+middle
+bottom
. Es gibt nur eine clevere Sache: Das Komma vor der mittleren Zeichenfolge erzwingt die Wiederholung eines Array-Elements anstelle einer Zeichenfolge. Daher wird jedermiddle
in einer neuen Zeile angezeigt.quelle