Language Brainfuck
(slightly improved version)
Date: | 07/01/05 |
Author: | Mark Hurd |
URL: | http://www.ozemail.com.au/~markhurd/ |
Comments: | 1 |
Info: | n/a |
Score: | (2.45 in 53 votes) |
########################## ### ### Severely updated version! ### (now says "1 bottle" and ### contains no extra "0" verse) ### with further edits to not rely on typeover ### ########################## ### 99 Bottles of Beer ### ### coded in Brainfuck ### ### with explanations ### ########################## # # This Bottles of Beer program # was written by Andrew Paczkowski # Coder Alias: thepacz # three_halves_plus_one@yahoo.com # Edited by Mark Hurd # markehurd@gmail.com ##### > 0 in the zeroth cell +++++++>++++++++++[<+++++>-] 57 in the first cell or "9" +++++++>++++++++++[<+++++>-] 57 in second cell or "9" ++++++++++ 10 in third cell >+++++++++ 9 in fourth cell ########################################## ### create ASCII chars in higher cells ### ########################################## >>++++++++[<++++>-] " " >++++++++++++++[<+++++++>-] b +>+++++++++++[<++++++++++>-] o ++>+++++++++++++++++++[<++++++>-] t ++>+++++++++++++++++++[<++++++>-] t >++++++++++++[<+++++++++>-] l +>++++++++++[<++++++++++>-] e +>+++++++++++++++++++[<++++++>-] s >++++++++[<++++>-] " " +>+++++++++++[<++++++++++>-] o ++>++++++++++[<++++++++++>-] f >++++++++[<++++>-] " " >++++++++++++++[<+++++++>-] b +>++++++++++[<++++++++++>-] e +>++++++++++[<++++++++++>-] e >+++++++++++++++++++[<++++++>-] r >++++++++[<++++>-] " " +>+++++++++++[<++++++++++>-] o >+++++++++++[<++++++++++>-] n >++++++++[<++++>-] " " ++>+++++++++++++++++++[<++++++>-] t ++++>++++++++++[<++++++++++>-] h +>++++++++++[<++++++++++>-] e >++++++++[<++++>-] " " ++>+++++++++++++[<+++++++++>-] w +>++++++++++++[<++++++++>-] a >++++++++++++[<+++++++++>-] l >++++++++++++[<+++++++++>-] l >+++++[<++>-] LF +++++++++++++> CR ++>+++++++++++++++++++[<++++++>-] t +>++++++++++++[<++++++++>-] a +++>+++++++++++++[<++++++++>-] k +>++++++++++[<++++++++++>-] e >++++++++[<++++>-] " " +>+++++++++++[<++++++++++>-] o >+++++++++++[<++++++++++>-] n +>++++++++++[<++++++++++>-] e >++++++++[<++++>-] " " >++++++++++[<++++++++++>-] d +>+++++++++++[<++++++++++>-] o ++>+++++++++++++[<+++++++++>-] w >+++++++++++[<++++++++++>-] n >++++++++[<++++>-] " " +>++++++++++++[<++++++++>-] a >+++++++++++[<++++++++++>-] n >++++++++++[<++++++++++>-] d >++++++++[<++++>-] " " ++>+++++++++++[<++++++++++>-] p +>++++++++++++[<++++++++>-] a +>+++++++++++++++++++[<++++++>-] s +>+++++++++++++++++++[<++++++>-] s >++++++++[<++++>-] " " +>+++++++++++++[<++++++++>-] i ++>+++++++++++++++++++[<++++++>-] t >++++++++[<++++>-] " " +>++++++++++++[<++++++++>-] a >+++++++++++++++++++[<++++++>-] r +>+++++++++++[<++++++++++>-] o >+++++++++++++[<+++++++++>-] u >+++++++++++[<++++++++++>-] n >++++++++++[<++++++++++>-] d >+++++[<++>-] LF +++++++++++++ CR [<]>>>> go back to fourth cell ################################# ### initiate the display loop ### ################################# [ loop <- back to cell 3 [+ loop [>]<< go to last cell and back to LF .>.<.>. output 2 newlines [<]> go to first cell ################################### #### begin display of characters### ################################### # .>.>>>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.> #X X b o t t l e s o f b e e r .>.>.>.>.>.>.>.>.>.>.>.>. #o n t h e w a l l N L [<]> go to first cell .>.>>>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>>>>>>>>>>>>>.>.> #X X b o t t l e s o f b e e r N L .>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.> #t a k e o n e d o w n a n d p a s s .>.>.>.>.>.>.>.>.>.>. #i t a r o u n d N L ##### [<]>> go to cell 2 - subtract 1 from cell 2 < go to cell 1 ######################## ### display last line ## ######################## # .>.>>>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.> #X X b o t t l e s o f b e e r .>.>.>.>.>.>.>.>.>.>. #o n t h e w a l l ##### [<]>>>-- go to cell 3/subtract 1 ]+ end loop when cell 3 is 0 [>]<< go to last cell and back to LF .>.<.>. output 2 newlines [<]> go to first cell ################################### #### begin display of characters### ################################### # .>.>>>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.> #X X b o t t l e s o f b e e r .>.>.>.>.>.>.>.>.>.>.>.>. #o n t h e w a l l N L [<]> go to first cell .>.>>>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>>>>>>>>>>>>>.>.> #X X b o t t l e s o f b e e r N L .>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.> #t a k e o n e d o w n a n d p a s s .>.>.>.>.>.>.>.>.>.>. #i t a r o u n d N L ##### [<]>- cell 1 subtract 1 >+++++++++ add 9 to cell 2 >+++++++++ cell 3 add 9 << go to first line ######################## ### correct last line ## ######################## # .>.>>>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.> #X 9 b o t t l e s o f b e e r .>.>.>.>.>.>.>.>.>.>. #o n t h e w a l l ##### [<]>>>>- go to cell 4/subtract 1 ] end loop when cell 4 is 0 ############################################################## ### By this point verses 99\10 are displayed but to work ### ### with the lower numbered verses in a more readable way ### ### we initiate a new loop for verses 9{CODE} that will not ### ### use the fourth cell at all ### ############################################################## + add 1 to cell four (to keep it non\zero) <--- back to cell 3/subtract 2 [+ loop [>]<< go to last cell and back to LF .>.<.>. output 2 newlines [<]> go to first cell ################################### #### begin display of characters### ################################### # >.>>>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.> # X b o t t l e s o f b e e r .>.>.>.>.>.>.>.>.>.>.>.>. #o n t h e w a l l N L [<]> go to first cell >.>>>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>>>>>>>>>>>>>.>.> # X b o t t l e s o f b e e r N L .>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.> #t a k e o n e d o w n a n d p a s s .>.>.>.>.>.>.>.>.>.>. #i t a r o u n d N L ##### [<]>> go to cell 2 - subtract 1 from cell 2 ######################## ### display last line ## ######################## # .>>>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.> #X b o t t l e s o f b e e r .>.>.>.>.>.>.>.>.>.>. #o n t h e w a l l ##### [<]>>>-- go to cell 3/subtract 1 ]+ end loop when cell 3 is 0 [>]<< go to last cell and back to LF .>.<.>. output 2 newlines [<]> go to first cell ################################### #### begin display of characters### ################################### # >.>>>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.> # 2 b o t t l e s o f b e e r .>.>.>.>.>.>.>.>.>.>.>.>. #o n t h e w a l l N L [<]> go to first cell >.>>>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>>>>>>>>>>>>>.>.> # 2 b o t t l e s o f b e e r N L .>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.> #t a k e o n e d o w n a n d p a s s .>.>.>.>.>.>.>.>.>.>. #i t a r o u n d N L ##### [<]>> go to cell 2 - subtract 1 from cell 2 #+ add 1 to cell 3 to keep it non\zero #[>]<<.>. go to last line/carriage return <#[<]> go to first line ######################## ### correct last line ## ######################## # >.>>>.>.>.>.>.>.>.>>.>.>.>.>.>.>.>.>.> # 1 b o t t l e o f b e e r .>.>.>.>.>.>.>.>.>.>.<<<<. #o n t h e w a l l ##### [>]<< go to last cell and back to LF .>.<.>. output 2 newlines [<]> go to first line ######################### ### the final verse ## ######################### # >.>>>.>.>.>.>.>.>.>>.>.>.>.>.>.>.>.>.> # 1 b o t t l e o f b e e r .>.>.>.>.>.>.>.>.>.>.>.>. #o n t h e w a l l N L [<]> go to first cell >.>>>.>.>.>.>.>.>.>>.>.>.>.>.>.>.>.>>>>>>>>>>>>>.>.> # 1 b o t t l e o f b e e r N L .>.>.>.>.> > > > > > > > > > > > > > > > > > > #t a k e (o n e d o w n a n d p a s s ) .>.<< < < < < < < < < < < < < < < #i t .>.>.>.>.>.>.>.>.>.>.>.>.>.>.> # d o w n a n d p a s s .>.>.>.>.>.>.>.>.>.>. #i t a r o u n d N L [>]< go to last line <<<.<<. # n o [<]>>>> go to fourth cell >.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.> # b o t t l e s o f b e e r .>.>.>.>.>.>.>.>.>.>.>.>. #o n t h e w a l l N L #####fin##
Download Source | Write Comment
Alternative Versions
Version | Author | Date | Comments | Rate |
---|---|---|---|---|
bottle shaped | Michal Wojciech Tarnowski | 11/13/10 | 0 | |
Exact and complete lyrics | Raphaël Bois | 03/07/08 | 4 | |
original version | Andrew Paczkowski | 05/30/05 | 29 | |
lean and mean | Aki Rossi | 06/29/07 | 4 |
Download Source | Write Comment
Add Comment
Please provide a value for the fields Name,
Comment and Security Code.
This is a gravatar-friendly website.
E-mail addresses will never be shown.
Enter your e-mail address to use your gravatar.
Please don't post large portions of code here! Use the form to submit new examples or updates instead!
Comments
Gachl said on 03/05/10 11:53:16
I'd like to file a bug
This version prints out (at the end)
2 bottles of beer on the wall
2 bottles of beer
take one down and pass it around
2 bottle of beer on the wall
2 bottle of beer on the wall
2 bottle of beer
take it down and pass it around
no bottles of beer on the wall
which doesn't seem to be correct.