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