Skip to content

Instantly share code, notes, and snippets.

Created January 13, 2011 00:22
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/777160 to your computer and use it in GitHub Desktop.
Save anonymous/777160 to your computer and use it in GitHub Desktop.
ftfy
#!/usr/bin/env ruby
# MSPA morse code converter
# Usage:
# giles [Wed Jan 12 16:21:03 PST 2011] ~/bin/morse
# -> ruby mspa.rb ".-- .... .- - / .- / -.. .- .-. .. -. --. / -.. .-. . .- --"
# W H A T / A / D A R I N G / D R E A M
MORSE = {
".-" => "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",
".----" => "1",
"..---" => "2",
"...--" => "3",
"....-" => "4",
"....." => "5",
"-...." => "6",
"--..." => "7",
"---.." => "8",
"----." => "9",
"-----" => "0"
}
examples = {
".-- .... .- - / .- / -.. .- .-. .. -. --. / -.. .-. . .- --" => " W H A T / A / D A R I N G / D R E A M ",
"- --- / -.-. --- -- -... .. -. . / - .... . / ..-. .. -. . ... - / --.- ..- .- .-.. .. - .. . ... / --- ..-. / .... ..- -- .- -. .. - -.-- / .-- .. - .... / - .... . / . .-.. . --. .- -. -.-. . / .- -. -.. / -. --- -... .. .-.. .. - -.-- / --- ..-. / - .... . / .- -. .. -- .- .-.. / -.- .. -. --. -.. --- --" => " T O / C O M B I N E / T H E / F I N E S T / Q U A L I T I E S / O F / H U M A N I T Y / W I T H / T H E / E L E G A N C E / A N D / N O B I L I T Y / O F / T H E / A N I M A L / K I N G D O M ",
".... --- .-- / -.-- --- ..- / .-- .. ... .... / -.-- --- ..- / -.-. --- ..- .-.. -.. / -.- -. --- .-- / - .... . .. .-. / .-- --- .-. .-.. -.." => " H O W / Y O U / W I S H / Y O U / C O U L D / K N O W / T H E I R / W O R L D ",
"- --- / .... . .- .-. / --- -. . / -. .. --. .... - / - .... --- ... . / -- ..- - . -.. / .--. .- .-- .--. .- -.. ... / - .-. .- .. .--. ... . / ..- .--. / -.-- --- ..- .-. / ... - .- .. .-. ..." => " T O / H E A R / O N E / N I G H T / T H O S E / M U T E D / P A W P A D S / T R A I P S E / U P / Y O U R / S T A I R S ",
".- / .-.. --- .-- / -... ..- - / ..-. .-. .. . -. -.. .-.. -.-- / --. .-. --- .-- .-.. / ..- -. ... . - - .-.. . ... / -.-- --- ..- .-. / ... .-.. ..- -- -... . .-." => " A / L O W / B U T / F R I E N D L Y / G R O W L / U N S E T T L E S / Y O U R / S L U M B E R ",
".- -. -.. / .- ... / - .... . / ... --- .--. --- .-. / ... . . .--. ... / ..-. .-. --- -- / -.-- --- ..- .-. / . -.-- . ..." => " A N D / A S / T H E / S O P O R / S E E P S / F R O M / Y O U R / E Y E S ",
"- .... . -.-- / -.. . - . -.-. - / .- / ... .... .- .-. .--. / .--. .- .. .-. / --- ..-. / . .- .-. ... / -.-. ..- - - .. -. --. / -- --- --- -. .-.. .. --. .... -" => " T H E Y / D E T E C T / A / S H A R P / P A I R / O F / E A R S / C U T T I N G / M O O N L I G H T ",
".- / -- -.-- ... - . .-. .. --- ..- ... / .-- --- .-.. ...- . -. / - --- -. --. ..- . / .. -. ...- .. - . ..." => " A / M Y S T E R I O U S / W O L V E N / T O N G U E / I N V I T E S "
}
def decode(madness)
madness = " #{madness} "
MORSE.each do |code, decode|
code = code.gsub(/\./, "\\.")
r = Regexp.new "(\s+)#{code}(\s+)"
2.times {madness.gsub! r, " #{decode} "}
end
madness
end
examples.each do |key, value|
abort "ghetto unit test failed" unless decode(key) == value
end
puts decode(ARGV[0])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment