Voting

Category

esoteric language

Bookmarking

Del.icio.us Digg Diigo DZone Earthlink Google Kick.ie
Windows Live LookLater Ma.gnolia Reddit Rojo StumbleUpon Technorati

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

VersionAuthorDateCommentsRate
bottle shapedMichal Wojciech Tarnowski11/13/100
Exact and complete lyricsRaphaël Bois03/07/084
original versionAndrew Paczkowski05/30/0529
lean and meanAki Rossi06/29/074

Comments

>>  Gachl said on 03/05/10 11:53:16

Gachl 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.

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!

Name:

eMail:

URL:

Security Code:
  
Comment: