Brainfuck, 240 символів
,
>++
+++++
+[-<---
--->],[>+
+++++++[-<-
----->]<<[->+
+++++++++<]>>]<
[->+>+>>>>>>>+<<<
<<<<<<]>>>>++++++++
[-<++++>]>++++++[-<++
+++++>]+>>>++[-<+++++>]
<<<<<<[-[>.<-]<[-<+>>+<]<
[->+<]>>>>>[-<.>>+<]>[-<+>]
>.<<++<<<-<->]>>>>>>>-[-<<<<<
<.>>>
>>>]<
<<<<.
Ще не зроблено. Це працює, але тільки з одноцифровими числами.
EDIT: Готово! Працює для перекладачів, що використовують 0 як EOF. Дивіться NOTE
s у коментованому джерелі для тих, хто має -1.
ЗНО ЗНО: Я мушу зазначити, що оскільки Brainfuck не має стандартного методу для читання аргументів командного рядка, я використовував натомість stdin (стандартний ввід). ASCII, звичайно.
Редагуйте втретє: О, шановний, здається, що я здирав .
(виводив) символи, коли конденсувався код. Виправлено ...
Ось основне управління пам'яттю основного циклу. Я впевнений, що це може бути сильно оптимізовано, щоб зменшити кількість символів на 30 або близько того.
- Тимчасовий
- Копія лічильника
- Лічильник (рахується до 0)
- Пробіл символів (десятковий 32)
- Символ зірочки (десятковий 42)
- Кількість зірочок на поточному рядку (1 + 2 * лічильник)
- Тимчасовий
- Новий символ рядка
- Тимчасовий?
- Загальна кількість рядків (тобто вхідне значення; зберігається до самого кінця при друку магістралі)
Скорочена версія:
,>++++++++[-<------>],[>++++++++[-<------>]<<[->++++++++++<]>>]<[->+>+>>>>>>>+<<<<<<<<<]>>>>++++++++[-<++++>]>++++++[-<+++++++>]+>>>++[-<+++++>]<<<<<<[-[>.<-]<[-<+>>+<]<[->+<]>>>>>[-<.>>+<]>[-<+>]>.<<++<<<-<->]>>>>>>>-[-<<<<<<.>>>>>>]<<<<<.
І прекрасна версія:
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.