prefixtrie 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
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: []