Brainfuck, 240 znaków
,
>++
+++++
+[-<---
--->],[>+
+++++++[-<-
----->]<<[->+
+++++++++<]>>]<
[->+>+>>>>>>>+<<<
<<<<<<]>>>>++++++++
[-<++++>]>++++++[-<++
+++++>]+>>>++[-<+++++>]
<<<<<<[-[>.<-]<[-<+>>+<]<
[->+<]>>>>>[-<.>>+<]>[-<+>]
>.<<++<<<-<->]>>>>>>>-[-<<<<<
<.>>>
>>>]<
<<<<.
Jeszcze nie skończone. Działa, ale tylko z liczbami jednocyfrowymi.
EDYCJA: Gotowe! Działa dla tłumaczy używających 0 jako EOF. Zobacz NOTE
s w skomentowanym źródle dla tych z -1.
Znowu EDYTUJ: Powinienem zauważyć, że ponieważ Brainfuck nie ma standardowej metody odczytu argumentów wiersza poleceń, zamiast tego użyłem stdin (standardowe wejście). Oczywiście ASCII.
EDYCJA po raz trzeci: Ojej, wygląda na to, że usunąłem .
(wyjściowe) znaki podczas zagęszczania kodu. Naprawiony...
Oto podstawowe zarządzanie pamięcią głównej pętli. Jestem pewien, że można go znacznie zoptymalizować, aby zmniejszyć liczbę postaci o około 30.
- Chwilowy
- Kopia licznika
- Licznik (liczy się do 0)
- Znak spacji (dziesiętnie 32)
- Znak gwiazdki (dziesiętnie 42)
- Liczba gwiazdek w bieżącej linii (licznik 1 + 2 *)
- Chwilowy
- Nowy znak linii
- Chwilowy?
- Całkowita liczba wierszy (tj. Wartość wejściowa; przechowywana do samego końca, podczas drukowania pnia)
Wersja skrócona:
,>++++++++[-<------>],[>++++++++[-<------>]<<[->++++++++++<]>>]<[->+>+>>>>>>>+<<<<<<<<<]>>>>++++++++[-<++++>]>++++++[-<+++++++>]+>>>++[-<+++++>]<<<<<<[-[>.<-]<[-<+>>+<]<[->+<]>>>>>[-<.>>+<]>[-<+>]>.<<++<<<-<->]>>>>>>>-[-<<<<<<.>>>>>>]<<<<<.
I ładna wersja:
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.