読者です 読者をやめる 読者になる 読者になる

FLYING

〈全日本・紀文豆乳飲料シリーズ「麦芽コーヒー」の500ミリリットルパックを扱う小売店が少ないことに遺憾の意を表明する会〉活動記録

brainfuckでfizzbuzz

brainfuck

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++;
}