99 Bottles - Common
Examples of the 99 bottles song in different programming languages.
NOTE These examples are taken from the 99 bottles website. This website has had some technical issues so
they are being reproduced here.
C#
/// A short and sweet C# 3.5 / LINQ implementation of 99 Bottles of Beer
/// Jeff Dietrich, jd@discordant.org - October 26, 2007
using System;
using System.Linq;
using System.Text;
namespace NinetyNineBottles
{
class Beer
{
static void Main(string[] args)
{
StringBuilder beerLyric = new StringBuilder();
string nl = System.Environment.NewLine;
var beers =
(from n in Enumerable.Range(0, 100)
select new {
Say = n == 0 ? "No more bottles" :
(n == 1 ? "1 bottle" : n.ToString() + " bottles"),
Next = n == 1 ? "no more bottles" :
(n == 0 ? "99 bottles" :
(n == 2 ? "1 bottle" : n.ToString() + " bottles")),
Action = n == 0 ? "Go to the store and buy some more" :
"Take one down and pass it around"
}).Reverse();
foreach (var beer in beers)
{
beerLyric.AppendFormat("{0} of beer on the wall, {1} of beer.{2}",
beer.Say, beer.Say.ToLower(), nl);
beerLyric.AppendFormat("{0}, {1} of beer on the wall.{2}",
beer.Action, beer.Next, nl);
beerLyric.AppendLine();
}
Console.WriteLine(beerLyric.ToString());
Console.ReadLine();
}
}
}
- Author
- Jeff Dietrich
- Date
- 2007-10-26
- URL
- 99 Bottles (Archive)
C
#include <stdio.h>
int main(void)
{
int b;
for (b = 99; b >= 0; b--) {
switch (b) {
case 0:
printf("No more bottles of beer on the wall, no more bottles of beer.\n");
printf("Go to the store and buy some more, 99 bottles of beer on the wall.\n");
break;
case 1:
printf("1 bottle of beer on the wall, 1 bottle of beer.\n");
printf("Take one down and pass it around, no more bottles of beer on the wall\n");
break;
default:
printf("%d bottles of beer on the wall, %d bottles of beer.\n", b, b);
printf("Take one down and pass it around, %d %s of beer on the wall.\n"
,b - 1
,((b - 1) > 1)? "bottles" : "bottle");
break;
}
}
return 0;
}
- Author
- Dustshine
- Date
- 2005-08-20
- URL
- 99 Bottles (Archive)
Python
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
"""
99 Bottles of Beer (by Gerold Penz)
Python can be simple, too :-)
"""
for quant in range(99, 0, -1):
if quant > 1:
print quant, "bottles of beer on the wall,", quant, "bottles of beer."
if quant > 2:
suffix = str(quant - 1) + " bottles of beer on the wall."
else:
suffix = "1 bottle of beer on the wall."
elif quant == 1:
print "1 bottle of beer on the wall, 1 bottle of beer."
suffix = "no more beer on the wall!"
print "Take one down, pass it around,", suffix
print "--"
- Author
- Gerold Penz
- Date
- 2005-07-23
- URL
- 99 Bottles (Archive)
Haskell
bottles 0 = "no more bottles"
bottles 1 = "1 bottle"
bottles n = show n ++ " bottles"
verse 0 = "No more bottles of beer on the wall, no more bottles of beer.\n"
++ "Go to the store and buy some more, 99 bottles of beer on the wall."
verse n = bottles n ++ " of beer on the wall, " ++ bottles n ++ " of beer.\n"
++ "Take one down and pass it around, " ++ bottles (n-1)
++ " of beer on the wall.\n"
main = mapM (putStrLn . verse) [99,98..0]
- Author
- lavor
- Date
- 2006-03-03
- URL
- 99 Bottles (Archive)
Lisp
;;; Lisp example of "99 Bottles of beer on the wall"
;;;
;;; NOTE: Although my mailer insists on inserting
;;; (at least) one, there is no line break in the
;;; string beginning "~~ (i.e. it should all be on one line).
;;;
;;; In particular, if it breaks so that the first line
;;; ends with "...~~R" and the second line starts "~0@..."
;;; they should be put back together with a space between
;;; them. That is, it should read "...~~R ~0@...".
;;; Or just see it here:
;;; http://www.sover.net/~nichael/lisp99.html
(labels ((foo (x)
(and (<= 0 x) (cons x (foo (1- x))))))
(format t (format nil
"~~{~~&~~@(~~%~~R ~A ~A!~~)~~:*~~&~~@(~~R
~0@*~A!~~)~~&~~@(~2@*~A!~~)~~&~~@(~~[~A~~:;~~:*~~R~~:*~~] ~0@*~A!~~)~~}"
"bottles of beer"
"on the wall"
"take one down, pass it around"
"no more"
)
(foo 99)))
- Author
- Anonymous
- Date
- 2005-04-20
- URL
- 99 Bottles (Archive)
Last updated 0001-01-01