Please Forward: Ruby Quiz Submission

From: "Stuart Holden" <Stuart.Holden@barings.com>
Date: April 23, 2007 4:55:28 AM CDT
To: <submission@rubyquiz.com>
Subject: Please Forward: Ruby Quiz Submission

# [RubyQuiz:121 - MorseCode]

#

# Recursive solution with a little bit of caching...

require 'memoize'

include Memoize

ENCODINGS = {

  'A' => '.-', 'B' => '-...', 'C' => '-.-.', 'D' => '-..', 'E' => '.',

  'F' => '..-.', 'G' => '--.', 'H' => '....', 'I' => '..', 'J' => '.---',

  'K' => '-.-', 'L' => '.-..', 'M' => '--', 'N' => '-.', 'O' => '---',

  'P' => '.--.', 'Q' => '--.-', 'R' => '.-.', 'S' => '...', 'T' => '-',

  'U' => '..-', 'V' => '...-', 'W' => '.--', 'X' => '-..-', 'Y' => '-.--',

  'Z' => '--..'

}

class String

  def starts_with? s

    return self[0...s.length] == s

  end

end

def next_steps(code)

  #-- Find eligible steps, return the decoded character and the remaining morse

  ENCODINGS.select { |alpha_char, morse_char| code.starts_with?(morse_char) }.map do | (alpha_char, morse_char) |

    [alpha_char, code.sub(morse_char, "")]

  end

end

def decodings(code)

  retval =

  #-- Base: nothing to decode -> return empty string

  if (code == "")

    retval << ""

  else

    #-- Step: Process each possible char-tail tuple, recurse on the tail to construct all possible words...

    next_steps(code).each do |head, tail|

      decodings(tail).each do |plaintext|

        retval << (head + plaintext)

      end

    end

  end

  retval

end

memoize(:next_steps, 'ns.dat') #-- Performance boost when repeatedly checking the same tails.

puts "Please enter some morse code... "

input=gets.chomp

decodings(input).sort.each do |word|

  breakdown = word.split("").map {|alpha_char| ENCODINGS[alpha_char] }.join("|")

  puts "#{word} -> #{breakdown}"

end

This Email may contain confidential and privileged information and is intended for the use of the addressee(s) only. If you are not the intended recipient please notify the sender and delete the Email from your system. It should not be transmitted to any other person without the consent of the sender. Additional important notifications regarding Email transmissions from and to members of Baring Asset Management can be accessed at http://www.barings.com/email/index.hcst

______________________________________________________________________
This email has been scanned by the MessageLabs Email Security System.
For more information please visit Email Security
______________________________________________________________________

···

Begin forwarded message: