Brainfuck、305
(STDINからの入力番号なし、下部の編集を参照)
-[->+>+<<]>>>++++[>++++++++<-]>[<+>-]+++++++[>+++++++++<-]>[<+>-]++++++[>++++++++
<-]>[<+>-]++<<<<>>>+.-<<<[>.>.<.>>>>>++++++++++<<[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<
]>>[-]>>>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]>>[>++++++[-<++++++++>]<.<<
+>+>[-]]<[<[->-<]++++++[->++++++++<]>.[-]]<<++++++[-<++++++++>]<.[-]<<[-<+>]<+<<<
<-]>>-----<<<[->>.>.<.>>.<<<<]
この素敵なアルゴリズムを使用して、プログラム全体の155バイトを占める数値を出力しました。
最大32768(アルゴリズムの16ビット制限)までの入力に対して機能します。後続のスペースは生成さ1
れず、入力に対しても機能します。
input output
0 [infinite loop (til underflow)]
1 "1"
2 "1 ? 2 : 0"
4 "1 ? 2 ? 3 ? 4 : 0 : 0 : 0"
etc.
クイックウォークスルー:
セットアップ(97バイト)
- Decrease input (position 0)
[->+>+<<] >>> Copy input twice to the right and
shift 3 positions to the right
++++[>++++++++<-]> [<+>-] Precalculate number 32 (=" ") at position 3
+++++++[>+++++++++<-]> [<+>-] Precalculate number 63 (="?") at position 4
++++++[>++++++++<-]> [<+>-] Precalculate number 48 (="0") at position 5
++<<<< Precalculate number 2 for later use. This number
will be printed in each iteration. (position 6)
最初の部分(181バイト)
>>>+.-<<< Go to the char "0" we saved, increase it, print it,
decrease it and go back (this prints "1" everytime)
[ While our second copy of the number isn't zero
>.>.<.>>> Move to " ", print, move to "?", print,
move to " " again, print, move to our
number at the end which is initially 2
[>>+>+<<<-]>>>[<<<+>>>-]<<+>[<->[>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]
++++++++[<++++++>-]>[<<+>>-]>[<<+>>-]<<]>]<[->>++++++++[<++++++>-]]<
[.[-]<]< Algorithm to print the number at current position
+<<<< Increase our number at the end and return to the beginning
-] Decrease the loop variable
2番目の部分(27バイト)
>>-----<<< Move to our "?" char and decrease it by 5 to get ":"
[- While our first copy of the number isn't zero decrease it
>>.>.<.>>.<<<< Print " ", print ":", print " ", print "0"
]
8つのBrainfuckコマンドを3ビットにマップできる場合、このプログラムが占有します。 114バイトと別の3ビットを占有します。
単項、最大4.08 * 10 ^ 275バイト
ここでは長すぎますが、ただ4084522578625602393299486062952863611126032086501306085250400447003793314577596676469855866584696018038896282464107885724924379287148671902707089354277989837147977861232927507437712250961455752103同じです。
編集:私は台無しに、このプログラムは実際にユーザー入力を取りません、それは単に入力として現在のポインター値を使用します。数値を解析できるようになるには、さらに多くのことが必要になりますが、それを行うことはできません。
そのため、プログラムに直接入力された値で(プログラムの前にn回 "+"を追加することで)動作しますが、STDINでは動作しません