Take the 2-minute tour ×
Programming Puzzles & Code Golf Stack Exchange is a question and answer site for programming puzzle enthusiasts and code golfers. It's 100% free, no registration required.

The goal is to write a simple "99 Bottles of Beer" program .. that is valid in at least 2 distinct languages (e.g. not Python 2 and Python 3). It must be a complete file that will run or compile.

Interesting answers should be up-voted, but compactness also counts. (Of course, language diversity is the main goal.)

EDIT: I would say that to have normal C code that does the same thing with C++ and Objective-C counts as derivative. The code should do clever stuff so that lines have different meanings with different languages.

share|improve this question
7  
Damn, time to brush up on my Whitespace! –  ClickRick Jun 11 at 18:41
19  
99 logical bugs in the code / 99 logical bugs / Take one down, patch it around / 117 logical bugs in the code... –  keshlam Jun 12 at 5:14
4  
99 threading bugs in the code / 98 threading bugs / 97 threading bugs in the code / take one down, patch it around –  Timwi Jun 13 at 11:17
2  
This gives a brand new meaning to "Write once, compile/run anywhere" –  Simon André Forsberg Jun 13 at 13:59
2  
Funny, when I first read the title, I thought the code had to produce the rhyme in global languages (e.g,. English and French). –  brechmos Jun 14 at 18:09

16 Answers 16

up vote 46 down vote accepted
+50

C, Perl, PHP, Python, Ruby

Update: I've put together a jsfiddle that helps visualize the path through the code for each of the five languages: http://jsfiddle.net/wK6bD/4/embedded/result/

An alternative version, that removes all comments, and compresses all insignificant strings, regex and replacement patterns: http://jsfiddle.net/wK6bD/5/embedded/result/

And I saved a byte while I was at it. Turns out C had an unnecessary semi-colon ;)

#/*<?php ob_clean();"
s='''*/include<stdio.h>
main($y){char*$s,$t[3],$u[3]/*';'''
def printf(a,*b):import sys;sys.stdout.write(a%b)
for y in range(99,-1,-1):
  '''
99.downto(0){|y|$y=y;"/*=;#*/;
for($y=100;$y--;){
  #/*"
  $u=(($t=$y)+99)%100;'*/
  sprintf($t,"%d",$y);sprintf($u,"%d",($y+99)%100);
  #//';#'''
  printf("%s bottle%s of beer on the wall, %s bottle%s of beer.\n%s",
    #/* -- THIS LINE ENDS WITH CR --
    y//1or'No more','s'[:y!=1],y or'no more','''s*/
    +$y>0?$t:"No more",$s=$y!=1?"s":"",$y>0?$t:"no more",$s,$y>0?
    #//'''[:y!=1],y and'''
    "Take one down and pass it around":
    #//'''[6:38]or
    "Go to the store and buy some more");
  printf(", %s bottle%s of beer on the wall.\n\n",
    #/* -- THIS LINE ENDS WITH CR --
    y//1-1and~-y%100or'no more','''s*/
    +$y!=1?$u:"no more",$y!=2?"s":"");}
    #/*?><?php "
    %w;q(*/
    }//";#'''[:y!=2])

Please Note: This file needs to be saved with mixed line endings. All lines should be terminated with LF (char 10, a.k.a. unix-style), except for the two lines marked -- THIS LINE ENDS WITH CR --, which should be terminated with CR (char 13, a.k.a. mac-style). I recommend using notepad++, or other text editor which allows you to manually edit line endings.

For PHP, it is assumed that output_buffering is enabled. According to the documentation, this is hardcoded to be Off when using the CLI, regardless of ini settings, so it needs to be explicitly (re)enabled:

$ php -d output_buffering=4096 bottles.pl.php.py.rb.c

This enables a 4kb buffer, which is the 'recommended' value. If you're using one of the supplied inis this will already be set, so it should run as-is from any web server.

The total file size is 823 bytes (not counting the comments about the line endings), an average of 164.6 bytes per language.

Versions Tested
C - gcc 4.8.1, cl 15.00
Perl - 5.16.2
PHP - 5.4.16
Python - 2.7.6, 3.3.4
Ruby - 1.8.7, 1.9.3

Output is identical for all five languages (see below).


Perl, PHP

99<?php $m=m?+m+2:+m;
for($i='no more';100>($a="$i bottle".(2^($i+=1)?'s':'').' of beer');$o="
Take one down and pass it around, $b.

".ucfirst($f="$b, $a.$o")){$b="$a on the wall";}print substr("$f
Go to the store and buy some more, $b.",$m);

I like this one because of how short it is, so I'm leaving it. It also demonstrates how much of a Perl-wanna-be PHP is ;)

Sample Usage:

$ perl bottles
99 bottles of beer on the wall, 99 bottles of beer.
Take one down and pass it around, 98 bottles of beer on the wall.

98 bottles of beer on the wall, 98 bottles of beer.
Take one down and pass it around, 97 bottles of beer on the wall.

...

2 bottles of beer on the wall, 2 bottles of beer.
Take one down and pass it around, 1 bottle of beer on the wall.

1 bottle of beer on the wall, 1 bottle of beer.
Take one down and pass it around, no more bottles of beer on the wall.

No more bottles of beer on the wall, no more bottles of beer.
Go to the store and buy some more, 99 bottles of beer on the wall.
share|improve this answer
1  
My new favourite. If I wasn't so selfish, I would give you a bounty. I would change Python to Python 2, though. –  MadTux Jun 12 at 18:41
12  
Mixed line endings? You are an evil, twisted, sadistic person. +1 –  KRyan Jun 13 at 5:23
2  
@primo Yeah! I totally think that your answer deserves the bounty. It's very complex and clever. The Perl/PHP thing is awesome, but I think PHP wants to be Perl and not the opposite :) –  core1024 Jun 14 at 16:44
3  
I'm not experienced enough for code golf, but I created an account to say as an interface designer, I like the visual implementation of the first JS Fiddle. Who knew you code geeks could make things both work and look pretty. +1 –  user25149 Jun 15 at 7:36
2  
Since the js code doesn't really matter, linking to jsfiddle.net/wK6bD/1/embedded/result gives a better user experience –  slebetman Jun 16 at 5:50

C + Ruby

#define do {
#define then {
#define end }
#define def int
#define nil {
#define print(a,b) printf("%d%s", a, b)

def bottle(i)
    nil

    print(i, (i==1)?" bottle":" bottles");
end

i=0;

def main()
    nil

    i = 99;
    while(i>=1) do
        bottle(i);
        puts(" of beer on the wall, ");
        bottle(i);
        puts(" of beer.\nTake one down and pass it around,");
        if(i==1) then
            break;
        end
        bottle(i-1);
        puts(" of beer on the wall.");
        puts("");
        i-=1;
    end
    puts("no more bottles of beer on the wall.");
    puts("");
    puts("No more bottles of beer on the wall,");
    puts("no more bottles of beer.");
    puts("Go to the store and buy some more,");
    puts("99 bottles of beer on the wall.");

end

#if 0
main
#endif

They're actually pretty similar once you normalize the syntax! :P

share|improve this answer
7  
This is brilliant. –  Anubian Noob Jun 12 at 2:37
2  
This is also valid C++ I think. –  Vortico Jun 14 at 7:05
1  
This makes me wonder how many languages could be implemented entirely with C compiler directives. –  primo Jun 14 at 13:21
    
@Vortico: sadly, no. The C code here declares variables and arguments without naming their types, which is (barely) legal in C, but illegal in C++. –  nneonneo Jun 14 at 15:40

JavaScript (SpiderMonkey/NodeJS), Perl, PHP, Ruby

EDIT: Added and Ruby

EDIT 2:

  • Prints a title;
  • Consistent output in all languages;
  • No warnings.

The Code:

//#<?php
;
$i = 99;
$php = ![];
$o = 'of beer';
$ruby = 0x0 != '';
$t = $php ? '' : '//#';
$js = !$ruby && 1 + '0' == '10';
$s = 'Go to the store and buy some more, 99 bottles of beer on the wall.';
$c = 'print($t ." 99 BOTTLES OF BEER #\\\\\\\\\\n"); while($i>=0) {  $j = $i; $k = ($i-1); $b = $i!=1 ? " bottles " : " bottle "; print("\\n" .($i > 0 ? $j : "No more") .$b .$o ." on the wall, " .($i > 0 ? $j : "no more") .$b .$o .".\\n" .($i > 0 ? "Take one down and pass it around, " .($i > 1 ? $k : "no more") ." bottle" .($i != 2 ? "s " : " ") .$o ." on the wall." : $s) ."\\n"); $i-=1; }';
$c = $js ? $c.replace('."\\n"','').replace(RegExp(' [.]','g'),'+').replace(RegExp('print','g'), typeof(console) != 'undefined' ? 'console.log' : 'print') : $c;
$c = $ruby ? $c.gsub('{',"do\n").gsub('}',"\nend").gsub(' .',' << ').gsub('$i;','$i.to_s;').gsub('1)','1).to_s') : $c;
eval($c);

The output:

D:\>node polyglot
//# 99 BOTTLES OF BEER #\\

99 bottles of beer on the wall, 99 bottles of beer.
Take one down and pass it around, 98 bottles of beer on the wall.

98 bottles of beer on the wall, 98 bottles of beer.
Take one down and pass it around, 97 bottles of beer on the wall.
* * *
2 bottles of beer on the wall, 2 bottles of beer.
Take one down and pass it around, 1 bottle of beer on the wall.

1 bottle of beer on the wall, 1 bottle of beer.
Take one down and pass it around, no more bottles of beer on the wall.

No more bottles of beer on the wall, no more bottles of beer.
Go to the store and buy some more, 99 bottles of beer on the wall.
share|improve this answer
2  
My favourite up till now :) It looks really clever, although I don't speak any of the languages. –  MadTux Jun 11 at 7:24
    
