prefixtrie 0.0.0

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.
Files changed (5) hide show
  1. checksums.yaml +7 -0
  2. data/lib/csv_writer.rb +17 -0
  3. data/lib/node.rb +17 -0
  4. data/lib/prefixtrie.rb +87 -0
  5. metadata +45 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 9eb62db86c4cd3886fbb3f30ef4065eb59b5390878a9e57ac10ed98c4ec9cff9
4
+ data.tar.gz: 73c574492191df2e0cb27c6f3fd791589ffde3cd4a78b60c0af5ee5ca58a5271
5
+ SHA512:
6
+ metadata.gz: b9e3c91b0f178480dd001bf8388c9767bf3dac95bd5382209f88db0cc1b2580b6bf316395aef2ac35264873bc3e62cb710070f457453cdf6a4b015fa6531d3e7
7
+ data.tar.gz: c50b2432889951f885c2228e169177e178157653157ebfde726bd5b5b323a55f48b735f7476dbf2b52236fc1e508cc8cf12e5ae4aa36a31879f33f367671e1be
data/lib/csv_writer.rb ADDED
@@ -0,0 +1,17 @@
1
+ require 'csv'
2
+
3
+ class CSVreadandwrite
4
+ def initialize
5
+ @path = '../data.csv'
6
+ end
7
+
8
+ def write(word)
9
+ CSV.open(@path, 'a') do |csv|
10
+ csv << [word]
11
+ end
12
+ end
13
+
14
+ def read
15
+ CSV.read(@path)
16
+ end
17
+ end
data/lib/node.rb ADDED
@@ -0,0 +1,17 @@
1
+ $LOAD_PATH << "../prefix_trie"
2
+
3
+
4
+ class Node
5
+ attr_accessor :word, :value, :next
6
+
7
+ def initialize(value)
8
+ @value = value
9
+ @word = false
10
+ @next = []
11
+
12
+ end
13
+ end
14
+
15
+
16
+
17
+
data/lib/prefixtrie.rb ADDED
@@ -0,0 +1,87 @@
1
+ require_relative 'node'
2
+ require_relative 'csv_writer'
3
+
4
+ class PrefixTrie
5
+ attr_reader :root
6
+
7
+ def initialize
8
+ @root = Node.new("")
9
+ @container = CSVreadandwrite.new
10
+ end
11
+
12
+ def add_word(word)
13
+ base = root
14
+ word.each_char do |char|
15
+ if base.next.any? {|i| i.value == char}
16
+ child = base.next.find {|i| i.value == char}
17
+ base = child
18
+ else
19
+ child = Node.new(char)
20
+ base.next << child
21
+ base = child
22
+ end
23
+ end
24
+ base.word = true
25
+ end
26
+
27
+ def find_word(word)
28
+ base = root
29
+ word.each_char do |char|
30
+ if base.next.any? {|i| i.value == char}
31
+ base = base.next.find {|i| i.value == char}
32
+ else
33
+ return false
34
+ end
35
+ end
36
+ base
37
+ end
38
+
39
+
40
+ def include?(word)
41
+ find_word(word)? true : false
42
+ end
43
+
44
+ def find?(word)
45
+ data = find_word(word)
46
+ if data
47
+ find_word(word).word
48
+ else
49
+ false
50
+ end
51
+ end
52
+
53
+ def list(prefix=nil)
54
+ return words if prefix.nil?
55
+ stack = []
56
+ words = []
57
+ prefix_stack = []
58
+
59
+ stack << find_word(prefix)
60
+ prefix_stack << prefix.chars.take(prefix.size-1)
61
+ return [] unless stack.first
62
+
63
+ until stack.empty?
64
+ node = stack.pop
65
+
66
+ prefix_stack.pop and next if node == :value
67
+
68
+ prefix_stack << node.value
69
+ stack << :value
70
+
71
+ words << prefix_stack.join if node.word
72
+
73
+ node.next.each { |n| stack << n }
74
+ end
75
+ words
76
+ end
77
+
78
+ def csv_write(word)
79
+ @container.write(word)
80
+ end
81
+
82
+ def csv_read
83
+ @container.read
84
+ end
85
+ end
86
+
87
+
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: prefixtrie
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Mariam Surmava
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-05-11 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A simple prefix trie gem
14
+ email: msurmava@unisens.ge
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/csv_writer.rb
20
+ - lib/node.rb
21
+ - lib/prefixtrie.rb
22
+ homepage: https://rubygems.org/gems/prefixtrie
23
+ licenses:
24
+ - MIT
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubygems_version: 3.3.11
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: prefixtrie
45
+ test_files: []