forked from TheAlgorithms/PHP
-
Notifications
You must be signed in to change notification settings - Fork 0
/
MorseCode.php
121 lines (117 loc) · 3.12 KB
/
MorseCode.php
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<?php
/**
* Encode text to Morse Code.
*
* @param string text to encode
* @return string encoded text
*/
function encode(string $text): string
{
$text = strtoupper($text); // Makes sure the string is uppercase
$MORSE_CODE = array( // Array containing morse code translations
"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" => "-----",
" " => "/"
);
$encodedText = ""; // Stores the encoded text
foreach (str_split($text) as $c) { // Going through each character
if (array_key_exists($c, $MORSE_CODE)) { // Checks if it is a valid character
$encodedText .= $MORSE_CODE[$c] . " "; // Appends the correct character
} else {
throw new \Exception("Invalid character: $c");
}
}
substr_replace($encodedText ,"", -1); // Removes trailing space
return $encodedText;
}
/**
* Decode Morse Code to text.
* @param string text to decode
*/
function decode(string $text): string
{
$MORSE_CODE = array( // An array containing morse code to text translations
".-" => "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",
"/" => " "
);
$decodedText = ""; // Stores the decoded text
foreach (explode(" ", $text) as $c) { // Going through each group
if (array_key_exists($c, $MORSE_CODE)) { // Checks if it is a valid character
$decodedText .= $MORSE_CODE[$c]; // Appends the correct character
} else {
if ($c) { // Makes sure that the string is not empty to prevent trailing spaces or extra spaces from breaking this
throw new \Exception("Invalid character: $c");
}
}
}
return $decodedText;
}