introduction
Inspiré en partie par cette question de StackOverflow , dessinons un éclair ASCII.
Ecrivez un programme qui prend un entier positif n
via STDIN ou une ligne de commande et génère le Lightning Bolt ASCII ci-dessous.
Contribution
Positif Entier n
représentant le nombre de niveaux zig-zag éclair à dessiner.
Exemple de sortie
n = 1
__
\ \
\ \
\ \
\/
n = 2
__
\ \
\ \
__\ \
\ __\
\ \
\ \
\/
n = 3
__
\ \
\ \
__\ \
\ __\
\ \
__\ \
\ __\
\ \
\ \
\/
n = 4
__
\ \
\ \
__\ \
\ __\
\ \
__\ \
\ __\
\ \
__\ \
\ __\
\ \
\ \
\/
. . . etc
Notes complémentaires
- Vous pouvez écrire une fonction qui prend
n
comme seul argument et affiche ou renvoie la chaîne. - Les espaces de fuite et les nouvelles lignes sont acceptables.
- Aucun espace de début, sauf dans les cas appropriés pour le motif désigné.
- Le code le plus court en octets gagne.
Réponses:
Java,
201196189186182 octetsDe toute évidence , pas le meilleur, mais il est en Java.
la source
main
méthode.main
nombre d'octets ne devrait pas être pris en compte, et que quelques langues comportant des mots clés explicites devraient peut-être être autorisées à utiliser des macros. Alors ce serait intéressantCJam, 41 octets
Je peux probablement extraire quelques octets de plus, mais voici une compression. J'ai choisi une base qui ne mènerait pas à des non imprimables.
Essayez-le en ligne .
L'éclair est divisé en
top + middle * (input-1) + bottom
, oùtop
,middle
,bottom
(comprimé en utilisant la conversion de la base) sont(Les espaces sont marqués d'un
.
s)40 octets
Merci à Optimizer
la source
top + middle * (input-1) + bottom
, cela m'a rappelé que powershell pourrait multiplier les chaînes: PJavaScript ( ES6 ) 76
En utilisant la chaîne de modèle, les 3 nouvelles lignes sont significatives et comptées.
Tester l'exécution de l'extrait de code (Firefox uniquement)
la source
PowerShell,
7263 octetsWindows stupide et votre \ r \ n ... Cela aurait pu être
6759 octets!la source
PHP -
84 7978 octetsAffichez la source des résultats ou intégrez-la
<pre />
pour vérifier les résultats. Les nouvelles lignes sont obligatoires dans le code.Le -1 pourrait être déplacé vers le
define
, mais j'ai considéré cela comme une triche.1ère amélioration: remplacer
\n
par de nouvelles lignes réelles2ème: Depuis que je peux définir une var, j'ai utilisé un CONTANT, le coffre-fort
$
. + un espace inutile dans str_repeat3rd: Suppression accidentelle du -1, mais sauvegarde d'un octet en utilisant
<?=
au lieu de echo.la source
Pyth,
6054 octets (Merci @isaacg)Mon premier essai sur Pyth, probablement très mauvais.
Vérifiez ici .
la source
\n
. En outre, le premier\\
programme pourrait être juste un\
.CJam, 50 octets
Essayez-le ici
la source
Brainfuck, 164 octets
Avec des commentaires:
Ok, comment cette réponse de Brainfuck bat Java et C #?
la source
> <> (Poisson), 409 octets
Run by
fish.py bolt.fish --value n
oùbolt.fish
est le nom du programme etn
correspond à votre entrée entière positive.Ce n'est pas court, mais ça a l'air cool. J'essayais de faire en sorte que cela ressemble à un coup de foudre. En outre, il se trompe toujours à la fin.
la source
Perl, 69 + 1
69 caractères, plus 1 pour le
-n
commutateur de ligne de commande pour extraire une entrée de stdin.Exemple d'utilisation:
la source
perl -pe'$_="__\ns s"."__s\\ __\\\n s"x--$_." s \\/";s!s!\\ \\\n!g'
.\n
Peut également être remplacé par un saut de ligne littéral pour 3 autres caractères sauvegardés.Javascript (ES6), 86
Je ne vais pas gagner, mais j'adore la solution à 1 ligne et je déteste les barres obliques.
la source
atob
documentationC, 101 octets
Ma mise en oeuvre pas si originale en c
la source
C #, 221 octets
Ce n'est pas la meilleure, ni la plus petite réponse, mais je me suis dit que j'essaierais. La réponse de Fsacer est beaucoup plus courte et je pense que vous devriez vérifier. J'ai juste décidé de faire cela comme une méthode alternative vraiment.
la source
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 octets
EDIT 1: amélioration du résultat de 186B à 173B
EDIT 2: sauvegarde de 1B en utilisant à la
PadLeft
place dePadRight
EDIT 3: sauvegarde de 8B en supprimant
PadLeft
le second paramètre et en utilisant des chaînes de caractères littéralesla source
public
au début, et au lieu d’utiliser un tableau de caractères, vous pouvez utiliserString.PadRight(int, char)
, ce qui est plus court et vous permettra d’utiliser un caractère ascii qui n’a pas besoin d’être échappé.Awk, 101 + 8 octets
101 caractères, plus 8 pour
-v n=$1
obtenir un entier du shell.Nouveau sur ce site SE, ne sait pas si ces paramètres doivent compter.
Ungolfed
Exemple d'utilisation:
la source
-v
pièce n'est pas nécessaire . Sans mentionner que toute l'idée de variable est inutile, tout comme leEND
bloc séparé . 89 personnages:{l="\\ \\";print"__\n"l"\n "l;for(;--$1;)print"__"l"\n\\ __\\\n "l;print" "l"\n \\/"}
pastebin.com/NCznF9kHPython
978278char:C'est mon premier code golf
@ (^ _ ^) @
Testez ici
la source
C,
119108 octetsPremière tentative, 150 octets
main
accepte un argument int, alors lancez comme ceci:./lightning . . .
à passer4
comme argument.la source
Python 3,
126118117 octetsJuste quelque chose pour nous lancer.
la source
[0]*(n-1)
pour obtenir desn-1
itérations. Vous pouvez également écrire en(n-1)
tant que~-n
.i in [0]
ài in[0]
.for i in[0]*~-n:p(' \\ \\\n__\\ \\\n\\ __\\')
.Python 2, 76 octets
Imprimez simplement les trois premières lignes, puis les trois
n-1
fois, puis les 2 dernières lignes. Tout en un.Et voici un bon essai pour une alternative qui utilise (malheureusement) exactement le même nombre d'octets:
la source
*
. Cela me donne 77 octets - ou ne l'aligne pas, mais cela coûte 79 octets. :(F #, 98 caractères, 105 octets
la source
CJam 54 Chars
pas le plus court, mais depuis que j'ai commencé CJam aujourd'hui, je suis content de cela.
L'essayer
la source
Pascal:
149142141137 caractèresAprès tout, la seule force de Pascal en matière de golf est que les antislashs sont incontournables…
la source
for n:=2 to n do
fonctionne aussi.Google Sheets, 60 octets
Fonction de feuille de travail anonyme qui prend des entrées de plage
[A1]
et des sorties dans la cellule appelante.la source
Perl 5 , 58 + 1 (
-n
) = 59 octetsEssayez-le en ligne!
la source
SpecBAS -
135104 octetsL'apostrophe dans les instructions PRINT déplace le curseur sur une nouvelle ligne.
SpecBAS vous permet d’incorporer des caractères ASCII dans une chaîne via
#n
. Vous avez donc intégré des retours à la ligne (ASCII 13).Construit une chaîne en utilisant des retours à la ligne et d'autres caractères, puis utilisé
REP$
pour la répéter le nombre de fois requis.la source
PHP 155
Version non-golfée
la source
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
; enlever les crochets pour lafor
boucle; incrémente le compteur dans la boucle (echo($i++?"…
).Java,
183180 octetsLua, 110 octets
la source
Retina , 46 octets
Prend l'entrée comme unaire.
Chaque ligne doit aller dans son propre fichier et
#
doit être changée en nouvelle ligne dans les fichiers. Cela n’est pas pratique, mais vous pouvez exécuter le code tel quel, en tant que fichier unique, avec l’-s
indicateur, en conservant les#
marqueurs.#
Si vous le souhaitez, vous pouvez modifier les caractères en nouvelles lignes dans la sortie pour en améliorer la lisibilité. Par exemple:L'algorithme est très simple. Les paires de lignes (paires regex - substitute) effectuent les étapes de substitution suivantes:
1
de l'entrée unaire.\ \
parties comprimées de l'éclair pour obtenir le résultat souhaité.la source
Powershell, 59 octets
Script de test:
Sortie:
Explication:
Ce script est traditionnel
top
+middle
+bottom
. Une seule chose intelligente: la virgule précédant la chaîne du milieu oblige à répéter un élément de tableau plutôt qu'une chaîne. Par conséquent, chacunmiddle
est affiché sur une nouvelle ligne.la source