From: Paul Novak Date: 2007-04-24T03:15:06+09:00 Subject: Re: Morse Code (#121) Thanks for another fun rubyquiz! I don't think my solution has any unusual features, but I love it that I could directly paste the mappings in from the problem description! Regards, Paul #!/usr/bin/ruby # a lazy way to convert pasted-on text from problem into a Hash $morse = Hash[*%w{ A .- N -. B -... O --- C -.-. P .--. D -.. Q --.- E . R .-. F ..-. S ... G --. T - H .... U ..- I .. V ...- J .--- W .-- K -.- X -..- L .-.. Y -.-- M -- Z --.. }] # convert dashes and dots to regexen to match each code at beginning of line # gotta love it when Ruby let's you convert documentation to code! $morse.each_pair { |k,v| $morse[k] = Regexp.new("^(%s)(.*)" % Regexp.escape(v))} def parse(code, parsed_so_far) if code=="" p parsed_so_far else $morse.each_pair do |k,v| m = v.match( code).to_a if m.length>0 parse(m[2], parsed_so_far + k) end end end end parse(ARGV[0],"")