FLYING

/* TODO: 気の利いた説明を書く */

brainfuckでfizzbuzz

d:id:tondol:20100630:1277839735とd:id:tondol:20100701:1277929933に引き続きbrainfuckネタです。四則演算と数値の出力を実装したので,それらを利用してfizzbuzzを書きました!!
他の高級言語で書く場合と同じように,ループ変数を1から100までインクリメントしつつ,3で割って5で割って,割り切れたらfizzだのbuzzだのを出力する,というアルゴリズムになっています。某所で見かけたfizzbuzz in brainfuckに比べてダントツに長いのはそのせいですたぶん。

brainfuck

# {0} add 100
>++++++++++<
>[-<++++++++++>]<
# incr {1}
>+<

##################################################
### loop begin
##################################################

# while {0} do
[

#   decr {0}
#   incr {2}
-
>>+<<

##################################################
### devide by 3
##################################################

#   {3:4} add !{1}
#   {1}   add !{4}
#   {4} add 3
>[->>+>+<<<]<
>>>>[-<<<+>>>]<<<<
>>>>+++<<<<

#   devide({3:4})
>>>
>>>+[<<<[->>>>+>+<<<<<]>>>>>[-<<<<<+>>>>>]<<<<[->>>>+>+<<<<<]>>>>>[-<<<<<+>>>>>]
<<[>[->+>+<<]>>[-<<+>>]<[[-]<->]<<-]+>[->+>+<<]>>[-<<+>>]<[[-]<<->>]<[[-]<<->>]<
[[-]<<+<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]<[-<<<<<<->>>>>>]<<]<]<<[-]<[->+<
]>>[-<<+>>]<<
<<<

#   clear {3}
#   incr {3}
#   if !{4} then
#     decr {3}
#   end
>>>[-]<<<
>>>+<<<
>>>>[[-]<->]<<<<

#   if !{3} then
>>>[[-]<<<
#     clear {2}
#     printf "fizz"
#     clear {2}
>>[-]<<
>>>++++++++++[-<++++++++++>]<++.<<
>>+++.<<
>>>++++[-<++++>]<+..<<
>>[-]<<
#   end
>>>]<<<

##################################################
### devide by 5
##################################################

#   {3:4} add !{1}
#   {1}   add !{4}
#   {4} add 5
>[->>+>+<<<]<
>>>>[-<<<+>>>]<<<<
>>>>+++++<<<<

#   devide({3:4})
>>>
>>>+[<<<[->>>>+>+<<<<<]>>>>>[-<<<<<+>>>>>]<<<<[->>>>+>+<<<<<]>>>>>[-<<<<<+>>>>>]
<<[>[->+>+<<]>>[-<<+>>]<[[-]<->]<<-]+>[->+>+<<]>>[-<<+>>]<[[-]<<->>]<[[-]<<->>]<
[[-]<<+<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]<[-<<<<<<->>>>>>]<<]<]<<[-]<[->+<
]>>[-<<+>>]<<
<<<

#   clear {3}
#   incr {3}
#   if !{4} then
#     decr {3}
#   end
>>>[-]<<<
>>>+<<<
>>>>[[-]<->]<<<<

#   if !{3} then
>>>[[-]<<<
#     clear {2}
#     print "buzz"
#     clear {2}
>>[-]<<
>>>++++++++++[-<++++++++++>]<--.<<
>>>++++[-<++++>]<+++.<<
>>+++++..<<
>>[-]<<
#   end
>>>]<<<

##################################################
### dump
##################################################

#   if !{2} then
>>[[-]<<

#     {3:4} add !{1}
#     {1}   add !{4}
>[->>+>+<<<]<
>>>>[-<<<+>>>]<<<<

#     print {3}
>>>
[->+<]>[>++++++++++>>+[<<<[->>>>+>+<<<<<]>>>>>[-<<<<<+>>>>>]<<<<[->>>>+>+<<<<<]>
>>>>[-<<<<<+>>>>>]<<[>[->+>+<<]>>[-<<+>>]<[[-]<->]<<-]+>[->+>+<<]>>[-<<+>>]<[[-]
<<->>]<[[-]<<->>]<[[-]<<+<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]<[-<<<<<<->>>>>
>]<<]<]<<[-]<[->+<]>>[-<<+>>]<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>]<+<<[->>>+<<<]>[-<+
>]>>]<[-]<<<[>++++++++++++++++++++++++++++++++++++++++++++++++.[-]<[-]<<<]>+++++
+++++++++++++++++++++++++++++++++++++++++++.[-]<
<<<

#   end
>>]<<

##################################################
### loop end
##################################################

#   print "\n"
#   clear {2}
#   incr {1}
>>++++++++++.<<
>>[-]<<
>+<

# end
]

C言語

flag = 100;
index = 1;
while (flag) {
	flag--;
	dump = 1;
	a = index;
	b = 3;
	divide(&a, &b);
	c = !b;
	if (c) {
		printf("fizz");
		dump = 0;
	}
	a = index;
	b = 5;
	divide(&a, &b);
	c = !b;
	if (c) {
		printf("buzz");
		dump = 0;
	}
	if (dump) {
		printf("%d", index);
	}
	printf("\n");
	index++;
}