Convert text to Morse Code

From CodeCodex

Contents

[edit] Implementations

[edit] D


import std.stdio, std.string;

string[char] map;

static this() {
        string codes = "--..-- .-.-.- ----- .---- ..--- ...-- ....- ..... -.... --...
        ---.. ----. ..--.. .- -... -.-. -... . ..-. --. .... .. .--- -.-
        .-.. -- -. --- .--. --.- .-. ... - ..- ...- .-- -..- -.-- --..";
        foreach(i, code; codes.split())
        map[",.0123456789?abcdefghijklmnopqrstuvwxyz"[i]] = code;
}

string toMorse(string txt) {
        string[] parts;
        foreach(c; txt.tolower())
        parts ~= c in map ? map[c] : toString(c);
        return parts.join(" ");
}

void main() {
        writefln(toMorse("How are you?"));
}

[edit] Java


private String charToMorse(char c) {
        switch(c) {
                case 'a': case 'A':
                return ".-";
                case 'b': case 'B':
                return "-...";
                case 'c': case 'C':
                return "-.-.";
                case 'd': case 'D':
                return "--..";
                case 'e': case 'E':
                return ".";
                case 'f': case 'F':
                return "..-.";
                case 'g': case 'G':
                return "--.";
                case 'h': case 'H':
                return "....";
                case 'i': case 'I':
                return "..";
                case 'j': case 'J':
                return ".---";
                case 'k': case 'K':
                return "-.-";
                case 'l': case 'L':
                return ".-..";
                case 'm': case 'M':
                return "--";
                case 'n': case 'N':
                return "-.";
                case 'o': case 'O':
                return "---";
                case 'p': case 'P':
                return ".--.";
                case 'q': case 'Q':
                return "--.-";
                case 'r': case 'R':
                return ".-.";
                case 's': case 'S':
                return "...";
                case 't': case 'T':
                return "-";
                case 'u': case 'U':
                return "..-";
                case 'v': case 'V':
                return "...-";
                case 'w': case 'W':
                return ".--";
                case 'x': case 'X':
                return "-..-";
                case 'y': case 'Y':
                return "-.--";
                case 'z': case 'Z':
                return "--..";
                case '0':
                return "-----";
                case '1':
                return ".----";
                case '2':
                return "..---";
                case '3':
                return "...--";
                case '4':
                return "....-";
                case '5':
                return ".....";
                case '6':
                return "-....";
                case '7':
                return "--...";
                case '8':
                return "---..";
                case '9':
                return "----.";
                case '.':
                return ".-.-.-";
                case '?':
                return "..--..";
                case ',':
                return "--..--";
                case ' ':
                return " ";
                default:
                return null;
        }

}

[edit] OCaml

# let morse = function
    | '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' -> "--.." | '0' -> "-----" | '1' -> ".----" | '2' -> "..---"
    | '3' -> "...--" | '4' -> "....-" | '5' -> "....." | '6' -> "-...."
    | '7' -> "--..." | '8' -> "---.." | '9' -> "----." | '.' -> ".-.-.-"
    | '?' -> "..--.." | ',' -> "--..--" | ' ' -> " " | _ -> "";;
val morse : char -> string = <fun>

For example:

# String.iter (fun c -> print_string (morse c)) "Hello world";;
..-...-..--- .-----.-..-..-...

[edit] Perl


use Convert::Morse qw(as_morse);
as_morse $str;

[edit] PHP

function toMorse($c){
   switch($c) {
        case 'a': case 'A':
            return ".-";
        case 'b': case 'B':
            return "-...";
        case 'c': case 'C':
            return "-.-.";
        case 'd': case 'D':
            return "-...";
        case 'e': case 'E':
            return ".";
        case 'f': case 'F':
            return "..-.";
        case 'g': case 'G':
            return "--.";
        case 'h': case 'H':
            return "....";
        case 'i': case 'I':
            return "..";
        case 'j': case 'J':
            return ".---";
        case 'k': case 'K':
            return "-.-";
        case 'l': case 'L':
            return ".-..";
        case 'm': case 'M':
            return "--";
        case 'n': case 'N':
            return "-.";
        case 'o': case 'O':
            return "---";
        case 'p': case 'P':
            return ".--.";
        case 'q': case 'Q':
            return "--.-";
        case 'r': case 'R':
            return ".-.";
        case 's': case 'S':
            return "...";
        case 't': case 'T':
            return "-";
        case 'u': case 'U':
            return "..-";
        case 'v': case 'V':
            return "...-";
        case 'w': case 'W':
            return ".--";
        case 'x': case 'X':
            return "-..-";
        case 'y': case 'Y':
            return "-.--";
        case 'z': case 'Z':
            return "--..";
        case '0':
            return "-----";
        case '1':
            return ".----";
        case '2':
            return "..---";
        case '3':
            return "...--";
        case '4':
            return "....-";
        case '5':
            return ".....";
        case '6':
            return "-....";
        case '7':
            return "--...";
        case '8':
            return "---..";
        case '9':
            return "----.";
        case '.':
            return ".-.-.-";
        case '?':
            return "..--..";
        case ',':
            return "--..--";
        case ' ':
            return " ";
        default:
            return "";
    }
}

