> Here's an incremental squeezing of an earlier solution, I think by Steven
> Grady, down to 164 (or has someone already done that?):
> 
> def b(n)"#{n>0?n: 'No more'} bottle#{'s'if n!=1} of beer"end
> 99.downto(1){|n|w=" on the wall";puts "#{b(n)+w}, #{b n}\nTake one down, pass it around\n#{b(n-1)+w}."}

[165, by my count?]

Not entirely; the original poster asked for a comma after ``around''
and an empty line in between the iterations. That costs you 5 bytes (a
double '\n' in a puts).

But, in the same way, ``more'' is not required, which saves you 5 bytes.

You've got to be careful with these things :)

NB:

def b(n)"#{n>0?n: 'No'} bottle#{'s'if n!=1} of beer"end
99.downto(1){|n|w=" on the wall";puts b(n)+w+", #{b n}\nTake one down, pass it around,\n#{b(n-1)+w}.\n\n"}

Is only 163 bytes.

+--- Kero ------------------------------ kero / chello.nl ---+
|  Don't split your mentality without thinking twice       |
|                          Proud like a God -- Guano Apes  |
+--- M38c ------- http://members.chello.nl/~k.vangelder ---+