Why does spidermoneky accept that as JS :O –  David Mulder Jun 11 at 22:55
4  
@DavidMulder Because the line just above the for loop turns it into valid JS! All .'s become +'s. Oh my. –  Jonathan Hobbs Jun 12 at 4:41
1  
If you use a HQ9+ specification that only includes capitals (so the <?php doesn't output Hello World), you could add another language by only using the 9 once –  professorfish Jun 13 at 18:36
    
@professorfish Easy enough: $i = 9*11; –  primo Jun 14 at 16:20

C++ and PHP

I thought I'd give it a go.

EDIT: Compacted it a bit.

//99 BOTTLES OF BEER\\<br/><br/><?PHP function cat($a,$b){return $a.$b; }/*
#include<iostream>
#include<string>
#define echo(a) std::cout << a
#define cat(a,b) a<<b
int $bottles;
std::string $endline = "\n";
std::string $bottlesname;
int isset(std::string){ echo("//99 BOTTLES OF BEER\\\\\n\n"); return true; }
int main()
/**/
{
if(!isset($endline))
    $endline = "<br/>";
$bottles = 99;
$bottlesname = " bottles";
while( $bottles > 0 ){
    echo(cat(cat($bottles, $bottlesname ), " of beer on the wall, "));
    echo(cat(cat(cat(cat($bottles, $bottlesname ), " of beer."), $endline), "Take one down and pass it around, "));

    $bottlesname = --$bottles==1?" bottle":" bottles";
    if( $bottles == 0 )
        echo("no more");
    else
        echo($bottles);
    echo(cat(cat(cat($bottlesname," of beer on the wall."),$endline),$endline));
}
echo(cat("No more bottles of beer on the wall, no more bottles of beer.",$endline));
echo(cat(cat("Go to the store and buy some more, 99 bottles of beer on the wall.",$endline),$endline));;
}

This will compile fine as C++ and it will spit out some nice HTML if run through PHP. Either way, the output is:

//99 BOTTLES OF BEER\\

99 bottles of beer on the wall, 99 bottles of beer.
Take one down, pass it around, 98 bottles of beer on the wall.

98 bottles of beer on the wall, 98 bottles of beer.
Take one down, pass it around, 97 bottles of beer on the wall.

...

3 bottles of beer on the wall, 3 bottles of beer.
Take one down, pass it around, 2 bottles of beer on the wall.

2 bottles of beer on the wall, 2 bottles of beer.
Take one down, pass it around, 1 bottle of beer on the wall.

1 bottle of beer on the wall, 1 bottle of beer.
Take one down and pass it around, no more bottles of beer on the wall.

No more bottles of beer on the wall, no more bottles of beer.
Go to the store and buy some more, 99 bottles of beer on the wall.
share|improve this answer

Haskell, PHP

Combining a functional and an imperative language!

{-0;}
function cast($x){ return $x; }
function bottle($n){
/*-}
import Prelude hiding ((.)){-*///-};(*/) = ($){-
/*-}
(.) = (++)
cast f = show $ f id
f :: Int -> [String]
f n = id */ return (cast($n) . " bottles of beer on the wall, " . cast($n) . "  bottles of beer.\nTake one down and pass it around, " . cast($n-1) . " bottles of beer on the wall.\n\n");
{-0;}};echo"<pre>";for($x=99;$x>1;$x-=1)echo bottle($x);echo/*-}
main = (\x->putStr$(concat$[99,98..2]>>=f)++x)*/"1 bottle of beer on the wall, 1 bottle of beer.\nTake one down and pass it around, no more bottles of beer on the wall.\n\nNo more bottles of beer on the wall, no more bottles of beer.\nGo to the store and buy some more, 99 bottles of beer on the wall.\n\n";

In Haskell, I defined the function */ that made working with PHP comments a lot easier!

share|improve this answer

Brainfuck, English

Source for BF: http://www.99-bottles-of-beer.net/language-brainfuck-1718.html

++>+>++>>+>>>++++++++++[->+>+>++++++++++<<<]>>>>++++++++++[->+++++>++++++++++>++
+++++++++>++++++++>++++++++>+++>++++>+<<<<<<<<]+>--+>+++>++++++>--+>+++++>+++>++
+++>+>+>+>+>++>+>+>++[-<]<<<<<<<[->>[>>>>>>>>[<<<<<<<[->[-]>>>>>>>>>>>.<----.>>>
.<<<--.++.+++.+<-.+<<+<<<<<<<<]+>[-<[-]>>>>>[>>>+<<<<+<+<+>>>-]<<<[->>>+<<<]>[>>
>>>>+<<<<<<-]>>>>>[[-]>.<]<<<<[>>>>>-<<<<<-]>>[<<+<+<+>>>>-]<<<<[->>>>+<<<<]>[>>
>>>>+<<<<<<-]>>>>>>.<<<<<[>>>>>-<<<<<-]>>>[-<<<+<+>>>>]<<<<[->>>>+<<<<]>-[[-]>>>
>+<<<<]<<<]+>>>>>>>>>>>>>.<<<<----.>----.+++++..-<++++++++++.-------.<<[[-]>>>.<
<<]>>>>>>.<<<----.<+.>>>>.<<<<----.+++..+>+++.+[>]+>+>[->+<<-<-<<<.<<<----.-.>>>
.<<<++++++.<++.---.>>>>.<<<+++.<----.+++++++++++..------>---->------------------
-------------->>>++.-->..>>>]>>>[->[-]<<<<<<<[<]<[-]>>[>]>>>>>]+>[-<[-]<<<<[->>[
->+<<<<-<<<.<<<----.-.>>>.<<<++++++.<++.---.>>>>.<<<+++.<----.+++++++++++..-----
->---->++++++++++++++++++++++++++++++++>>>.<.>>>>>>]<<]<[->>>>[-<<+<<<<++.-->.[<
]<<<<<<<<[->[-]<]+>[-<[-]>>>>>>>>>>>>>.<<<-----.++++++++++.------.>>>>.<<<----.-
.<.>>>>.<<<<-.>+.++++++++.---------.>>>.<<<<---.>.<+++.>>>>.<<<++.<---.>+++..>>>
.<<<<++++++++.>+.>>>.<<<<--------.>--.---.++++++.-------.<+++.++>+++++>>>>.<.[<]
<<<<<<<]+>>>>>>-<<<+>>[<<[-]<+<+>>>>-]<<<<[>-<[-]]>[->>>+<<<]>[->->+++++++++<<]>
>>>>[>]>>>>]<<<<]>>>>>>]+<<<<<<<[<]<]+<+<<<<<<+<-]>>>>>>>>>>[>]>>>>>[->[-]<]+>[-
<[-]<<<<<<<<<-------------.<<----.>>>.<<<+++++.-----.>>>.<<<+++++.<++.---.>>>>.<
<<-.+.-----.+++.<.>>>>.<<<<----.>----.<+++.>>>>.<<<<--.>+++++++.++++.>>>.<<<----
--.----.--.<+++.>>>>.<<<.++.+++.+<.+>>>>>.<.>>>>>>>>>]+<[-]+<[-]<[-]<[-]+<<<[<]<
[-]<[-]<[-]<[-]++++++++++[->+>+>++++++++++<<<]>->->-<<<<<<[-]+<[-]<+<<]

99 bottles of beer on the wall, 99 bottles of beer.
Take one down and pass it around, 98 bottles of beer on the wall.

98 bottles of beer on the wall, 98 bottles of beer.
Take one down and pass it around, 97 bottles of beer on the wall.

97 bottles of beer on the wall, 97 bottles of beer.
Take one down and pass it around, 96 bottles of beer on the wall.

96 bottles of beer on the wall, 96 bottles of beer.
Take one down and pass it around, 95 bottles of beer on the wall.

95 bottles of beer on the wall, 95 bottles of beer.
Take one down and pass it around, 94 bottles of beer on the wall.

94 bottles of beer on the wall, 94 bottles of beer.
Take one down and pass it around, 93 bottles of beer on the wall.

93 bottles of beer on the wall, 93 bottles of beer.
Take one down and pass it around, 92 bottles of beer on the wall.

92 bottles of beer on the wall, 92 bottles of beer.
Take one down and pass it around, 91 bottles of beer on the wall.

91 bottles of beer on the wall, 91 bottles of beer.
Take one down and pass it around, 90 bottles of beer on the wall.

90 bottles of beer on the wall, 90 bottles of beer.
Take one down and pass it around, 89 bottles of beer on the wall.

89 bottles of beer on the wall, 89 bottles of beer.
Take one down and pass it around, 88 bottles of beer on the wall.

88 bottles of beer on the wall, 88 bottles of beer.
Take one down and pass it around, 87 bottles of beer on the wall.

87 bottles of beer on the wall, 87 bottles of beer.
Take one down and pass it around, 86 bottles of beer on the wall.

86 bottles of beer on the wall, 86 bottles of beer.
Take one down and pass it around, 85 bottles of beer on the wall.

85 bottles of beer on the wall, 85 bottles of beer.
Take one down and pass it around, 84 bottles of beer on the wall.

84 bottles of beer on the wall, 84 bottles of beer.
Take one down and pass it around, 83 bottles of beer on the wall.

83 bottles of beer on the wall, 83 bottles of beer.
Take one down and pass it around, 82 bottles of beer on the wall.

82 bottles of beer on the wall, 82 bottles of beer.
Take one down and pass it around, 81 bottles of beer on the wall.

81 bottles of beer on the wall, 81 bottles of beer.
Take one down and pass it around, 80 bottles of beer on the wall.

80 bottles of beer on the wall, 80 bottles of beer.
Take one down and pass it around, 79 bottles of beer on the wall.

79 bottles of beer on the wall, 79 bottles of beer.
Take one down and pass it around, 78 bottles of beer on the wall.

78 bottles of beer on the wall, 78 bottles of beer.
Take one down and pass it around, 77 bottles of beer on the wall.

77 bottles of beer on the wall, 77 bottles of beer.
Take one down and pass it around, 76 bottles of beer on the wall.

76 bottles of beer on the wall, 76 bottles of beer.
Take one down and pass it around, 75 bottles of beer on the wall.

75 bottles of beer on the wall, 75 bottles of beer.
Take one down and pass it around, 74 bottles of beer on the wall.

74 bottles of beer on the wall, 74 bottles of beer.
Take one down and pass it around, 73 bottles of beer on the wall.

73 bottles of beer on the wall, 73 bottles of beer.
Take one down and pass it around, 72 bottles of beer on the wall.

72 bottles of beer on the wall, 72 bottles of beer.
Take one down and pass it around, 71 bottles of beer on the wall.

71 bottles of beer on the wall, 71 bottles of beer.
Take one down and pass it around, 70 bottles of beer on the wall.

70 bottles of beer on the wall, 70 bottles of beer.
Take one down and pass it around, 69 bottles of beer on the wall.

69 bottles of beer on the wall, 69 bottles of beer.
Take one down and pass it around, 68 bottles of beer on the wall.

68 bottles of beer on the wall, 68 bottles of beer.
Take one down and pass it around, 67 bottles of beer on the wall.

67 bottles of beer on the wall, 67 bottles of beer.
Take one down and pass it around, 66 bottles of beer on the wall.

66 bottles of beer on the wall, 66 bottles of beer.
Take one down and pass it around, 65 bottles of beer on the wall.

65 bottles of beer on the wall, 65 bottles of beer.
Take one down and pass it around, 64 bottles of beer on the wall.

64 bottles of beer on the wall, 64 bottles of beer.
Take one down and pass it around, 63 bottles of beer on the wall.

63 bottles of beer on the wall, 63 bottles of beer.
Take one down and pass it around, 62 bottles of beer on the wall.

62 bottles of beer on the wall, 62 bottles of beer.
Take one down and pass it around, 61 bottles of beer on the wall.

61 bottles of beer on the wall, 61 bottles of beer.
Take one down and pass it around, 60 bottles of beer on the wall.

60 bottles of beer on the wall, 60 bottles of beer.
Take one down and pass it around, 59 bottles of beer on the wall.

59 bottles of beer on the wall, 59 bottles of beer.
Take one down and pass it around, 58 bottles of beer on the wall.

58 bottles of beer on the wall, 58 bottles of beer.
Take one down and pass it around, 57 bottles of beer on the wall.

57 bottles of beer on the wall, 57 bottles of beer.
Take one down and pass it around, 56 bottles of beer on the wall.

56 bottles of beer on the wall, 56 bottles of beer.
Take one down and pass it around, 55 bottles of beer on the wall.

55 bottles of beer on the wall, 55 bottles of beer.
Take one down and pass it around, 54 bottles of beer on the wall.

54 bottles of beer on the wall, 54 bottles of beer.
Take one down and pass it around, 53 bottles of beer on the wall.

53 bottles of beer on the wall, 53 bottles of beer.
Take one down and pass it around, 52 bottles of beer on the wall.

52 bottles of beer on the wall, 52 bottles of beer.
Take one down and pass it around, 51 bottles of beer on the wall.

51 bottles of beer on the wall, 51 bottles of beer.
Take one down and pass it around, 50 bottles of beer on the wall.

50 bottles of beer on the wall, 50 bottles of beer.
Take one down and pass it around, 49 bottles of beer on the wall.

49 bottles of beer on the wall, 49 bottles of beer.
Take one down and pass it around, 48 bottles of beer on the wall.

48 bottles of beer on the wall, 48 bottles of beer.
Take one down and pass it around, 47 bottles of beer on the wall.

47 bottles of beer on the wall, 47 bottles of beer.
Take one down and pass it around, 46 bottles of beer on the wall.

46 bottles of beer on the wall, 46 bottles of beer.
Take one down and pass it around, 45 bottles of beer on the wall.

45 bottles of beer on the wall, 45 bottles of beer.
Take one down and pass it around, 44 bottles of beer on the wall.

44 bottles of beer on the wall, 44 bottles of beer.
Take one down and pass it around, 43 bottles of beer on the wall.

43 bottles of beer on the wall, 43 bottles of beer.
Take one down and pass it around, 42 bottles of beer on the wall.

42 bottles of beer on the wall, 42 bottles of beer.
Take one down and pass it around, 41 bottles of beer on the wall.

41 bottles of beer on the wall, 41 bottles of beer.
Take one down and pass it around, 40 bottles of beer on the wall.

40 bottles of beer on the wall, 40 bottles of beer.
Take one down and pass it around, 39 bottles of beer on the wall.

39 bottles of beer on the wall, 39 bottles of beer.
Take one down and pass it around, 38 bottles of beer on the wall.

38 bottles of beer on the wall, 38 bottles of beer.
Take one down and pass it around, 37 bottles of beer on the wall.

37 bottles of beer on the wall, 37 bottles of beer.
Take one down and pass it around, 36 bottles of beer on the wall.

36 bottles of beer on the wall, 36 bottles of beer.
Take one down and pass it around, 35 bottles of beer on the wall.

35 bottles of beer on the wall, 35 bottles of beer.
Take one down and pass it around, 34 bottles of beer on the wall.

34 bottles of beer on the wall, 34 bottles of beer.
Take one down and pass it around, 33 bottles of beer on the wall.

33 bottles of beer on the wall, 33 bottles of beer.
Take one down and pass it around, 32 bottles of beer on the wall.

32 bottles of beer on the wall, 32 bottles of beer.
Take one down and pass it around, 31 bottles of beer on the wall.

31 bottles of beer on the wall, 31 bottles of beer.
Take one down and pass it around, 30 bottles of beer on the wall.

30 bottles of beer on the wall, 30 bottles of beer.
Take one down and pass it around, 29 bottles of beer on the wall.

29 bottles of beer on the wall, 29 bottles of beer.
Take one down and pass it around, 28 bottles of beer on the wall.

28 bottles of beer on the wall, 28 bottles of beer.
Take one down and pass it around, 27 bottles of beer on the wall.
27 bottles of beer on the wall, 27 bottles of beer.
Take one down and pass it around, 26 bottles of beer on the wall.

26 bottles of beer on the wall, 26 bottles of beer.
Take one down and pass it around, 25 bottles of beer on the wall.

25 bottles of beer on the wall, 25 bottles of beer.
Take one down and pass it around, 24 bottles of beer on the wall.

24 bottles of beer on the wall, 24 bottles of beer.
Take one down and pass it around, 23 bottles of beer on the wall.

23 bottles of beer on the wall, 23 bottles of beer.
Take one down and pass it around, 22 bottles of beer on the wall.

22 bottles of beer on the wall, 22 bottles of beer.
Take one down and pass it around, 21 bottles of beer on the wall.

21 bottles of beer on the wall, 21 bottles of beer.
Take one down and pass it around, 20 bottles of beer on the wall.

20 bottles of beer on the wall, 20 bottles of beer.
Take one down and pass it around, 19 bottles of beer on the wall.

19 bottles of beer on the wall, 19 bottles of beer.
Take one down and pass it around, 18 bottles of beer on the wall.

18 bottles of beer on the wall, 18 bottles of beer.
Take one down and pass it around, 17 bottles of beer on the wall.

17 bottles of beer on the wall, 17 bottles of beer.
Take one down and pass it around, 16 bottles of beer on the wall.

16 bottles of beer on the wall, 16 bottles of beer.
Take one down and pass it around, 15 bottles of beer on the wall.

15 bottles of beer on the wall, 15 bottles of beer.
Take one down and pass it around, 14 bottles of beer on the wall.

14 bottles of beer on the wall, 14 bottles of beer.
Take one down and pass it around, 13 bottles of beer on the wall.

13 bottles of beer on the wall, 13 bottles of beer.
Take one down and pass it around, 12 bottles of beer on the wall.

12 bottles of beer on the wall, 12 bottles of beer.
Take one down and pass it around, 11 bottles of beer on the wall.

11 bottles of beer on the wall, 11 bottles of beer.
Take one down and pass it around, 10 bottles of beer on the wall.

10 bottles of beer on the wall, 10 bottles of beer.
Take one down and pass it around, 9 bottles of beer on the wall.

9 bottles of beer on the wall, 9 bottles of beer.
Take one down and pass it around, 8 bottles of beer on the wall.

8 bottles of beer on the wall, 8 bottles of beer.
Take one down and pass it around, 7 bottles of beer on the wall.

7 bottles of beer on the wall, 7 bottles of beer.
Take one down and pass it around, 6 bottles of beer on the wall.

6 bottles of beer on the wall, 6 bottles of beer.
Take one down and pass it around, 5 bottles of beer on the wall.

5 bottles of beer on the wall, 5 bottles of beer.
Take one down and pass it around, 4 bottles of beer on the wall.

4 bottles of beer on the wall, 4 bottles of beer.
Take one down and pass it around, 3 bottles of beer on the wall.

3 bottles of beer on the wall, 3 bottles of beer.
Take one down and pass it around, 2 bottles of beer on the wall.

2 bottles of beer on the wall, 2 bottles of beer.
Take one down and pass it around, 1 bottle of beer on the wall.

1 bottle of beer on the wall, 1 bottle of beer.
Take one down and pass it around, no more bottles of beer on the wall.

No more bottles of beer on the wall, no more bottles of beer.
Go to the store and buy some more, 99 bottles of beer on the wall.
share|improve this answer
    
+1 for the cheekiest idea yet :) –  MadTux Jun 14 at 10:21
    
+1 Made me smile. –  Sieg Jun 14 at 15:18
    
If you want to really cheat, it's also PHP! –  hvd Jun 15 at 14:27
2  
Won't the dots and comma's cause problems when running as Brainf***? –  Jop Vernooij Jun 18 at 14:58
    
Absolutely. Those , and . will cause problems. Fix this by adding [ before the English part, and ] at the end. –  Quincunx Jul 2 at 23:26

This will work in Python 3 and in Julia.

[[print(b, " bottles of beer on the wall, ", b, " bottles of beer.\nTake one down and pass it around, ", b-1, " bottles of beer on the wall.\n" ) for b in l] for l in [[12 * i + j + 4 for j in [11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]] for i in [7, 6, 5, 4, 3, 2, 1, 0]]]
print("3 bottles of beer on the wall, 3 bottles of beer.\nTake one down and pass it around, 2 bottles of beer on the wall.\n")
print("2 bottles of beer on the wall, 2 bottles of beer.\nTake one down and pass it around, 1 bottle of beer on the wall.\n")
print("1 bottle of beer on the wall, 1 bottle of beer.\nTake one down and pass it around, no more bottles of beer on the wall.\n")
print("No more bottles of beer on the wall, no more bottles of beer.\nGo to the store and buy some more, 99 bottles of beer on the wall.\n")
share|improve this answer

