Brainfuck, 240 karakter
,
>++
+++++
+[-<---
--->],[>+
+++++++[-<-
----->]<<[->+
+++++++++<]>>]<
[->+>+>>>>>>>+<<<
<<<<<<]>>>>++++++++
[-<++++>]>++++++[-<++
+++++>]+>>>++[-<+++++>]
<<<<<<[-[>.<-]<[-<+>>+<]<
[->+<]>>>>>[-<.>>+<]>[-<+>]
>.<<++<<<-<->]>>>>>>>-[-<<<<<
<.>>>
>>>]<
<<<<.
Belum selesai. Ini bekerja, tetapi hanya dengan angka satu digit.
EDIT: Selesai! Bekerja untuk penerjemah menggunakan 0 sebagai EOF. Lihat NOTE
s dalam sumber komentar untuk mereka yang -1.
Sunting lagi: Saya harus mencatat bahwa karena Brainfuck tidak memiliki metode standar untuk membaca argumen baris perintah, saya menggunakan stdin (input standar) sebagai gantinya. ASCII, tentu saja.
EDIT ketiga kalinya: Ya ampun, sepertinya saya menanggalkan .
(output) karakter ketika mengkondensasi kode. Tetap...
Inilah manajemen memori dasar dari loop utama. Saya yakin ini bisa sangat dioptimalkan untuk mengurangi jumlah karakter sekitar 30 atau lebih.
- Sementara
- Salinan konter
- Penghitung (dihitung 0)
- Karakter spasi (desimal 32)
- Karakter tanda bintang (desimal 42)
- Jumlah tanda bintang pada baris saat ini (penghitung 1 + 2 *)
- Sementara
- Karakter baris baru
- Sementara?
- Jumlah total garis (yaitu nilai input; disimpan hingga akhir, saat mencetak bagasi)
Versi kental:
,>++++++++[-<------>],[>++++++++[-<------>]<<[->++++++++++<]>>]<[->+>+>>>>>>>+<<<<<<<<<]>>>>++++++++[-<++++>]>++++++[-<+++++++>]+>>>++[-<+++++>]<<<<<<[-[>.<-]<[-<+>>+<]<[->+<]>>>>>[-<.>>+<]>[-<+>]>.<<++<<<-<->]>>>>>>>-[-<<<<<<.>>>>>>]<<<<<.
Dan versi cantiknya:
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.