[edit] Python


chars = ",.0123456789?abcdefghijklmnopqrstuvwxyz"
codes = """--..-- .-.-.- ----- .---- ..--- ...-- ....- ..... -.... --... ---..
           ----. ..--.. .- -... -.-. -... . ..-. --. .... .. .--- -.- .-.. --
           -. --- .--. --.- .-. ... - ..- ...- .-- -..- -.-- --.."""
keys = dict(zip(chars, codes.split()))

def char2morse(char):
    return keys.get(char.lower(), char)

print ' '.join(char2morse(c) for c in 'SOS')

[edit] Ruby

chars = ",.0123456789?abcdefghijklmnopqrstuvwxyz"
codes = %w(--..-- .-.-.- ----- .---- ..--- ...-- ....- ..... -.... --... ---..
           ----. ..--.. .- -... -.-. -... . ..-. --. .... .. .--- -.- .-.. --
           -. --- .--. --.- .-. ... - ..- ...- .-- -..- -.-- --..)

MORSE = Hash[chars.split("").zip(codes)]
MORSE.default=" "

def char2morse(chars)
  chars.downcase.split("").map{|c|MORSE[c]}.join(" ")
end

p char2morse("How are you?")

[edit] Seed7

const func string: charToMorse (in char: ch) is func
  result
    var string: result is "";
  begin
    case ch of
      when {'a', 'A'}: result := ".-";
      when {'b', 'B'}: result := "-...";
      when {'c', 'C'}: result := "-.-.";
      when {'d', 'D'}: result := "-..";
      when {'e', 'E'}: result := ".";
      when {'f', 'F'}: result := "..-.";
      when {'g', 'G'}: result := "--.";
      when {'h', 'H'}: result := "....";
      when {'i', 'I'}: result := "..";
      when {'j', 'J'}: result := ".---";
      when {'k', 'K'}: result := "-.-";
      when {'l', 'L'}: result := ".-..";
      when {'m', 'M'}: result := "--";
      when {'n', 'N'}: result := "-.";
      when {'o', 'O'}: result := "---";
      when {'p', 'P'}: result := ".--.";
      when {'q', 'Q'}: result := "--.-";
      when {'r', 'R'}: result := ".-.";
      when {'s', 'S'}: result := "...";
      when {'t', 'T'}: result := "-";
      when {'u', 'U'}: result := "..-";
      when {'v', 'V'}: result := "...-";
      when {'w', 'W'}: result := ".--";
      when {'x', 'X'}: result := "-..-";
      when {'y', 'Y'}: result := "-.--";
      when {'z', 'Z'}: result := "--..";
      when {'0'}:      result := "-----";
      when {'1'}:      result := ".----";
      when {'2'}:      result := "..---";
      when {'3'}:      result := "...--";
      when {'4'}:      result := "....-";
      when {'5'}:      result := ".....";
      when {'6'}:      result := "-....";
      when {'7'}:      result := "--...";
      when {'8'}:      result := "---..";
      when {'9'}:      result := "----.";
      when {'!'}:      result := "-.-.--";
      when {'"'}:      result := ".-..-.";
      when {'$'}:      result := "...-..-";
      when {'''}:      result := ".----.";
      when {'('}:      result := "-.--.";
      when {')'}:      result := "-.--.-";
      when {'+'}:      result := ".-.-.";
      when {','}:      result := "--..--";
      when {'-'}:      result := "-....-";
      when {'.'}:      result := ".-.-.-";
      when {'/'}:      result := "-..-.";
      when {':'}:      result := "---...";
      when {';'}:      result := "-.-.-.";
      when {'='}:      result := "-...-";
      when {'?'}:      result := "..--..";
      when {'@'}:      result := ".--.-.";
      when {' '}:      result := " ";
    end case;
  end func;

const func string: stringToMorse (in string: stri) is func
  result
    var string: result is "";
  local
    var char: ch is ' ';
  begin
    for ch range stri do
      result &:= charToMorse(ch) & " ";
    end for;
  end func;