code_morse 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/code_morse.rb +22 -0
- data/lib/morse/chars.rb +51 -0
- data/lib/morse/tree.rb +72 -0
- data/lib/morsify.rb +7 -0
- metadata +47 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 1a42a31e170a1f9c77ad2c0bf69e002e2b70f058
|
|
4
|
+
data.tar.gz: 959d75b69902d90d8157f2928975ca50695f079e
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 473fa228dc934c6424cbf86918938541846aa7800dbb8aaf5c52143c18fad8dc8c59d74b3a2df4c699b3769de16e89bd6cd7dc219333af2dc57d707c7567e87d
|
|
7
|
+
data.tar.gz: 022b8fd5e4bccc4e93c5cc1e71ac53e08af0fdfa0cf9cd3ab100f35bf523a267fce9a5029fc4eaf3c4d5bb39ca5835eaa96cae28a50b1de28d076f9669479039
|
data/lib/code_morse.rb
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require_relative './morse/chars'
|
|
2
|
+
require_relative './morse/tree'
|
|
3
|
+
require_relative './morsify'
|
|
4
|
+
|
|
5
|
+
at_exit { puts("\nbye bye!") }
|
|
6
|
+
|
|
7
|
+
resp = []
|
|
8
|
+
|
|
9
|
+
morse_tree = Morse::Tree.new
|
|
10
|
+
morse_tree.learn(MORSE_CHARS)
|
|
11
|
+
|
|
12
|
+
# TODO: wrap morse characters in sigle string
|
|
13
|
+
|
|
14
|
+
ARGV.each do |param|
|
|
15
|
+
if param =~ /\w/
|
|
16
|
+
resp.push(Morsify.new.call(param))
|
|
17
|
+
else # TODO: add regex for recognizing morse code only
|
|
18
|
+
resp.push(morse_tree.humanize(param))
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
puts(resp.join(' '))
|
data/lib/morse/chars.rb
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
MORSE_CHARS = {
|
|
2
|
+
'a' => '.-',
|
|
3
|
+
'b' => '-...',
|
|
4
|
+
'c' => '-.-.',
|
|
5
|
+
'd' => '-..',
|
|
6
|
+
'e' => '.',
|
|
7
|
+
'f' => '..-.',
|
|
8
|
+
'g' => '--.',
|
|
9
|
+
'h' => '....',
|
|
10
|
+
'i' => '..',
|
|
11
|
+
'j' => '.---',
|
|
12
|
+
'k' => '-.-',
|
|
13
|
+
'l' => '.-..',
|
|
14
|
+
'm' => '--',
|
|
15
|
+
'n' => '-.',
|
|
16
|
+
'o' => '---',
|
|
17
|
+
'p' => '.--.',
|
|
18
|
+
'q' => '--.-',
|
|
19
|
+
'r' => '.-.',
|
|
20
|
+
's' => '...',
|
|
21
|
+
't' => '-',
|
|
22
|
+
'u' => '..-',
|
|
23
|
+
'v' => '...-',
|
|
24
|
+
'w' => '.--',
|
|
25
|
+
'x' => '-..-',
|
|
26
|
+
'y' => '-.--',
|
|
27
|
+
'z' => '--..',
|
|
28
|
+
'0' => '-----',
|
|
29
|
+
'1' => '.----',
|
|
30
|
+
'2' => '..---',
|
|
31
|
+
'3' => '...--',
|
|
32
|
+
'4' => '....-',
|
|
33
|
+
'5' => '.....',
|
|
34
|
+
'6' => '-....',
|
|
35
|
+
'7' => '--...',
|
|
36
|
+
'8' => '---..',
|
|
37
|
+
'9' => '----.',
|
|
38
|
+
'?' => '..--..',
|
|
39
|
+
'_' => '..--.-',
|
|
40
|
+
'"' => '.-..-.',
|
|
41
|
+
'.' => '.-.-.-',
|
|
42
|
+
'+' => '.-.-.',
|
|
43
|
+
'@' => '.--.-.',
|
|
44
|
+
"'" => '.----.',
|
|
45
|
+
'-' => '-....-',
|
|
46
|
+
'=' => '-...-',
|
|
47
|
+
'/' => '-..-.',
|
|
48
|
+
';' => '-.-.-.',
|
|
49
|
+
'!' => '-.-.--',
|
|
50
|
+
',' => '--..--'
|
|
51
|
+
}
|
data/lib/morse/tree.rb
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
module Morse
|
|
2
|
+
MORSE_RUBY_ADAPTER = { '.' => :dot, '-' => :dash, ' ' => :break }
|
|
3
|
+
|
|
4
|
+
class Tree
|
|
5
|
+
attr_reader :root
|
|
6
|
+
|
|
7
|
+
def initialize
|
|
8
|
+
@root = Node.new(nil, ' ')
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def learn(morse_table = {})
|
|
12
|
+
morse_table.each do |letter,morse|
|
|
13
|
+
@root = push_recursively(@root, letter, morse, 0)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def humanize(morse_string)
|
|
18
|
+
out = get_recursively(morse_string, @root)
|
|
19
|
+
out
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
def push_recursively(node, letter, morse, index)
|
|
25
|
+
morse_char = morse[index]
|
|
26
|
+
node = Node.new(@root) if node.nil?
|
|
27
|
+
if index < morse.length
|
|
28
|
+
node.send("#{mra[morse_char]}=", push_recursively(node.send("#{mra[morse_char]}"), letter, morse, index+1))
|
|
29
|
+
else
|
|
30
|
+
node.value = letter
|
|
31
|
+
end
|
|
32
|
+
node
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def get_recursively(morse_string = '', node = nil, letters = [], index = 0)
|
|
36
|
+
# "... --- ... ... --- ..."
|
|
37
|
+
node = @root if node.nil?
|
|
38
|
+
char = morse_string[index]
|
|
39
|
+
|
|
40
|
+
letters.push(node.value) if char == ' '
|
|
41
|
+
|
|
42
|
+
if index < morse_string.length
|
|
43
|
+
node = node.send("#{mra[char]}")
|
|
44
|
+
get_recursively(morse_string, node, letters, index+1)
|
|
45
|
+
else
|
|
46
|
+
letters.push(node.value)
|
|
47
|
+
letters.join()
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
rescue => e
|
|
51
|
+
p(e)
|
|
52
|
+
letters.join()
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def mra
|
|
56
|
+
MORSE_RUBY_ADAPTER
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
class Node
|
|
60
|
+
attr_accessor :value, :dot, :dash, :root
|
|
61
|
+
|
|
62
|
+
def initialize(root = nil, value = '')
|
|
63
|
+
@root = root
|
|
64
|
+
@value = value
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def break
|
|
68
|
+
@root || self
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
data/lib/morsify.rb
ADDED
metadata
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: code_morse
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Alex Miasoiedov
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2018-09-29 00:00:00.000000000 Z
|
|
12
|
+
dependencies: []
|
|
13
|
+
description: A simple 'Morse Code' back and forth converter.
|
|
14
|
+
email: alexmiasoiedov@gmail.com
|
|
15
|
+
executables: []
|
|
16
|
+
extensions: []
|
|
17
|
+
extra_rdoc_files: []
|
|
18
|
+
files:
|
|
19
|
+
- lib/code_morse.rb
|
|
20
|
+
- lib/morse/chars.rb
|
|
21
|
+
- lib/morse/tree.rb
|
|
22
|
+
- lib/morsify.rb
|
|
23
|
+
homepage: http://rubygems.org/AlexMiasoiedov/code_morse
|
|
24
|
+
licenses:
|
|
25
|
+
- MIT
|
|
26
|
+
metadata: {}
|
|
27
|
+
post_install_message:
|
|
28
|
+
rdoc_options: []
|
|
29
|
+
require_paths:
|
|
30
|
+
- lib
|
|
31
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
32
|
+
requirements:
|
|
33
|
+
- - ">="
|
|
34
|
+
- !ruby/object:Gem::Version
|
|
35
|
+
version: '0'
|
|
36
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ">="
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0'
|
|
41
|
+
requirements: []
|
|
42
|
+
rubyforge_project:
|
|
43
|
+
rubygems_version: 2.4.5.1
|
|
44
|
+
signing_key:
|
|
45
|
+
specification_version: 4
|
|
46
|
+
summary: ".... . .-.. .-.. --- -- --- .-. ... . -.-.--"
|
|
47
|
+
test_files: []
|