PHP and 아희(Aheui)

<?php
$b = 99;
while(true) {
    echo ($b==0 ? "No more" : $b)." bottle".($b==1 ? "" : "s")." of beer on the wall, ".($b==0 ? "no more" : $b)." bottle".($b==1 ? "" : "s")." of beer.\n";
    if($b == 0) {
        echo "Go to the store and buy some more";
        $b = 99;
    }
    else {
        echo "Take one down and pass it around";
        $b--;
    }
    echo ", ".($b==0 ? "no more" : $b)." bottle".($b==1 ? "" : "s")." of beer on the wall.\n\n";
    if($b == 99) break;
}
/*
발발따밤따박박나타삭밤밣따산박밦따밞뚜
우어어어어어어어어어어어어어어어어어어
아우
오사뺘뿌처밞밞따받타맣산빠받다맣삭빠맣산빠박박나다맣빠받다맣빠밦다맣빠밝타맣수
오우어명여어어어어어어어어어어어어어어어어어어어어어어어어어어어어어어어어어어
오삭빠맣산빠발타발타맣빠받다맣빠밣다빠맣맣빠맣빠밝타맣수
오우어어어어어어어어어어어어어어멓더벍뻐선처우텨너벅벅뻐
오우어어어어어어어어어어어어어어어어어어어어어
오아삭빠맣산빠받다맣빠밦타맣삭빠맣산빠발타발타맣빠밝타빠맣맣빠밦다맣삭빠맣산빠받다맣빠박다뭏
오뭏뻐멓더벖더벖뻐석멓뻐멓뻐멓터벖터벌뻐멓더벖더벌뻐선멓뻐석멓터벍뻐멓터범뻐멓더벓뻐선멓뻐석
오사뺘뿌처산빠박다맣빠받다맣삭빠맣산빠박박나다맣빠받다맣빠밦다맣빠밝타맣수
오우어명여어어어어어어어어어어어어어어어어어어어어어어어어어어어어어어어어
오삭빠맣산빠발타발타맣빠받다맣빠밣다빠맣맣빠맣빠밝타맣수
오우어어어어어어어어어어어어어어멓더벍뻐선처우텨너벅벅뻐
오우어어어어어어어어어어어어어어어어어어어어어
오삭빠맣산빠받다맣빠밦타맣삭빠맣산빠발타발타맣빠밝타빠맣맣빠밦다맣밦밝따밤다맣발발다뭏
오우어어어어어어어어어어어어어어어어어어어어어어어어어어어어어어어어어어어어어어어어어
오사뺘우차박밦따밝따맣산빠발타밦타맣빠박박나타맣빠밝타맣삭빠맣산빠받다맣빠박다맣빠밝타뮿
오ㅇㅇ아아밣밣따밝다맣산빠받다맣삭빠맣산빠밣다맣빠받다맣삭빠맣산빠밣다맣빠밤타맣빠밝타뮿
오뮿뻐석멓터벓뻐멓더벅뻐멓터벖터벌뻐선멓뻐석멓더벅뻐멓더벖더벌뻐멓더벋뻐멓터벓뻐선멓뻐석
오유멓터벓뻐멓더벅뻐멓터벖터벌뻐선멓뻐석멓터벍뻐멓더벖뻐멓더벋뻐멓더벓뻐멓더벍뻐선멓뻐석
오삭산빠밤다맣빠발타밦타맣빠밝다빠맣맣삭빠맣산빠받타맣빠밣다맣삭빠뮿
초삭빠맣산빠발타발타맣빠밞다빠맣밤다맣삭빠맣산빠밝다맣빠받다맣빠박박나다맣빠밝타뮿
희유어어어어어멓터벓뻐멓더벅뻐멓더벎뻐멓더벋뻐멓더벖뻐멓터벖터벌뻐선
툐우어어어어어어어어어어어어어어어어어멓터벍뻐멓더벖뻐멓더벅멓뻐더너벅벅뻐선멓뻐석
토삭빠밦다밦다맣빠뭏
노우터너벅벅처불뼈서
복우더터너벅벅뱔뗘따볌
복사뺘뿌처산빠박다맣빠받다맣삭빠맣산빠박박나다맣빠받다맣빠밦다맣빠밝타맣수
또우어명여어어어어어어어어어어어어어어어어어어어어어어어어어어어어어어어어
봄삭빠맣산빠발타발타맣빠받다맣빠밣다빠맣맣빠맣빠밝타맣수
또우어어어어어어어어어어어어어어멓더벍뻐선처우텨너벅벅뻐
볼우어어어어어어어어어어어어어어어어어어어어어
볼아삭빠맣산빠받다맣빠밦타맣삭빠맣산빠발타발타맣빠밝타빠맣맣빠밦다맣삭빠맣산빠받다맣빠박다뭏
뽀불벌멓더벍더벍뻐석멓뻐멓뻐멓터벖터벌뻐멓더벖더벌뻐선멓뻐석멓터벍뻐멓터범뻐멓더벓뻐선멓뻐석
소댜몋빠몋

Aheui was tested with naheui.

I know it's cheating, but it works anyway.

share|improve this answer

This violates the rules, but I think in an amusing way.

It is written in C and C++. In C++ it does a pretty standard 99 bottles.

In C, it first fills the wall up, then empties it.

#include <stdio.h>

static int bottle_count = 99;

void bottles(int n, int fill) {
  if (fill) {
    printf("%d bottles of beer on the wall, pick one up place it away,\n", n);
    bottle_count = n+1;
  } else {
    printf("%d bottles of beer on the wall, take one down pass it around,\n", n);
    bottle_count = n-1;
  }
}

void empty_wall() {
  int wall;
  int i;
  wall = bottle_count;

  int speedup;
  speedup = 0;

  for (i = 0; i < wall; ++i) {
    if (++speedup == 4)
    {
      printf("...\n");
      i = wall-3;
    }
    bottles( wall-i, 0 );
  }
  printf("no bottles of beer on the wall!");
}

struct b_98 {};
struct b_97 {};
struct b_96 {};
struct b_3 {};
struct b_2 {};
struct b_1 {};
struct b_0 {};

void do_stuff() {
  bottle_count = 99;
  b_0();
  b_1();
  b_2();
  b_3();
  if (bottle_count<99)
    printf("...\n");
  b_96();
  b_97();
  b_98();
  empty_wall();
}

void b_0() { bottles(0,1); }
void b_1() { bottles(1,1); }
void b_2() { bottles(2,1); }
void b_3() { bottles(3,1); }
void b_96() { bottles(96,1); }
void b_97() { bottles(97,1); }
void b_98() { bottles(98,1); }

int main() {
  do_stuff();
  return 0;
}
share|improve this answer
    
Heh. I like it :) –  MadTux Jun 12 at 18:32

BrainFuck and Python 2

This will compile and run under CPython2.7 (and probably others) as well as a BrainFuck interpreter. These are two distinct languages, with very little overlap, and this answer is totally cheating.

# Thanks to Raphael Bois for the code (taken from http://goo(dot)gl/GddKtS)
# ++>+>++>>+>>>:++++++++++[->+>+>++++++++++<<<]>>>>++++++++++[->+++++>++++++++++>+++++++++++>++++++++>++++++++>+++>++++>+<<<<<<<<]+>--+>+++>++++++>--+>+++++>+++>+++++>+>+>+>+>++>+>+>++[-<]<<<<<<<[->>[>>>>>>>>[<<<<<<<[->[-]>>>>>>>>>>>.<----.>>>.<<<--.++.+++.+<-.+<<+<<<<<<<<]+>[-<[-]>>>>>[>>>+<<<<+<+<+>>>-]<<<[->>>+<<<]>[>>>>>>+<<<<<<-]>>>>>[[-]>.<]<<<<[>>>>>-<<<<<-]>>[<<+<+<+>>>>-]<<<<[->>>>+<<<<]>[>>>>>>+<<<<<<-]>>>>>>.<<<<<[>>>>>-<<<<<-]>>>[-<<<+<+>>>>]<<<<[->>>>+<<<<]>-[[-]>>>>+<<<<]<<<]+>>>>>>>>>>>>>.<<<<----.>----.+++++..-<++++++++++.-------.<<[[-]>>>.<<<]>>===>>>>.<<<----.<+.>>>>.<<<<----.+++..+>+++.+[>]+>+>[->+<<-<-<<<.<<<----.-.>>>.<<<++++++.<++.---.>>>>.<<<+++.<----.+++++++++++..------>---->-------------------------------->>>++.-->..>>>]>>>[->[-]<<<<<<<[<]<[-]>>[>]>>>>>]+>[-<[-]<<<<[->>[->+<<<<-<<<.<<<----.-.>>>.<<<++++++.<++.---.>>>>.<<<+++.<----.+++++++++++..------>---->++++++++++++++++++++++++++++++++>>>.<.>>>>>>]<<]<[->>>>[-<<+<<<<++.-->.[<]<<<<<<<<[->[-]<]+>[-<[-]>>>>>>>>>>>>>.<<<-----.++++++++++.------.>>>>.<<<----.-.<.>>>>.<<<<-.>+.++++++++.---------.>>>.<<<<---.>.<+++.>>>>.<<<++.<---.>+++..>>>.<<<<++++++++.>+.>>>.<<<<--------.>--.---.++++++.-------.<+++.++>+++++>>>>.<.[<]<<<<<<<]+>>>>>>-<<<+>>[<<[-]<+<+>>>>-]<<<<[>-<[-]]>[->>>+<<<]>[->->+++++++++<<]>>>>>[>]>>>>]<<<<]>>>>>>]+<<<<<<<[<]<]+<+<<<<<<+<-]>>>>>>>>>>[>]>>>>>[->[-]<]+>[-<[-]<<<<<<<<<-------------.<<----.>>>.<<<+++++.-----.>>>.<<<+++++.<++.---.>>>>.<<<-.+.-----.+++.<.>>>>.<<<<----.>----.<+++.>>>>.<<<<--.>+++++++.++++.>>>.<<<------.----.--.<+++.>>>>.<<<.++.+++.+<.+>>>>>.<.>>>>>>>>>]+<[-]+<[-]<[-]<[-]+<<<[<]<[-]<[-]<[-]<[-]++++++++++[->+>+>++++++++++<<<]>->->-<<<<<<[-]+<[-]<+<<]

dot = chr(46)
comma = chr(44)

for x in range(99, 2, -1):
    print """%d bottles of beer on the wall%s %d bottles of beer%s
Take one down and pass it around%s %d bottles of beer on the wall%s
""" % (x, comma, x, dot, comma, x - 1, dot)

print """2 bottles of beer on the wall%s 2 bottles of beer%s
Take one down and pass it around%s 1 bottle of beer on the wall%s

1 bottle of beer on the wall%s 1 bottle of beer%s
Take one down and pass it around%s no more bottles of beer on the wall%s

No more bottles of beer on the wall%s no more bottles of beer%s
Go to the store and buy some more%s 99 bottles of beer on the wall%s""" % (comma, dot, comma, dot, comma, dot, comma, dot, comma, dot, comma, dot)

The second line is the BrainFuck-run code. BrainFuck interpreters should ignore the rest of the code, and online interpreters will run it.

The rest of the code is the Python code. Originally it was just going to print the entire set of lyrics, but that's not as fun. The same was also going to be done for the BrainFuck code, but it blew by the character restrictions in posts (by about 270,000 characters).

share|improve this answer
    
I don't think the Python output is correct. –  Sieg Jun 11 at 21:58
    
@TheRare You're right, just fixed that (99 was hardcoded) –  Kevin Brown Jun 12 at 0:53
4  
You just added the brainfuck code as a comment... Disappointed :'( –  Anubian Noob Jun 12 at 2:36
1  
first you say it's awful then you remark it's from someone else. seriously? –  bebe Jun 13 at 12:56
    
@bebe Looks like I forgot to remove that, my bad. That was added for the original version (300k characters), but that blew by the restrictions (as noted in the post). –  Kevin Brown Jun 13 at 22:33

Lua and (F)ASM

S=10;--[[
irp x,<display 'The beer song:',13,10>,<rept 101 d:0\{reverse match,\\{j equ 'If one bottle of beer should accidently fall ...',13,10\\}match,\\{p equ 's'\\}match,\\{q equ \`d\\}match=1,d\\{p equ ''\\}match=0,d\\{q equ 'no'\\}match=0,d\\{j equ 'Who drunk all the beer!',13,10\\}match f,q\\{display q,' bottle',p,' of beer on the wall, ',q,' bottle',p,' of beer,',13,10,j\\}\}>{x}
S=10;]]--
S=10; beer=99
S=10; repeat
S=10; print(beer.." bottles of beer on the wall, "..beer.." bottles")
S=10; beer=beer-1
S=10; print("Take one down and pass it around, "..beer.." bottles of beer on the wall.")
S=10; print()
S=10; until beer==1
S=10; print("1 bottle of beer on the wall, 1 bottle of beer.")
S=10; print("Take one down and pass it around, no more bottles of beer on the wall.")
S=10; print()
S=10; print("No more bottles of beer on the wall, no more bottles of beer.")

Credits to Revolution for the Fasm one liner, even though everything in between line 1 and 3 is ignored by Lua so I could have writte an aribitrary long fasm program in there.

The trick is that in lua you can use a semicolon to separate instruction, to write multiple instructions on the same line, while in fasm a semicolon is the beginning a comment. S=10; is a valid assignement in both languages, everything else is fairly obvious

share|improve this answer

C# + Ruby

using System;

namespace bottles
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int i = 99; i >= 0; i--)
                Console.WriteLine("{0} bottles", i);
        }
    }
}

/*
#!/usr/bin/ruby

99.downto(0){|i|
print i.to_s+" bottles\n"
}

__END__
*/

to run (Ruby):
ruby -x script.cs

share|improve this answer

J, Python 2.x

I'm a little late to the party, but oh well. Nothing too fancy here, because it's my first time polyglotting. Python is quite impossible to be properly mixed with J; so I basically commented J out in Python and made Python a string literal in J. I'll probably add more languages later.

(''''"_)`(''"_)@.(1) 1
number =: 'No more'"_`('no more'"_)@.([ = 0:)`(":@])@.(] > 0:)
bottle =: number , {.&' bottles'@(8: - =&1@])
verse1 =: 1&bottle, ' of beer on the wall, '"_, bottle, ' of beer.'"_
verse2 =: 'Take one down and pass it around, '"_, bottle@<:, ' of beer on the wall.'"_
verse  =: verse1 ,: verse2
song   =: (<:@[ $: ] , verse@[ , ''"_)`(] , verse1@[)@.([ < 1:)
sing   =: (] song ''"_) , 'Go to the store and buy some more, '"_ , bottle , ' of beer on the wall.'"_
sing ". 2 {. 0 : 0
99''')
print(lambda x:x(x,99,lambda c,w=1,p=0:"%s %s of beer%s"%(c or"nN"[p]+"o more","bottle"+"s"*(c!=1)," on the wall"*w)))(lambda x,c,y:c+1and"%s, %s.\n%s"%(y(c,1,1),y(c,0),"Take one down and pass it around, %s.\n\n"%y(c-1)*(c>0))+x(x,c-1,y)or"Go to the store and buy some more, %s.\n"%y(99)
)
share|improve this answer

