prefixtrie 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/csv_writer.rb +17 -0
- data/lib/node.rb +17 -0
- data/lib/prefixtrie.rb +87 -0
- 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
data/lib/node.rb
ADDED
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: []
|