dawg 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/lib/dawg/finder.rb +24 -24
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 313d11f89980b52175bb0bc2234f6a933afea84048466698697015181d5fa0c4
|
4
|
+
data.tar.gz: 9db52e8deb0f228cb56ce5ee6225ef138b7cad3c9caa9c1ce96013fd2710a081
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0252d63616bd675da494d07bf22bb3cc23a080f88e01f4a6832bda3141ec3b21dc0be3c75e98758f8853efd7f5d72f5d1dedb15eedc9976d3913eac56c43977e
|
7
|
+
data.tar.gz: 21af8978cf0a0a7454b25230371f3c25b9de40f5185037c05ec22dacbae7b0592953824d014d37998546539aa59aeff7a2704be5253d83ca3200680019262641
|
data/lib/dawg/finder.rb
CHANGED
@@ -8,12 +8,9 @@ module Dawg
|
|
8
8
|
node = @the_node
|
9
9
|
word.each_char do |letter|
|
10
10
|
next_node = node[letter]
|
11
|
-
if next_node
|
12
|
-
|
13
|
-
|
14
|
-
else
|
15
|
-
return false
|
16
|
-
end
|
11
|
+
return fasel if next_node.nil?
|
12
|
+
|
13
|
+
node = next_node
|
17
14
|
end
|
18
15
|
node.final
|
19
16
|
end
|
@@ -21,32 +18,35 @@ module Dawg
|
|
21
18
|
# get all words with given prefix
|
22
19
|
def query(word)
|
23
20
|
node = @the_node
|
24
|
-
|
25
|
-
word.split(
|
21
|
+
|
22
|
+
word.split('').each do |letter|
|
26
23
|
next_node = node[letter]
|
27
|
-
if next_node
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
24
|
+
return [] if next_node.nil?
|
25
|
+
|
26
|
+
node = next_node
|
27
|
+
end
|
28
|
+
|
29
|
+
Enumerator.new do |result|
|
30
|
+
result << Word.new(word, node.final).to_s if node.final
|
31
|
+
get_childs(node).each do |s|
|
32
|
+
current_word = (Word.new(word) + s)
|
33
|
+
result << current_word.to_s if current_word.final
|
32
34
|
end
|
33
35
|
end
|
34
|
-
results << Word.new(word, node.final)
|
35
|
-
results += get_childs(node).map{|s| Word.new(word) + s}
|
36
|
-
results.select{|r| r.final}.map{|r| r.to_s }
|
37
36
|
end
|
38
37
|
|
39
38
|
def get_childs(node)
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
39
|
+
Enumerator.new do |result|
|
40
|
+
node.each_edge do |letter|
|
41
|
+
next_node = node[letter]
|
42
|
+
next if next_node.nil?
|
43
|
+
|
44
|
+
get_childs(next_node).each do |s|
|
45
|
+
result << Word.new(letter) + s
|
46
|
+
end
|
47
|
+
result << Word.new(letter, next_node.final)
|
46
48
|
end
|
47
49
|
end
|
48
|
-
results
|
49
50
|
end
|
50
51
|
end
|
51
|
-
|
52
52
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dawg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maksatbek Manurov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-02-04 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Basic deterministic acyclic finite state automaton in ruby
|
14
14
|
email:
|
@@ -44,8 +44,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
46
|
requirements: []
|
47
|
-
|
48
|
-
rubygems_version: 2.4.5.1
|
47
|
+
rubygems_version: 3.0.3
|
49
48
|
signing_key:
|
50
49
|
specification_version: 4
|
51
50
|
summary: Deterministic acyclic finite state automaton
|