From Drunk on golf: 99 Bottles of Beer:
The article capitalizes on the tendency of popular songs to evolve
from long and content-rich ballads to highly repetitive texts with
little or no meaningful content.
Knuth writes that "our ancient ancestors invented the concept of refrain"
to reduce the space complexity of songs, which becomes crucial when a
large number of songs is to be committed to one's memory ...
more ingenious approaches yield songs of complexity O(logN),
a class known as "m bottles of beer on the wall".
-- The Complexity of Songs by Donald Knuth (1977)
While the affection for this song among computer programmers may have begun in 1977,
with the publication of Knuth's seminal paper,
it didn't become wildly popular until 1994, when some nitwit posted the entire
lyrics of the song to a humour mailing list, provoking a BASIC version to be
written:
10 REM BASIC Version of 99 Bottles of beer
20 FOR X=100 TO 1 STEP -1
30 PRINT X;"Bottle(s) of beer on the wall,";X;"bottle(s) of beer"
40 PRINT "Take one down and pass it around,"
50 PRINT X-1;"bottle(s) of beer on the wall"
60 NEXT
to "save mailing list bandwidth".
It snowballed from there until today we can now choose from
more than 1400 programming language variations.
Over the years, many different Perl solutions have been proposed.
On December 25 1998, for instance, Damian Conway composed
a version using his Lingua::EN::Inflect module:
use Lingua::EN::Inflect 'inflect';
$n=shift||99;
print inflect<<BURP while $n;
NO(bottle of beer,$n) on the wall, NO(bottle of beer,$n)!
Take one down, pass it around,
NO(bottle of beer,@{[--$n]}) on the wall.
BURP
Here's a version using Acme-EyeDrops:
''=~( '(?{' .('`' |'%') .('[' ^
+'-')
.('`' |'!') .('`' |',') .'"'. '
+\\$'
.'==' .('[' ^'+') .('`' |'/') .
+('['
^'+') .'||' .(';' &'=') .(';' &
+'=')
.';-' .'-'. '\\$' .'=;' .('[' ^
+'(')
.('[' ^'.') .('`' |'"') .('!' ^
+'+')
.'_\\{' .'(\\$' .';=('. '\\$=|' ."\|".( '`
+'^'.'
).(('`')| '/').').' .'\\"'.+( '{'^'['). ('`'|'"') .('
+`'|'/'
).('['^'/') .('['^'/'). ('`'|',').( '`'|('%')). '\\".\\"'.( '['^
+('(')).
'\\"'.('['^ '#').'!!--' .'\\$=.\\"' .('{'^'['). ('`'|'/').( '`'|
+"\&").(
'{'^"\[").( '`'|"\"").( '`'|"\%").( '`'|"\%").( '['^(')')). '\\"
+).\\"'.
('{'^'[').( '`'|"\/").( '`'|"\.").( '{'^"\[").( '['^"\/").( '`'|
+"\(").(
'`'|"\%").( '{'^"\[").( '['^"\,").( '`'|"\!").( '`'|"\,").( '`'|
+(',')).
'\\"\\}'.+( '['^"\+").( '['^"\)").( '`'|"\)").( '`'|"\.").( '['^
+('/')).
'+_,\\",'.( '{'^('[')). ('\\$;!').( '!'^"\+").( '{'^"\/").( '`'|
+"\!").(
'`'|"\+").( '`'|"\%").( '{'^"\[").( '`'|"\/").( '`'|"\.").( '`'|
+"\%").(
'{'^"\[").( '`'|"\$").( '`'|"\/").( '['^"\,").( '`'|('.')). ','.
+(('{')^
'[').("\["^ '+').("\`"| '!').("\["^ '(').("\["^ '(').("\{"^ '[')
+.("\`"|
')').("\["^ '/').("\{"^ '[').("\`"| '!').("\["^ ')').("\`"| '/')
+.("\["^
'.').("\`"| '.').("\`"| '$')."\,".( '!'^('+')). '\\",_,\\"' .'!'
+.("\!"^
'+').("\!"^ '+').'\\"'. ('['^',').( '`'|"\(").( '`'|"\)").( '`'|
+"\,").(
'`'|('%')). '++\\$="})' );$:=('.')^ '~';$~='@'| '(';$^=')'^ '[';
+$/='`';
Oh, and the HQ9+ Programming Language
can print the lyrics to 99 Bottles of Beer in a one character program: 9
References
Updated: added References section and HQ9+ reference
|