Brainfuck, 240 caracteres
,
>++
+++++
+[-<---
--->],[>+
+++++++[-<-
----->]<<[->+
+++++++++<]>>]<
[->+>+>>>>>>>+<<<
<<<<<<]>>>>++++++++
[-<++++>]>++++++[-<++
+++++>]+>>>++[-<+++++>]
<<<<<<[-[>.<-]<[-<+>>+<]<
[->+<]>>>>>[-<.>>+<]>[-<+>]
>.<<++<<<-<->]>>>>>>>-[-<<<<<
<.>>>
>>>]<
<<<<.
Todavía no está listo. Funciona, pero solo con números de un solo dígito.
EDITAR: ¡Listo! Funciona para intérpretes que usan 0 como EOF. Vea NOTE
s en la fuente comentada para aquellos con -1.
EDITAR nuevamente: debo tener en cuenta que debido a que Brainfuck carece de un método estándar para leer argumentos de línea de comandos, usé stdin (entrada estándar) en su lugar. ASCII, por supuesto.
EDITAR una tercera vez: Oh querido, parece que eliminé .
los caracteres (salida) al condensar el código. Fijo...
Aquí está la gestión básica de la memoria del bucle principal. Estoy seguro de que se puede optimizar mucho para reducir el recuento de caracteres en aproximadamente 30.
- Temporal
- Copia del mostrador
- Contador (cuenta hasta 0)
- Carácter de espacio (decimal 32)
- Asterisco (decimal 42)
- Número de asteriscos en la línea actual (1 + 2 * contador)
- Temporal
- Nuevo personaje de línea
- ¿Temporal?
- Número total de líneas (es decir, valor de entrada; almacenado hasta el final, al imprimir el tronco)
Versión condensada:
,>++++++++[-<------>],[>++++++++[-<------>]<<[->++++++++++<]>>]<[->+>+>>>>>>>+<<<<<<<<<]>>>>++++++++[-<++++>]>++++++[-<+++++++>]+>>>++[-<+++++>]<<<<<<[-[>.<-]<[-<+>>+<]<[->+<]>>>>>[-<.>>+<]>[-<+>]>.<<++<<<-<->]>>>>>>>-[-<<<<<<.>>>>>>]<<<<<.
Y la bonita versión:
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.