This should work in C, C++ and Objective-C. Objective-C++ has not been tested but will probably work:

#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;
}
share|improve this answer
9  
is valid in at least 2 distinct languages (e.g. not Python2 and Python3) - I would say this absolutely doesn't pass that requirement. OP's call though. –  Sieg Jun 10 at 17:16
3  
@TheRare You sayin' C++ and C aren't two different languages? –  user19785 Jun 10 at 17:23
4  
Python2 and Python3 are incompatible, as are C++ and C. Still you can write code that works by itself on both. That makes them NOT distinct. For example, Python, Ruby and C are all distinct from eachother. –  Sieg Jun 10 at 17:26
1  
@TheRare It just occured to me, but the challenge is to write code that works in both ;) –  user19785 Jun 10 at 17:36
7  
This is clearly C only code. It doesn't use any features of C++, Objective C or Objective C++ that aren't already built into C. Those other three compilers will compile normal C code. So, as far as I can tell, this isn't written in C++, ObjC, or ObjC++. It's just simple enough C that those other compilers will also compile it since they are backwards compatible. –  Adam Davis Jun 11 at 14:23

Ruby, Golfscript

"#{File.write('out.txt', "99 bottles of beer on the wall,
99 bottles of beer.
Take one down, pass it around,
98 bottles of beer on the wall.

