• Coding
  • [Exercise] Happy Birthday golf

Let's have some code golf fun. The goal is to write a program that outputs exactly the following text using as little characters as possible:
Happy Birthday to you,
Happy Birthday to you,
Happy Birthday dear name!
Happy Birthday to you.
Every language is accepted, although the use of Java is heavily discouraged for obvious reasons.
Have fun :)
        static void Main(string[] args)
        {
            string hb = "Happy Birthday ";
            for (int i = 0; i < 4; i++)
            {
                if (i == 2)
                {
                    cw(hb+ "dear name!");
                    continue;
                }
                if (i == 3)
                {
                    cw(hb + "to you.");
                    break;
                }
                cw(hb+"to you,");
            }

            Console.ReadLine();
        }


        public static void cw(string s)
        {
            Console.WriteLine(s);
        }

rtp: According to my wc that's 601characters. I think you're going to need much better than this to compete in code golf ;)
Matlab/Octave (I figured that the simplest way is the shortest):
fprintf('Happy Birthday to you,\nHappy Birthday to you,\nHappy Birthday dear name!\nHappy Birthday to you.\n')
Happy birthday who?
rahmu wrotertp: According to my wc that's 601characters. I think you're going to need much better than this to compete in code golf ;)
lol, lets just say this is the first strike :P
C Language:

#1 The native C code, runs on all compilers, without colored text.
main(){int i;for(i=0;i<4;i++){printf("Happy Birthday");i!=3?i==2?puts(" dear name!"):puts(" to you,"):puts(" to you.");}}
#2 This one is 100% accurate, tested on Pelles C. (Define compatibility names enabled in compiler settings)
main(){int i;for(i=0;i<4;i++){textcolor(3);printf("Happy Birthday");textcolor(7);i!=3?i==2?puts(" dear name!"):puts(" to you,"):puts(" to you.");}}
x = 'Happy Birthday '
print x + x.join('dear name!\n' if i==2 else 'to you,\n' for i in range(4))[:-2] + '.'
Number of characters: 108

Edit:
Without spaces
x='Happy Birthday '
print x+x.join('dear name!\n'if i==2 else'to you,\n'for i in range(4))[:-2]+'.'
Number of characters: 99
Here's my best one so far at 97 characters of Python code:
print "\n".join(map("".join,zip(['Happy Birthday ']*4,['to you,']*2+['dear name!']+['to you.'])))
I think I can go even lower by avoiding "to you" be repeated twice.

@mesa177: I wouldn't have posted the exercise if I didn't know how to beat your solution...

@ILIA_93: Good catch for the colored text, but in the interest of sanity, we can ignore the coloration of the text (which, quite frankly, is a problem with the formatting software of this forum and not at all intentional).
Put the text to print in a separated file. Let " f " be this file.

Using perl 48 chars:
open(FILE,"f");while(<FILE>){print$_;}closeFILE; 
Using Bash.. well 4 chars:
 cat f 

Cheating :) ?
Here's my shortest attempt in Ruby at 72 characters.
s="Happy Birthday to you,\n";puts s+s+s[0,15]+"dear name!\n"+s[0,21]+'.'
And some other ideas that are longer.
s="Happy Birthday to you,";[s,s,s[0,15]+"dear name!",s.chop+'.'].each{|l|puts l}
s="Happy Birthday to you,";puts [s,s,s[0,15]+"dear name!",s.chop+'.'].join("\n")
s="Happy Birthday to you,\n";puts s+s+s[0,15]+"dear name!\n"+s.chop.chop+'.'
s="Happy Birthday to you,\n";puts s+s+s[0,15]+"dear name!\n"+s.sub(',','.')
Fun stuff!
C++
#include <iostream>,<string>
using namespace std;int main(){string x="Happy Birthday",z=" dear name!",y=" to you";for(int i=0;i<2;++i)cout<<x+y+','<<endl;cout<<x+z<<endl<<x+y+'.';}
Didn't spend much on it and it kind of shows, 181 (or 179, if you disregard the obligatory new line) characters.
Print@Uncompress@"1:eJxTTMoPCs5iYGDwSCwoqFRwyiwqyUhJrFQoyVeozC/ViTEwNCJFJiU1sUghLzE3VRGnTj0AnLYm2g=="
Very close to zef's solution.

Javascript / 92 characters:
h="Happy Birthday to you,\n";console.log(h+h+h.slice(0,15)+"dear name!\n"+h.slice(0,21)+'.')
There's always this too:
s="Happy Birthday to you";print"%s,\n%s,\n%s dear name!\n%s."%(s,s,s,s)
php:
echo gzinflate(base64_decode("80gsKKhUcMosKslISaxUKMlXqMwv1eHyIEo4JTWxSCEvMTdVEbsGPS4A"));
@arithma nice simple and clean solution
@arithma your solution is incorrect.
%s dear name!
Output:
Happy Birthday to you dear name!
Should be:
s="Happy Birthday to you";print"%s,\n%s,\n%s dear name!\n%s."%(s,s,s[:14],s)
@m0ei: Damn that :D, good find.
Making up for my last hickup (70 chars):
s='Happy Birthday to you,\n'*4;print s[:61]+"dear name!"+s[68:90]+'.'
2 months later
@Arithma:

You can shorten that by one more character. By moving the newlines around and using one fewer character in array indices:
s='\nHappy Birthday to you,'*4;print s[1:62]+"dear name!"+s[:22]+'.'