Étant donné un numéro N
, comment puis-je imprimer un sapin de Noël de hauteur en N
utilisant le moins de caractères de code? N
est supposé contraint à une valeur minimale de 3
, et à une valeur maximale de 30
(les bornes et la vérification des erreurs ne sont pas nécessaires). N
est le seul et unique argument de ligne de commande de votre programme ou de votre script.
Toutes les langues sont appréciées, si vous voyez une langue déjà implémentée et que vous pouvez la raccourcir, modifiez-la si possible - commentez sinon et espérez que quelqu'un nettoie les dégâts. Incluez des nouvelles lignes et des espaces blancs pour plus de clarté, mais ne les incluez pas dans le nombre de caractères.
Un arbre de Noël est généré en tant que tel, avec son "tronc" composé uniquement d'un "*" centré
N = 3:
*
***
*****
*
N = 4:
*
***
*****
*******
*
N = 5:
*
***
*****
*******
*********
*
N définit la hauteur des branches, sans compter le tronc d'une ligne.
Joyeux Noël PPCG!
c=:[:((\:i.@#),}.)"1[:$&'*'"0[:>:0,~i.
Brainfuck, 240 caractères
Pas encore fait. Cela fonctionne, mais seulement avec des nombres à un chiffre.EDIT: fait! Fonctionne pour les interprètes utilisant 0 comme EOF. Voir
NOTE
s dans la source commentée pour ceux avec -1.EDIT à nouveau: je dois noter que, comme Brainfuck n’a pas de méthode standard pour lire les arguments en ligne de commande, j’ai utilisé stdin (entrée standard). ASCII, bien sûr.
EDIT une troisième fois: Oh mon Dieu, il semble que j’ai enlevé
.
des caractères lors de la condensation du code. Fixé...Voici la gestion de base de la mémoire de la boucle principale. Je suis sûr que cela peut être fortement optimisé pour réduire le nombre de personnages de 30 ou plus.
Version condensée:
Et la jolie version:
la source
Perl, 50 caractères
(1 espaces pertinents)
perl: version une ligne:
et maintenant avec plus de blanc:
Explication développée pour les utilisateurs non-Perl.
la source
Langue: Python (par le biais de shell), Nombre de caractères: 64 (2 espaces significatifs)
la source
x86 asm 16 bits, 50 octets
Pas encore de version d'assemblage? :)
(Remarque: N est limité à 1 - 9 dans cette version)
Télécharger ici
la source
Langue: Script batch Windows ( choquant! )
la source
setlocal enabledelayedexpansion
commande.Ruby, 64 octets
Joyeux Noël à tous!
Edit: Améliorations ajoutées comme suggéré par Joshua Swink
la source
n=$*[0].to_i;puts [*1..n,1].map{|i|" "*(n-i)+"*"*(2*i-1)}
Langue: C #, Nombre de personnages: 120
Juste le code, sans formatage (120 caractères):
Version avec 109 caractères (juste le code):
Résultat pour height = 10:
la source
Langue: dc (via shell) Nombre de personnages: 83
Version dc un peu plus courte:
EDIT: changé constante 10 en 1 $
la source
Python, astuce "-c" ... @ 61 caractères (et une ligne)
la source
Voici une version de Haskell raisonnablement peu encombrante, avec 107 caractères:
le lancer:
Joyeux Noël à tous :)
la source
Langue: dc (via shell), Nombre de personnages: 119 (1 espace significatif)
Juste pour l'obscurité de celui-ci :)
la source
Meilleur C ++, environ 210 caractères:
Réduit à 179:
la source
Langue: python, pas d'astuce, 78 caractères
la source
Groovy 62B
_
la source
Améliorer la réponse de Ω. Je ne peux pas commenter, alors voici un nouveau post. 72 caractères.
Utilisation de l'astuce "python -c", 61 caractères.
J'ai appris la fonction de centre et que "python -c" peut accepter plus d'un code de ligne. Merci, ΩΤΖΙΟΥ.
la source
C # en utilisant Linq:
170 caractères.
la source
AWK, 86 caractères sur une ligne.
la source
Langue: Java, Nombre de personnages: 219
Pour référence, j'ai pu réduire la précédente solution Java en utilisant la récursivité, passant du minimum précédent à 231 caractères à 239 caractères
T
. Vous pouvez créer une petite forêt d'T
instances de taille aléatoire . Voici la dernière évolution sur ce point:la source
class T{public static void main(String[]v){long n=new Long(v[0]),r=1,s;String o="";for(;r<=n;r++){for(s=n-r;s-->0;)o+=' ';for(;++s<2*r;)o+='*';o+="\n";}while(n-->1)o+=' ';System.out.println(o+"*");}}
Langue: PowerShell, Nombre de personnages: 41 (incluant 1 espace)
la source
21 caractères avec APL dyalog.
Donne un vecteur d'entiers commençant par 1.
1, ⍨ ajoute un un à la fin du vecteur. Ce sera le pied de l'arbre.
'*' \ ¨⍨ donne un vecteur de * chaînes de longueurs données par le vecteur précédent.
↑ transforme le vecteur en matrice et ajoute des espaces à droite.
m ← stocke la matrice dans m.
0 1 ↓ supprime zéro ligne et la première colonne.
⌽ inverse la matrice.
m, ⍨ concatène avec m sur le côté droit.
la source
m,⍨⌽0 1↓m←
->(⌽,0 1↓⊢)
Langue: C, Nombre de personnages: 133
Amélioration de la version C
Fonctionne et prend même la hauteur de l’arbre comme argument. Besoin d'un compilateur qui tolère le code de style K & R.
Je me sens tellement sale maintenant .. Ce code est moche.
la source
R (62 octets)
Je n'ai pas encore vu de solution R. Corrigez-moi si je l'ai raté.
Sortie:
la source
Langue: C, Nombre de personnages: 176 (2 espaces pertinents)
la source
Version shell, 134 caractères:
la source
Langue: Python, Nombre de personnages significatifs: 90
C'est moche mais ça marche:
...
la source
Comme il s’agit d’un CW: Je n’aime pas que le code soit toujours organisé en termes de "nombre de caractères" ou d’autres. Ne pourraient-ils pas être organisés en termes de nombre d'instructions pour le compilateur / interprète (ou un critère similaire)? Voici à nouveau la solution Ruby , et elle est fondamentalement la même, mais maintenant pour la consommation humaine:
la source
Fusain , 9 octets (sans compétition)
Essayez-le en ligne!
Verbeux
Essayez-le en ligne!
la source
Gelée , 12 octets
Essayez-le en ligne!
la source
PHP, 111 caractères
(Le tout dernier caractère devrait être une nouvelle ligne.)
Version lisible:
la source