huffify 0.1.0 → 0.1.2
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.
Potentially problematic release.
This version of huffify might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/lib/huffify/version.rb +1 -1
- data/lib/huffify.rb +6 -8
- data/sig/huffify.rbs +5 -5
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 845609542a9ee0c5c71059d998828ab7b6d88f2f50c1b9be019c4dd53eff2bea
|
|
4
|
+
data.tar.gz: 0a5b18ee7ca29489c9bda0e83858207e86eb24aea1e2524e1f6ff3f37fb68998
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 042cb5b5c293462af59d837ffa680b82761590ffb5cc2afd4938d88bec14afa7fa86214c9aacee0d91cc0669790f424e7263066f8947b41a74f001739f4f0cf4
|
|
7
|
+
data.tar.gz: 1dae9271c9da5dc6503d5259e518055e0be643e45bf469493a4abfbaeb4011a433c3c230f9ff457b8e882b59898966168461749a7c8973baf68432a96209bd54
|
data/lib/huffify/version.rb
CHANGED
data/lib/huffify.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
require 'pqueue'
|
|
3
|
-
require_relative "
|
|
3
|
+
require_relative "huffify/version"
|
|
4
4
|
|
|
5
5
|
module Huffify
|
|
6
6
|
class HuffNode
|
|
@@ -14,13 +14,13 @@ module Huffify
|
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
def encode(text)
|
|
17
|
+
def self.encode(text)
|
|
18
18
|
huffman_tree = build_huffman_tree(text)
|
|
19
19
|
codes = get_char_codes(huffman_tree)
|
|
20
20
|
{ encoded_text: text.each_char.map { |char| codes[char] }.join, huffman_tree: huffman_tree }
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
-
def decode(bits, huffman_tree)
|
|
23
|
+
def self.decode(bits, huffman_tree)
|
|
24
24
|
text = ""
|
|
25
25
|
cur_node = huffman_tree
|
|
26
26
|
bits.each_char do |bit|
|
|
@@ -33,15 +33,13 @@ module Huffify
|
|
|
33
33
|
text
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
def create_occurrences_map(text)
|
|
36
|
+
private_class_method def self.create_occurrences_map(text)
|
|
39
37
|
occurrences_map = Hash.new(0)
|
|
40
38
|
text.each_char { |char| occurrences_map[char] += 1 }
|
|
41
39
|
occurrences_map
|
|
42
40
|
end
|
|
43
41
|
|
|
44
|
-
def build_huffman_tree(text)
|
|
42
|
+
private_class_method def self.build_huffman_tree(text)
|
|
45
43
|
occurrences_map = create_occurrences_map(text)
|
|
46
44
|
pq = PQueue.new { |a, b| a.frequency < b.frequency }
|
|
47
45
|
occurrences_map.each { |char, count| pq.push(HuffNode.new(char, count)) }
|
|
@@ -52,7 +50,7 @@ module Huffify
|
|
|
52
50
|
pq.pop
|
|
53
51
|
end
|
|
54
52
|
|
|
55
|
-
def get_char_codes(node, code = '', codes = {})
|
|
53
|
+
private_class_method def self.get_char_codes(node, code = '', codes = {})
|
|
56
54
|
if node.char
|
|
57
55
|
codes[node.char] = code
|
|
58
56
|
else
|
data/sig/huffify.rbs
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
module Huffify
|
|
2
2
|
VERSION: String
|
|
3
3
|
|
|
4
|
-
def encode: (String text) -> Hash[Symbol, HuffNode | String]
|
|
5
|
-
def decode: (String bits, HuffNode tree) -> String
|
|
4
|
+
def self.encode: (String text) -> Hash[Symbol, HuffNode | String]
|
|
5
|
+
def self.decode: (String bits, HuffNode tree) -> String
|
|
6
6
|
|
|
7
7
|
private
|
|
8
8
|
|
|
9
|
-
def build_huffman_tree: (String text) -> HuffNode
|
|
9
|
+
def self.build_huffman_tree: (String text) -> HuffNode
|
|
10
10
|
|
|
11
|
-
def create_occurrences_map: (String text) -> Hash[String, Integer]
|
|
11
|
+
def self.create_occurrences_map: (String text) -> Hash[String, Integer]
|
|
12
12
|
|
|
13
|
-
def get_char_codes: (HuffNode node, String code, Hash[String, String]) -> Hash[String, String]
|
|
13
|
+
def self.get_char_codes: (HuffNode node, String code, Hash[String, String]) -> Hash[String, String]
|
|
14
14
|
end
|