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.
- Temporaire
- Copie de compteur
- Compteur (compte jusqu'à 0)
- Caractère d'espace (décimal 32)
- Caractère astérisque (décimal 42)
- Nombre d'astérisques sur la ligne en cours (compteur 1 + 2 *)
- Temporaire
- Nouveau caractère de ligne
- Temporaire?
- Nombre total de lignes (c.-à-d. Valeur d'entrée; stockées jusqu'à la toute fin lors de l'impression du tronc)
Version condensée:
,>++++++++[-<------>],[>++++++++[-<------>]<<[->++++++++++<]>>]<[->+>+>>>>>>>+<<<<<<<<<]>>>>++++++++[-<++++>]>++++++[-<+++++++>]+>>>++[-<+++++>]<<<<<<[-[>.<-]<[-<+>>+<]<[->+<]>>>>>[-<.>>+<]>[-<+>]>.<<++<<<-<->]>>>>>>>-[-<<<<<<.>>>>>>]<<<<<.
Et la jolie version:
ASCII to number
,>
++++++++[-<------>] = 48 ('0')
Second digit (may be NULL)
,
NOTE: Add plus sign here if your interpreter uses negative one for EOF
[ NOTE: Then add minus sign here
>++++++++[-<------>]
<<[->++++++++++<]>> Add first digit by tens
]
Duplicate number
<[->+>+>>>>>>>+<<<<<<<<<]>>
Space char
>>++++++++[-<++++>]
Asterisk char
>++++++[-<+++++++>]
Star count
+
New line char
>>>++[-<+++++>]<<<
<<<
Main loop
[
Print leading spaces
-[>.<-]
Undo delete
<[-<+>>+<]
<[->+<]
>>
Print stars
>>>[-<.>>+<]
Add stars and print new line
>[-<+>]
>.<
<++
<<<
-<->
End main loop
]
Print the trunk
>>>>>>>
-[-<<<<<<.>>>>>>]
<<<<<.
Merry Christmas =)
c=:[:((\:i.@#),}.)"1[:$&'*'"0[:>:0,~i.