98 bottles of beer on the wall,
98 bottles of beer.
Take one down, pass it around,
97 bottles of beer on the wall.

97 bottles of beer on the wall,
97 bottles of beer.
Take one down, pass it around,
96 bottles of beer on the wall.

96 bottles of beer on the wall,
96 bottles of beer.
Take one down, pass it around,
95 bottles of beer on the wall.

95 bottles of beer on the wall,
95 bottles of beer.
Take one down, pass it around,
94 bottles of beer on the wall.

94 bottles of beer on the wall,
94 bottles of beer.
Take one down, pass it around,
93 bottles of beer on the wall.

93 bottles of beer on the wall,
93 bottles of beer.
Take one down, pass it around,
92 bottles of beer on the wall.

92 bottles of beer on the wall,
92 bottles of beer.
Take one down, pass it around,
91 bottles of beer on the wall.

91 bottles of beer on the wall,
91 bottles of beer.
Take one down, pass it around,
90 bottles of beer on the wall.

90 bottles of beer on the wall,
90 bottles of beer.
Take one down, pass it around,
89 bottles of beer on the wall.

89 bottles of beer on the wall,
89 bottles of beer.
Take one down, pass it around,
88 bottles of beer on the wall.

88 bottles of beer on the wall,
88 bottles of beer.
Take one down, pass it around,
87 bottles of beer on the wall.

87 bottles of beer on the wall,
87 bottles of beer.
Take one down, pass it around,
86 bottles of beer on the wall.

86 bottles of beer on the wall,
86 bottles of beer.
Take one down, pass it around,
85 bottles of beer on the wall.

85 bottles of beer on the wall,
85 bottles of beer.
Take one down, pass it around,
84 bottles of beer on the wall.

84 bottles of beer on the wall,
84 bottles of beer.
Take one down, pass it around,
83 bottles of beer on the wall.

83 bottles of beer on the wall,
83 bottles of beer.
Take one down, pass it around,
82 bottles of beer on the wall.

82 bottles of beer on the wall,
82 bottles of beer.
Take one down, pass it around,
81 bottles of beer on the wall.

81 bottles of beer on the wall,
81 bottles of beer.
Take one down, pass it around,
80 bottles of beer on the wall.

80 bottles of beer on the wall,
80 bottles of beer.
Take one down, pass it around,
79 bottles of beer on the wall.

79 bottles of beer on the wall,
79 bottles of beer.
Take one down, pass it around,
78 bottles of beer on the wall.

78 bottles of beer on the wall,
78 bottles of beer.
Take one down, pass it around,
77 bottles of beer on the wall.

77 bottles of beer on the wall,
77 bottles of beer.
Take one down, pass it around,
76 bottles of beer on the wall.

76 bottles of beer on the wall,
76 bottles of beer.
Take one down, pass it around,
75 bottles of beer on the wall.

75 bottles of beer on the wall,
75 bottles of beer.
Take one down, pass it around,
74 bottles of beer on the wall.

74 bottles of beer on the wall,
74 bottles of beer.
Take one down, pass it around,
73 bottles of beer on the wall.

73 bottles of beer on the wall,
73 bottles of beer.
Take one down, pass it around,
72 bottles of beer on the wall.

72 bottles of beer on the wall,
72 bottles of beer.
Take one down, pass it around,
71 bottles of beer on the wall.

71 bottles of beer on the wall,
71 bottles of beer.
Take one down, pass it around,
70 bottles of beer on the wall.

70 bottles of beer on the wall,
70 bottles of beer.
Take one down, pass it around,
69 bottles of beer on the wall.

69 bottles of beer on the wall,
69 bottles of beer.
Take one down, pass it around,
68 bottles of beer on the wall.

68 bottles of beer on the wall,
68 bottles of beer.
Take one down, pass it around,
67 bottles of beer on the wall.

67 bottles of beer on the wall,
67 bottles of beer.
Take one down, pass it around,
66 bottles of beer on the wall.

66 bottles of beer on the wall,
66 bottles of beer.
Take one down, pass it around,
65 bottles of beer on the wall.

65 bottles of beer on the wall,
65 bottles of beer.
Take one down, pass it around,
64 bottles of beer on the wall.

64 bottles of beer on the wall,
64 bottles of beer.
Take one down, pass it around,
63 bottles of beer on the wall.

63 bottles of beer on the wall,
63 bottles of beer.
Take one down, pass it around,
62 bottles of beer on the wall.

62 bottles of beer on the wall,
62 bottles of beer.
Take one down, pass it around,
61 bottles of beer on the wall.

61 bottles of beer on the wall,
61 bottles of beer.
Take one down, pass it around,
60 bottles of beer on the wall.

60 bottles of beer on the wall,
60 bottles of beer.
Take one down, pass it around,
59 bottles of beer on the wall.

59 bottles of beer on the wall,
59 bottles of beer.
Take one down, pass it around,
58 bottles of beer on the wall.

58 bottles of beer on the wall,
58 bottles of beer.
Take one down, pass it around,
57 bottles of beer on the wall.

57 bottles of beer on the wall,
57 bottles of beer.
Take one down, pass it around,
56 bottles of beer on the wall.

56 bottles of beer on the wall,
56 bottles of beer.
Take one down, pass it around,
55 bottles of beer on the wall.

55 bottles of beer on the wall,
55 bottles of beer.
Take one down, pass it around,
54 bottles of beer on the wall.

