Skip to content

Instantly share code, notes, and snippets.

@timanglade
Created April 5, 2010 21:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save timanglade/356951 to your computer and use it in GitHub Desktop.
Save timanglade/356951 to your computer and use it in GitHub Desktop.
A Morse decoder/encoder
# Morse Decoder / Encoder
#
# Originally from http://refactormycode.com/codes/513-morse-code-encoder-decoder
# With modifications.
# Uploaded & shared for the purpose of a class at UMLV.
module Morse
$LETTER = 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 --..
/]
$CODE = $LETTER.invert
def self.encode(message)
encoded_message = []
words = message.split(" ")
words.each do |word|
encoded_word = ""
word.split(//).each do |letter|
if $LETTER.has_key?(letter.upcase)
encoded_word << $LETTER[letter.upcase]
encoded_word << " "
end
end
encoded_message << encoded_word
end
return encoded_message.join("| ")
end
def self.decode(message)
decoded_message = ""
words = message.split("|")
words.each do |word|
word.split(/\s/).each do |letter|
if $CODE.has_key?(letter)
decoded_message << $CODE[letter]
end
end
decoded_message << " "
end
decoded_message
end
def self.encode_file(f)
File.open(f).each do |line|
encode(line)
end
end
def self.decode_file(f)
File.open(f).each do |line|
decode(line)
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment