-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmorse.ex
More file actions
72 lines (64 loc) · 2.68 KB
/
Copy pathmorse.ex
File metadata and controls
72 lines (64 loc) · 2.68 KB
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
defmodule Morse do
def test() do
signal = '... --- ... '
decode(signal)
end
def decode(signal) do
table = decode_table()
decode(signal, table, table)
end
## Fill in the empty ... spaces
def decode([], _, _) do [] end
def decode([?- | rest], {:node, char, long, short}, table) do
decode(rest, long, table)
end
def decode([?. | rest], {:node, char, long, short}, table) do
decode(rest, short, table)
end
def decode([?\s | rest], {:node, char, long, short}, table) do
[char | decode(rest, table, table)]
end
# Some test samples to decode, a signal must end with a space ' '
def base(), do: '.- .-.. .-.. ..-- -.-- --- ..- .-. ..-- -... .- ... . ..-- .- .-. . ..-- -... . .-.. --- -. --. ..-- - --- ..-- ..- ... '
def rolled(), do: '.... - - .--. ... ---... .----- .----- .-- .-- .-- .-.-.- -.-- --- ..- - ..- -... . .-.-.- -.-. --- -- .----- .-- .- - -.-. .... ..--.. ...- .----. -.. .--.-- ..... .---- .-- ....- .-- ----. .--.-- ..... --... --. .--.-- ..... ---.. -.-. .--.-- ..... .---- '
# Morse decoding tree as {:node, char, long, short}
defp decode_table do
{:node, :na,
{:node, 116,
{:node, 109,
{:node, 111,
{:node, :na, {:node, 48, nil, nil}, {:node, 57, nil, nil}},
{:node, :na, nil, {:node, 56, nil, {:node, 58, nil, nil}}}},
{:node, 103,
{:node, 113, nil, nil},
{:node, 122,
{:node, :na, {:node, 44, nil, nil}, nil},
{:node, 55, nil, nil}}}},
{:node, 110,
{:node, 107, {:node, 121, nil, nil}, {:node, 99, nil, nil}},
{:node, 100,
{:node, 120, nil, nil},
{:node, 98, nil, {:node, 54, {:node, 45, nil, nil}, nil}}}}},
{:node, 101,
{:node, 97,
{:node, 119,
{:node, 106,
{:node, 49, {:node, 47, nil, nil}, {:node, 61, nil, nil}},
nil},
{:node, 112,
{:node, :na, {:node, 37, nil, nil}, {:node, 64, nil, nil}},
nil}},
{:node, 114,
{:node, :na, nil, {:node, :na, {:node, 46, nil, nil}, nil}},
{:node, 108, nil, nil}}},
{:node, 105,
{:node, 117,
{:node, 32,
{:node, 50, nil, nil},
{:node, :na, nil, {:node, 63, nil, nil}}},
{:node, 102, nil, nil}},
{:node, 115,
{:node, 118, {:node, 51, nil, nil}, nil},
{:node, 104, {:node, 52, nil, nil}, {:node, 53, nil, nil}}}}}}
end
end