Morse Code Decoder
open System
let morseTable() : Map<string, string> =
[|
("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","-----");
("?","..--..");
("/","-..-.");
("-","-....-");
(".",".-.-.-");
|]
|> Map.ofArray
|> (fun map -> Map.fold (fun (mores : Map<string, string>) key value -> mores.Add(value, key)) Map.empty map)
let MorseCodeDecode (input : string) =
[for i in input.Trim().Replace('/',' ').Split(' ') do yield morseTable().[i]]
|> List.fold (+) ""
|> Console.WriteLine
[<EntryPoint>]
let main argv=
if argv.Length <> 0 then
argv.[0]
|> MorseCodeDecode
else
"Morse Code Decoder"
|> Console.WriteLine
while true do
Console.ReadLine()
|> MorseCodeDecode
0