Brainfuck, 240 Zeichen
,
>++
+++++
+[-<---
--->],[>+
+++++++[-<-
----->]<<[->+
+++++++++<]>>]<
[->+>+>>>>>>>+<<<
<<<<<<]>>>>++++++++
[-<++++>]>++++++[-<++
+++++>]+>>>++[-<+++++>]
<<<<<<[-[>.<-]<[-<+>>+<]<
[->+<]>>>>>[-<.>>+<]>[-<+>]
>.<<++<<<-<->]>>>>>>>-[-<<<<<
<.>>>
>>>]<
<<<<.
Noch nicht fertig. Es funktioniert, aber nur mit einstelligen Zahlen.
EDIT: Fertig! Funktioniert für Dolmetscher, die 0 als EOF verwenden. Siehe NOTE
s in der kommentierten Quelle für diejenigen mit -1.
Erneut BEARBEITEN: Da es in Brainfuck keine Standardmethode zum Lesen von Befehlszeilenargumenten gibt, habe ich stattdessen stdin (Standardeingabe) verwendet. ASCII natürlich.
Ein drittes Mal BEARBEITEN: Oh je, es scheint, als hätte ich .
beim Verdichten des Codes Zeichen entfernt (ausgegeben). Fest...
Hier ist die grundlegende Speicherverwaltung der Hauptschleife. Ich bin sicher, es kann stark optimiert werden, um die Anzahl der Zeichen um 30 oder so zu reduzieren.
- Befristet
- Kopie des Zählers
- Zähler (zählt bis 0)
- Leerzeichen (Dezimalzahl 32)
- Sternchen (Dezimalzahl 42)
- Anzahl der Sternchen in der aktuellen Zeile (1 + 2 * Zähler)
- Befristet
- Neues Zeilenzeichen
- Befristet?
- Gesamtzahl der Zeilen (dh Eingabewert; wird beim Drucken des Trunks bis zum Ende gespeichert)
Kondensierte Version:
,>++++++++[-<------>],[>++++++++[-<------>]<<[->++++++++++<]>>]<[->+>+>>>>>>>+<<<<<<<<<]>>>>++++++++[-<++++>]>++++++[-<+++++++>]+>>>++[-<+++++>]<<<<<<[-[>.<-]<[-<+>>+<]<[->+<]>>>>>[-<.>>+<]>[-<+>]>.<<++<<<-<->]>>>>>>>-[-<<<<<<.>>>>>>]<<<<<.
Und die hübsche Version:
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.