-
Notifications
You must be signed in to change notification settings - Fork 3
/
Morse Code.js
83 lines (78 loc) · 3.17 KB
/
Morse Code.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
class MorseCodeTranslator {
constructor() {
this.morseCodeMap = {
'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': '----.',
'.': '.-.-.-', ',': '--..--', '?': '..--..', "'": '.----.', '!': '-.-.--', '/': '-..-.', '(': '-.--.', ')': '-.--.-', '&': '.-...',
':': '---...', ';': '-.-.-.', '=': '-...-', '+': '.-.-.', '-': '-....-', '_': '..--.-', '"': '.-..-.', '$': '...-..-', '@': '.--.-.',
' ': '/'
};
this.reverseMorseCodeMap = {};
for (const key in this.morseCodeMap) {
if (this.morseCodeMap.hasOwnProperty(key)) {
this.reverseMorseCodeMap[this.morseCodeMap[key]] = key;
}
}
}
getInfo() {
return {
id: 'morsecode',
name: 'Morse Code Translator',
blocks: [
{
opcode: 'textToMorseCode',
blockType: 'reporter',
text: 'translate [text] to Morse code',
arguments: {
text: {
type: 'string',
defaultValue: 'Hello'
}
}
},
{
opcode: 'morseCodeToText',
blockType: 'reporter',
text: 'translate [morseCode] to text',
arguments: {
morseCode: {
type: 'string',
defaultValue: '. .-.. .-.. ---'
}
}
}
]
};
}
textToMorseCode(args) {
const text = args.text.toUpperCase();
let morseCode = '';
for (let i = 0; i < text.length; i++) {
const character = text[i];
if (this.morseCodeMap.hasOwnProperty(character)) {
morseCode += this.morseCodeMap[character] + ' ';
}
}
return morseCode.trim();
}
morseCodeToText(args) {
const morseCode = args.morseCode.trim();
const morseCodeWords = morseCode.split(' / ');
let text = '';
for (let i = 0; i < morseCodeWords.length; i++) {
const morseCodeWord = morseCodeWords[i];
const morseCodeChars = morseCodeWord.split(' ');
for (let j = 0; j < morseCodeChars.length; j++) {
const morseCodeChar = morseCodeChars[j];
if (this.reverseMorseCodeMap.hasOwnProperty(morseCodeChar)) {
text += this.reverseMorseCodeMap[morseCodeChar];
}
}
text += ' ';
}
return text.trim();
}
}
Scratch.extensions.register(new MorseCodeTranslator());