in reply to Code Golf: Four is magic
A version that returns the English names of the input 12 digit number.
Update: Hmmm. I just noticed on the stackoverflow page that they clarified that the numbers should be spelled out in both the left AND right columns. Phooey.
Another update: And now there's some further stipulation that there be a separator(space, hyphen, whatever) between spelled words and the input number must come in through STDIN, not as a passed parameter, so no pop @ARGV.
Update: 283
@p=(Thir,Four,Fif,Six,Seven,Eigh,Nine);@n=("\x8",One,Two,Three,Four,Fi
+ve,@p[3..6],Ten,Eleven,Twelve,map$_.teen,@p);s/u//for@m=map$_.ty,Twen
+,@p;$n[8].=t;sub n{$n=shift;$n?$n<20?$n[$n]:"$m[$n/102]$n[$n%10]":Z
+ero}$p+=<>;warn$m=n($p)," is ",$_=$p4?n$p=()=$m=~/\w/g:magic,".\n"un
+til/c/
0
Zero is Four.
Four is magic.
40
Forty is Five.
Five is Four.
Four is magic.
67
SixtySeven is Ten.
Ten is Three.
Three is Five.
Five is Four.
Four is magic.
83
EightyThree is Eleven.
Eleven is Six.
Six is Three.
Three is Five.
Five is Four.
Four is magic.
##### Versions that don't spell out right column. #####
Update:Sigh. Apparently I'm blind. Using duelafns suggestion, modifying the end conditional and some other minor tweaks.
256
@p=(Thir,Four,Fif,Six,Seven,Eigh,Nine);@n=("",One,Two,Three,Four,Five,
+@p[3..6],Ten,Eleven,Twelve,map($_.teen,@p),map$_.ty,Twen,@p);$n[22]=~
+s/u//;$n[8].=t;$_+=<>;print$z=$_?$_<20?$n[$_]:$n[$_/10+18].$n[$_%10]:
+Zero," is ",$_=$_4?length$z:magic,".\n"until/a/
or
perl E'@p=(Thir,Four,Fif,Six,Seven,Eigh,Nine);@n=("",One,Two,Three,Fo
+ur,Five,@p[3..6],Ten,Eleven,Twelve,map($_.teen,@p),map$_.ty,Twen,@p);
+$n[22]=~s/u//;$n[8].=t;$_+=<>;say$z=$_?$_<20?$n[$_]:$n[$_/10+18].$n[$
+_%10]:Zero," is ",$_=$_4?length$z:magic,"."until/a/'
Previous versions
Update: 314 Reformatted a bit to make it easier to run as a one liner. Capitalized names... because I could. Knocked another 2 strokes off. It bothers me that I can't figure out how to get rid of the duplicated Four without making it longer. I guess Four IS magic...
@u="0335443554366887798866555766"=~/./g;sub n{@p=(Thir,Four,Fif,Six,Se
+ven,Eigh,Nine);@n=("",One,Two,Three,Four,Five,@p[3..6],Ten,Eleven,Twe
+lve,map($_.teen,@p),map$_.ty,Twen,@p);$n[22]=~s/u//;$n[8].=t;shift()?
+$_<20?$n[$_]:$n[$_/10+18].$n[$_%10]:Zero}$_=pop;print$z=n($_)," is ",
+$_=$_4?length$z:magic,".\n"while/\d/
Update: 316
@u='0335443554366887798866555766'=~/./g;sub n{@p=(thir,four,fif,six,se
+ven,eigh,nine);@n=('',one,two,three,four,five,@p[3..6],ten,eleven,twe
+lve,map($_.teen,@p),twenty,map$_.ty,@p);$n[22]=~s/u//;$n[8].=t;shift(
+)?$_<20?$n[$_]:$n[$_/10+18].$n[$_%10]:zero}$_=pop;print$z=n($_)," is
+",$_=$_4?length$z:magic,".\n"while/\d/
Update: 337
@u='0335443554366887798866555766'=~/./g;sub n{@p=(qw/thir four fif six
+ seven eigh nine/);@n=('',qw/one two three four five/,@p[3..6],qw/ten
+ eleven twelve/,map($_.'teen',@p),'twenty',map$_.'ty',@p);$n[22]=~s/u
+//;$n[8].='t';shift()?$_<20?$n[$_]:$n[$_/10+18].$n[$_%10]:'zero'}$_=<
+>;print$z=n($_)," is ",$_=$_4?length$z:magic,".\n"while/\d/
Update: 341
@u='0335443554366887798866555766'=~/./g;sub n{shift;@p=(qw/thir four f
+if six seven eigh nine/);@n=('',qw/one two three four five/,@p[3..6],
+qw/ten eleven twelve/,map($_.'teen',@p),'twenty',map$_.'ty',@p);$n[22
+]=~s/u//;$n[8].='t';$t=$_?$_<20?$n[$_]:$n[$_/10+18].$n[$_%10]:'zero'}
+$_=<>;print$z=n($_)," is ",$_=$_4?length$z:magic,".\n"while/\d/
Update: 343
@u='0335443554366887798866555766'=~/./g;sub n{shift;@p=(qw/thir four f
+if six seven eigh nine/);@n=('',qw/one two three four five/,@p[3..6],
+qw/ten eleven twelve/,map($_.'teen',@p),'twenty',map$_.'ty',@p);$n[22
+]=~s/u//;$n[8].='t';$t=$_?$_<20?$n[$_]:$n[$_/10+18].$n[$_%10]:'zero'}
+$_=<>;print n($_)," is ",$_=$_4?length n($_):magic,".\n"while/\d/
Update: 344
@u='0335443554366887798866555766'=~/./g;sub n{shift;@p=(qw/thir four f
+if six seven eigh nine/);@n=('',qw/one two three four five/,@p[3..6],
+qw/ten eleven twelve/,map($_.'teen',@p),'twenty',map$_.'ty',@p);$n[22
+]=~s/u//;$n[8].='t';$t=$_?$_<20?$n[$_]:$n[$_/10+18].$n[$_%10]:'zero'}
+$_=pop;print n($_)," is ",$_=$_4?length n($_):magic,".\n"while/\d/
Update: 345
@u='0335443554366887798866555766'=~/./g;sub n{shift;@p=(qw/thir four f
+if six seven eigh nine/);@n=('',qw/one two three four five/,@p[3..6],
+qw/ten eleven twelve/,map($_.'teen',@p),'twenty',map($_.'ty',@p);$n[2
+2]=~s/u//;$n[8].='t';$t=$_?$_<20?$n[$_]:$n[$_/10+18].$n[$_%10]:'zero'
+}$_=pop;print n($_)," is ",$_=$_4?length n($_):magic,".\n"while/\d/
Update: 361
@u='0335443554366887798866555766'=~/./g;sub n{shift;@p=(qw/thir four f
+if six seven eigh nine/);@n=('',qw/one two three four five/,@p[3..6],
+qw/ten eleven twelve/);push@n,$_.'teen'for@p;$p[1]=~s/u//;push@n,'twe
+nty',;push@n,$_.'ty'for@p;$n[8].='t';$t=$_?$_<20?$n[$_]:$n[$_/10+18].
+$n[$_%10]:'zero'}$_=pop;print n($_)," is ",$_=$_4?length n($_):magic
+,".\n"while/\d/
Update: Save a stroke: 383.
@u='0335443554366887798866555766'=~/./g;sub n{shift;@p=(qw/thir four f
+if six seven eigh nine/);@n=('',qw/one two three four five/,@p[3..6],
+qw/ten eleven twelve/);push@n,$_.'teen'for@p;$p[1]=~s/u//;push@n,'twe
+nty',;push@n,$_.'ty'for@p;$n[8].='t';$t=$_?$_<20?$n[$_]:$n[$_/10+18].
+$n[$_%10]:'zero'}$_=pop;print n($_)," is ",$_=$_4?$_<20?$u[$_]4:$u
+[chop]+$u[18+$_]:magic,".\n"while/\d/
Proof of concept. Should be lots of room for improvement.
Update: whoops. Fixed for fourteen/forty. Curse you, irregular number names!
384 strokes.
@u='0335443554366887798866555766'=~/./g;sub n{shift;@p=(qw/thir four f
+if six seven eigh nine/);@n=('',qw/one two three four five/,@p[3..6],
+qw/ten eleven twelve/);push@n,$_.'teen'for@p;push@n,'twenty',;push@n,
+$_.'ty'for@p;$n[8].='t';$n[22]=~s/u//;$t=$_?$_<20?$n[$_]:$n[$_/10+18]
+.$n[$_%10]:'zero'}$_=pop;print n($_)," is ",$_=$_4?$_<20?$u[$_]4:$
+u[chop]+$u[18+$_]:magic,".\n"while/\d/
C:\test>magic.pl 0
zero is 4.
four is magic.
C:\test>magic.pl 1
one is 3.
three is 5.
five is 4.
four is magic.
C:\test>magic.pl 14
fourteen is 8.
eight is 5.
five is 4.
four is magic.
C:\test>magic.pl 15
fifteen is 7.
seven is 5.
five is 4.
four is magic.
C:\test>magic.pl 18
eighteen is 8.
eight is 5.
five is 4.
four is magic.
C:\test>magic.pl 44
fortyfour is 9.
nine is 4.
four is magic.
C:\test>magic.pl 77
seventyseven is 12.
twelve is 6.
six is 3.
three is 5.
five is 4.
four is magic.
C:\test>magic.pl 80
eighty is 6.
six is 3.
three is 5.
five is 4.
four is magic.
C:\test>magic.pl 99
ninetynine is 10.
ten is 3.
three is 5.
five is 4.
four is magic.
Re^2: Code Golf: Four is magic by duelafn (Vicar) on Jul 16, 2010 at 00:17 UTC 
So, um, what's @u still doing in there? :)
Update: Removing @u, using do{} instead of a sub, and applying the "say" cheat gives 261 260 (until/m/) strokes
#123456789 123456789 123456789 123456789 123456789 123456789 12345
+6789 123456789 123456789 123456789_123456789 123456789 123456789 1234
+56789 123456789 123456789 123456789 123456789 123456789 123456789_123
+456789 123456789 123456789 123456789 123456789 123456789
for f in 0 4 12 99; do
perl E'$_=pop;say$z=do{@p=(Thir,Four,Fif,Six,Seven,Eigh,Nine);@n=("",
+One,Two,Three,Four,Five,@p[3..6],Ten,Eleven,Twelve,map($_.teen,@p),ma
+p$_.ty,Twen,@p);$n[22]=~s/u//;$n[8].=t;$_?$_<20?$n[$_]:$n[$_/10+18].$
+n[$_%10]:Zero}," is ",$_=$_4?length$z:magic,"."until/m/' $f ; \
echo; done
 [reply] [d/l] [select] 

 [reply] 
