Morse code to standard output This question involves taking input in Morse code as . (period) and - (minus symbol), with spaces to separate the input.  Your task is to convert the code to standard output.  You can assume that the only input contains character symbols found in the International Morse Code alphabet, found here: http://en.wikipedia.org/wiki/Morse_code#Letters.2C_numbers.2C_punctuation.

All output should use lowercase letters. A double space should be interpreted as a word space.

Sample input:

. -..- .- -- .--. .-.. . .-.-.-  ... --- ...


Output:

example. sos


Shortest code after two weeks wins.
Drat, I was hoping to get here before the GolfScripters arrived :-(
Anyhoo...
C: 228 characters:
char n,t,m[9],*c=&quot; etianmsurwdkgohvf l pjbxcyzq  54 3   2&amp; +    16=/   ( 7   8 90    $       ?_    \&quot;  .    @   '  -        ;! )     ,    :&quot;;
main(){while(scanf(&quot;%s&quot;,m)&gt;0){for(t=m[6]=n=0;m[n];n++)t+=t+1+(m[n]&amp;1);putchar(c[t]);}}


I thought I'd add an explanation of how this works.
The input data is parsed according to the tree data in *c, which can be expanded as follows (using · to represent a vacant node):
                     dot &lt;-- (start) --&gt; dash
                e                               t
        i               a               n               m
    s       u       r       w       d       k       g       o
  h   v   f   ·   l   ·   p   j   b   x   c   y   z   q   ·   ·
 5 4 · 3 · · · 2 &amp; · + · · · · 1 6 = / · · · ( · 7 · · · 8 · 9 0
····$·······?_····&quot;··.····@···'··-········;!·)·····,····:·······

Starting at the top of the tree, work your way down while moving to the left for a dot and to the right  for a dash. Then output whatever character you happen to be at when the input string ends (i.e., when a whitespace character is encountered). So for example, three dots and a dash will take you to v via e, i and s. Instead of explicitly checking for dots (ASCII \x2e) and dashes (ASCII \x2d), we only need to check the last bit (m[n]&amp;1), which is 0 for . and 1 for -.
Six rows are enough to encode everything except $, which has 7 dot/dashes: ...-..-, but since the input data is guaranteed to be valid, this can easily be fixed by truncating the input at 6 characters (m[6]=0) and interpreting ...-.. as $ instead. We can also cut away the last 7 bytes from the tree data, since they are all empty and aren't needed if the input is valid.