Brainfuck, 240 caratteri
,
>++
+++++
+[-<---
--->],[>+
+++++++[-<-
----->]<<[->+
+++++++++<]>>]<
[->+>+>>>>>>>+<<<
<<<<<<]>>>>++++++++
[-<++++>]>++++++[-<++
+++++>]+>>>++[-<+++++>]
<<<<<<[-[>.<-]<[-<+>>+<]<
[->+<]>>>>>[-<.>>+<]>[-<+>]
>.<<++<<<-<->]>>>>>>>-[-<<<<<
<.>>>
>>>]<
<<<<.
Non ancora fatto. Funziona, ma solo con numeri a una cifra.
EDIT: Fatto! Funziona con interpreti che usano 0 come EOF. Vedi NOTE
s nella fonte commentata per quelli con -1.
EDIT di nuovo: dovrei notare che poiché Brainfuck non ha un metodo standard per leggere gli argomenti della riga di comando, ho usato invece stdin (input standard). ASCII, ovviamente.
MODIFICA una terza volta: oh mio Dio, mi sembra di aver rimosso i caratteri .
(in uscita) durante la condensazione del codice. Fisso...
Ecco la gestione di base della memoria del loop principale. Sono sicuro che può essere fortemente ottimizzato per ridurre il numero di caratteri di circa 30.
- Temporaneo
- Copia del contatore
- Contatore (conta fino a 0)
- Carattere spaziale (decimale 32)
- Carattere asterisco (decimale 42)
- Numero di asterischi sulla riga corrente (contatore 1 + 2 *)
- Temporaneo
- Carattere di nuova riga
- Temporaneo?
- Numero totale di righe (ovvero valore di input; memorizzato fino alla fine, durante la stampa del trunk)
Versione condensata:
,>++++++++[-<------>],[>++++++++[-<------>]<<[->++++++++++<]>>]<[->+>+>>>>>>>+<<<<<<<<<]>>>>++++++++[-<++++>]>++++++[-<+++++++>]+>>>++[-<+++++>]<<<<<<[-[>.<-]<[-<+>>+<]<[->+<]>>>>>[-<.>>+<]>[-<+>]>.<<++<<<-<->]>>>>>>>-[-<<<<<<.>>>>>>]<<<<<.
E la versione carina:
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.