54 bottles of beer on the wall,
54 bottles of beer.
Take one down, pass it around,
53 bottles of beer on the wall.

53 bottles of beer on the wall,
53 bottles of beer.
Take one down, pass it around,
52 bottles of beer on the wall.

52 bottles of beer on the wall,
52 bottles of beer.
Take one down, pass it around,
51 bottles of beer on the wall.

51 bottles of beer on the wall,
51 bottles of beer.
Take one down, pass it around,
50 bottles of beer on the wall.

50 bottles of beer on the wall,
50 bottles of beer.
Take one down, pass it around,
49 bottles of beer on the wall.

49 bottles of beer on the wall,
49 bottles of beer.
Take one down, pass it around,
48 bottles of beer on the wall.

48 bottles of beer on the wall,
48 bottles of beer.
Take one down, pass it around,
47 bottles of beer on the wall.

47 bottles of beer on the wall,
47 bottles of beer.
Take one down, pass it around,
46 bottles of beer on the wall.

46 bottles of beer on the wall,
46 bottles of beer.
Take one down, pass it around,
45 bottles of beer on the wall.

45 bottles of beer on the wall,
45 bottles of beer.
Take one down, pass it around,
44 bottles of beer on the wall.

44 bottles of beer on the wall,
44 bottles of beer.
Take one down, pass it around,
43 bottles of beer on the wall.

43 bottles of beer on the wall,
43 bottles of beer.
Take one down, pass it around,
42 bottles of beer on the wall.

42 bottles of beer on the wall,
42 bottles of beer.
Take one down, pass it around,
41 bottles of beer on the wall.

41 bottles of beer on the wall,
41 bottles of beer.
Take one down, pass it around,
40 bottles of beer on the wall.

40 bottles of beer on the wall,
40 bottles of beer.
Take one down, pass it around,
39 bottles of beer on the wall.

39 bottles of beer on the wall,
39 bottles of beer.
Take one down, pass it around,
38 bottles of beer on the wall.

38 bottles of beer on the wall,
38 bottles of beer.
Take one down, pass it around,
37 bottles of beer on the wall.

37 bottles of beer on the wall,
37 bottles of beer.
Take one down, pass it around,
36 bottles of beer on the wall.

36 bottles of beer on the wall,
36 bottles of beer.
Take one down, pass it around,
35 bottles of beer on the wall.

35 bottles of beer on the wall,
35 bottles of beer.
Take one down, pass it around,
34 bottles of beer on the wall.

34 bottles of beer on the wall,
34 bottles of beer.
Take one down, pass it around,
33 bottles of beer on the wall.

33 bottles of beer on the wall,
33 bottles of beer.
Take one down, pass it around,
32 bottles of beer on the wall.

32 bottles of beer on the wall,
32 bottles of beer.
Take one down, pass it around,
31 bottles of beer on the wall.

31 bottles of beer on the wall,
31 bottles of beer.
Take one down, pass it around,
30 bottles of beer on the wall.

30 bottles of beer on the wall,
30 bottles of beer.
Take one down, pass it around,
29 bottles of beer on the wall.

29 bottles of beer on the wall,
29 bottles of beer.
Take one down, pass it around,
28 bottles of beer on the wall.

28 bottles of beer on the wall,
28 bottles of beer.
Take one down, pass it around,
27 bottles of beer on the wall.

27 bottles of beer on the wall,
27 bottles of beer.
Take one down, pass it around,
26 bottles of beer on the wall.

26 bottles of beer on the wall,
26 bottles of beer.
Take one down, pass it around,
25 bottles of beer on the wall.

25 bottles of beer on the wall,
25 bottles of beer.
Take one down, pass it around,
24 bottles of beer on the wall.

24 bottles of beer on the wall,
24 bottles of beer.
Take one down, pass it around,
23 bottles of beer on the wall.

23 bottles of beer on the wall,
23 bottles of beer.
Take one down, pass it around,
22 bottles of beer on the wall.

22 bottles of beer on the wall,
22 bottles of beer.
Take one down, pass it around,
21 bottles of beer on the wall.

21 bottles of beer on the wall,
21 bottles of beer.
Take one down, pass it around,
20 bottles of beer on the wall.

20 bottles of beer on the wall,
20 bottles of beer.
Take one down, pass it around,
19 bottles of beer on the wall.

19 bottles of beer on the wall,
19 bottles of beer.
Take one down, pass it around,
18 bottles of beer on the wall.

18 bottles of beer on the wall,
18 bottles of beer.
Take one down, pass it around,
17 bottles of beer on the wall.

17 bottles of beer on the wall,
17 bottles of beer.
Take one down, pass it around,
16 bottles of beer on the wall.

16 bottles of beer on the wall,
16 bottles of beer.
Take one down, pass it around,
15 bottles of beer on the wall.

15 bottles of beer on the wall,
15 bottles of beer.
Take one down, pass it around,
14 bottles of beer on the wall.

14 bottles of beer on the wall,
14 bottles of beer.
Take one down, pass it around,
13 bottles of beer on the wall.

13 bottles of beer on the wall,
13 bottles of beer.
Take one down, pass it around,
12 bottles of beer on the wall.

12 bottles of beer on the wall,
12 bottles of beer.
Take one down, pass it around,
11 bottles of beer on the wall.

11 bottles of beer on the wall,
11 bottles of beer.
Take one down, pass it around,
10 bottles of beer on the wall.

10 bottles of beer on the wall,
10 bottles of beer.
Take one down, pass it around,
9 bottles of beer on the wall.

9 bottles of beer on the wall,
9 bottles of beer.
Take one down, pass it around,
8 bottles of beer on the wall.

8 bottles of beer on the wall,
8 bottles of beer.
Take one down, pass it around,
7 bottles of beer on the wall.

7 bottles of beer on the wall,
7 bottles of beer.
Take one down, pass it around,
6 bottles of beer on the wall.

6 bottles of beer on the wall,
6 bottles of beer.
Take one down, pass it around,
5 bottles of beer on the wall.

5 bottles of beer on the wall,
5 bottles of beer.
Take one down, pass it around,
4 bottles of beer on the wall.

4 bottles of beer on the wall,
4 bottles of beer.
Take one down, pass it around,
3 bottles of beer on the wall.

3 bottles of beer on the wall,
3 bottles of beer.
Take one down, pass it around,
2 bottles of beer on the wall.

2 bottles of beer on the wall,
2 bottles of beer.
Take one down, pass it around,
1 bottle of beer on the wall.

1 bottle of beer on the wall,
1 bottle of beer.
Take one down, pass it around,
No bottles of beer on the wall.

No bottles of beer on the wall,
No bottles of beer.
Go to the store, buy some more,
99 bottles of beer on the wall.")}"
share|improve this answer

Javascript, HTML and CSS3

/*
<div id="beer">99 Bottles of Beer on The Wall</div>
*/
//<script>
  document.getElementById(beer).appendHTML("99 bottles of beer,")
//</script>
/*
<style>
  #beer:after {
    content: "You take on down, pass it around..."
  }
</style> 
*/
share|improve this answer
1  
Seems to be slightly incomplete... –  primo Jun 14 at 14:45
    
Lol'd. Doesn't work in css3-file though. .. In anything actually. –  Sieg Jun 14 at 14:47
    
It only is legit js and it requires html with beer-element to be present. –  Sieg Jun 14 at 14:53

protected by Community Jun 20 at 7:53

Thank you for your interest in this question. Because it has attracted low-quality answers, posting an answer now requires 10 reputation on this site.

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.