/
decodeMorse.js
88 lines (84 loc) · 1.55 KB
/
decodeMorse.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
const MORSE_CODE = {
"-.-.--": "!",
".-..-.": '"',
"...-..-": "$",
".-...": "&",
".----.": "'",
"-.--.": "(",
"-.--.-": ")",
".-.-.": "+",
"--..--": ",",
"-....-": "-",
".-.-.-": ".",
"-..-.": "/",
"-----": "0",
".----": "1",
"..---": "2",
"...--": "3",
"....-": "4",
".....": "5",
"-....": "6",
"--...": "7",
"---..": "8",
"----.": "9",
"---...": ":",
"-.-.-.": ";",
"-...-": "=",
"..--..": "?",
".--.-.": "@",
".-": "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",
"..--.-": "_",
"...---...": "SOS",
"": " ",
};
/**
* @param {string} morseCode input
*/
decodeMorse = function (morseCode) {
let cutMorse = morseCode.trim().split(" "); // array of words
let transMorse = cutMorse.map(translateWord);
return transMorse.join(" ");
};
/**
* @param {string} word
*/
function translateWord(word) {
return word
.split(" ")
.map((letter) => MORSE_CODE[letter])
.join("");
}
const { assert } = require("chai");
describe("Sample tests", function () {
it("Example from description", () => {
assert.strictEqual(decodeMorse(".... . -.-- .--- ..- -.. ."), "HEY JUDE");
});
it("Leading and trailing spaces", () => {
assert.strictEqual(decodeMorse(" .... . -.-- "), "HEY");
});
});