victory 0.0.0 → 0.0.1

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 (51) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -0
  3. data/.rubocop.yml +11 -1
  4. data/README.md +4 -6
  5. data/Rakefile +11 -4
  6. data/USAGE.md +159 -0
  7. data/ext/algorithms/string/LICENSE.md +21 -0
  8. data/ext/algorithms/string/extconf.rb +4 -0
  9. data/ext/algorithms/string/string.c +68 -0
  10. data/ext/containers/bst/LICENSE.md +21 -0
  11. data/ext/containers/bst/bst.c +247 -0
  12. data/ext/containers/bst/extconf.rb +4 -0
  13. data/ext/containers/deque/LICENSE.md +21 -0
  14. data/ext/containers/deque/deque.c +247 -0
  15. data/ext/containers/deque/extconf.rb +4 -0
  16. data/ext/containers/rbtree_map/LICENSE.md +21 -0
  17. data/ext/containers/rbtree_map/extconf.rb +4 -0
  18. data/ext/containers/rbtree_map/rbtree.c +498 -0
  19. data/ext/containers/splaytree_map/LICENSE.md +21 -0
  20. data/ext/containers/splaytree_map/extconf.rb +4 -0
  21. data/ext/containers/splaytree_map/splaytree.c +419 -0
  22. data/ext/containers/xor_list/extconf.rb +4 -0
  23. data/ext/containers/xor_list/xor_list.c +122 -0
  24. data/lib/algorithms/search.rb +104 -0
  25. data/lib/algorithms/sort.rb +389 -0
  26. data/lib/algorithms/string.rb +29 -0
  27. data/lib/containers/deque.rb +193 -0
  28. data/lib/containers/heap.rb +524 -0
  29. data/lib/containers/kd_tree.rb +131 -0
  30. data/lib/containers/list.rb +81 -0
  31. data/lib/containers/prefix_tree.rb +61 -0
  32. data/lib/containers/priority_queue.rb +135 -0
  33. data/lib/containers/queue.rb +89 -0
  34. data/lib/containers/rb_tree_map.rb +420 -0
  35. data/lib/containers/splay_tree_map.rb +290 -0
  36. data/lib/containers/stack.rb +88 -0
  37. data/lib/containers/suffix_array.rb +92 -0
  38. data/lib/containers/trie.rb +204 -0
  39. data/lib/containers/tuple.rb +20 -0
  40. data/lib/victory/version.rb +1 -1
  41. data/lib/victory.rb +8 -1
  42. data/victory.gemspec +12 -3
  43. metadata +73 -12
  44. data/.idea/encodings.xml +0 -4
  45. data/.idea/misc.xml +0 -7
  46. data/.idea/modules.xml +0 -8
  47. data/.idea/victory.iml +0 -13
  48. data/.idea/workspace.xml +0 -233
  49. data/ext/victory/extconf.rb +0 -3
  50. data/ext/victory/victory.c +0 -9
  51. data/ext/victory/victory.h +0 -6
@@ -0,0 +1,88 @@
1
+ require 'containers/deque'
2
+ # rdoc
3
+ # A Stack is a container that keeps elements in a last-in first-out (LIFO) order. There are many
4
+ # uses for stacks, including prefix-infix-postfix conversion and backtracking problems.
5
+ #
6
+ # This implementation uses a doubly-linked list, guaranteeing O(1) complexity for all operations.
7
+ #
8
+ #
9
+ # MIT License
10
+ #
11
+ # Copyright (c) 2009 Kanwei Li
12
+ #
13
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
14
+ # of this software and associated documentation files (the "Software"), to deal
15
+ # in the Software without restriction, including without limitation the rights
16
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17
+ # copies of the Software, and to permit persons to whom the Software is
18
+ # furnished to do so, subject to the following conditions:
19
+ #
20
+ # The above copyright notice and this permission notice shall be included in all
21
+ # copies or substantial portions of the Software.
22
+ #
23
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29
+ # SOFTWARE.
30
+ class Containers::Stack
31
+ include Enumerable
32
+ # Create a new stack. Takes an optional array argument to initialize the stack.
33
+ #
34
+ # s = Containers::Stack.new([1, 2, 3])
35
+ # s.pop #=> 3
36
+ # s.pop #=> 2
37
+ def initialize(ary=[])
38
+ @container = Containers::Deque.new(ary)
39
+ end
40
+
41
+ # Returns the next item from the stack but does not remove it.
42
+ #
43
+ # s = Containers::Stack.new([1, 2, 3])
44
+ # s.next #=> 3
45
+ # s.size #=> 3
46
+ def next
47
+ @container.back
48
+ end
49
+
50
+ # Adds an item to the stack.
51
+ #
52
+ # s = Containers::Stack.new([1])
53
+ # s.push(2)
54
+ # s.pop #=> 2
55
+ # s.pop #=> 1
56
+ def push(obj)
57
+ @container.push_back(obj)
58
+ end
59
+ alias_method :<<, :push
60
+
61
+ # Removes the next item from the stack and returns it.
62
+ #
63
+ # s = Containers::Stack.new([1, 2, 3])
64
+ # s.pop #=> 3
65
+ # s.size #=> 2
66
+ def pop
67
+ @container.pop_back
68
+ end
69
+
70
+ # Return the number of items in the stack.
71
+ #
72
+ # s = Containers::Stack.new([1, 2, 3])
73
+ # s.size #=> 3
74
+ def size
75
+ @container.size
76
+ end
77
+
78
+ # Returns true if the stack is empty, false otherwise.
79
+ def empty?
80
+ @container.empty?
81
+ end
82
+
83
+ # Iterate over the Stack in LIFO order.
84
+ def each(&block)
85
+ @container.each_backward(&block)
86
+ end
87
+
88
+ end
@@ -0,0 +1,92 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rdoc
4
+ # A suffix array enables fast substring search of a given string. An array of all possible substrings
5
+ # is constructed and stored, and a binary search is then done to find a desired substring among those
6
+ # stored. While more storage (and thus memory) is needed to create the SuffixArray, the advantage is
7
+ # that substrings can be found in O(m log n) time, where m is the length of the substring to search for
8
+ # and n is the total number of substrings.
9
+ #
10
+ #
11
+ # MIT License
12
+ #
13
+ # Copyright (c) 2009 Kanwei Li
14
+ #
15
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
16
+ # of this software and associated documentation files (the "Software"), to deal
17
+ # in the Software without restriction, including without limitation the rights
18
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
19
+ # copies of the Software, and to permit persons to whom the Software is
20
+ # furnished to do so, subject to the following conditions:
21
+ #
22
+ # The above copyright notice and this permission notice shall be included in all
23
+ # copies or substantial portions of the Software.
24
+ #
25
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
26
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
27
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
28
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
29
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
30
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
31
+ # SOFTWARE.
32
+ class Containers::SuffixArray
33
+ # Creates a new SuffixArray with a given string. Object of any class implementing a #to_s method can
34
+ # be passed in, such as integers.
35
+ #
36
+ # Complexity: O(n^2 log n)
37
+ #
38
+ # s_array = Containers::SuffixArray("abracadabra")
39
+ # s_array["abra"] #=> true
40
+ #
41
+ # number = Containers::SuffixArray(1234567)
42
+ # number[1] #=> true
43
+ # number[13] #=> false
44
+ def initialize(string)
45
+ string = string.to_s
46
+ raise ArgumentError, 'SuffixArray needs to be initialized with a non-empty string' if string.empty?
47
+ @original_string = string
48
+ @suffixes = []
49
+ string.length.times do |i|
50
+ @suffixes << string[i..-1]
51
+ end
52
+
53
+ # Sort the suffixes in ascending order
54
+ @suffixes.sort! { |x, y| x <=> y }
55
+ end
56
+
57
+ # Returns true if the substring occurs in the string, false otherwise.
58
+ #
59
+ # Complexity: O(m + log n)
60
+ #
61
+ # s_array = Containers::SuffixArray.new("abracadabra")
62
+ # s_array.has_substring?("a") #=> true
63
+ # s_array.has_substring?("abra") #=> true
64
+ # s_array.has_substring?("abracadabra") #=> true
65
+ # s_array.has_substring?("acadabra") #=> true
66
+ # s_array.has_substring?("adabra") #=> true
67
+ # s_array.has_substring?("bra") #=> true
68
+ # s_array.has_substring?("bracadabra") #=> true
69
+ # s_array.has_substring?("cadabra") #=> true
70
+ # s_array.has_substring?("dabra") #=> true
71
+ # s_array.has_substring?("ra") #=> true
72
+ # s_array.has_substring?("racadabra") #=> true
73
+ # s_array.has_substring?("nope") #=> false
74
+ def has_substring?(substring)
75
+ substring = substring.to_s
76
+ return false if substring.empty?
77
+ substring_length = substring.length-1
78
+ l = 0
79
+ r = @suffixes.size-1
80
+ while(l <= r)
81
+ mid = (l + r) / 2
82
+ suffix = @suffixes[mid][0..substring_length]
83
+ case substring <=> suffix
84
+ when 0 then return true
85
+ when 1 then l = mid + 1
86
+ when -1 then r = mid - 1
87
+ end
88
+ end
89
+ false
90
+ end
91
+ alias [] has_substring?
92
+ end
@@ -0,0 +1,204 @@
1
+ # rdoc
2
+ # A Trie is a data structure that stores key value pairs in a tree-like fashion. It allows
3
+ # O(m) lookup speed, where m is the length of the key searched, and has no chance of collisions,
4
+ # unlike hash tables. Because of its nature, search misses are quickly detected.
5
+ #
6
+ # Tries are often used for longest prefix algorithms, wildcard matching, and can be used to
7
+ # implement a radix sort.
8
+ #
9
+ # This implemention is based on a Ternary Search Tree.
10
+ #
11
+ #
12
+ # MIT License
13
+ #
14
+ # Copyright (c) 2009 Kanwei Li
15
+ #
16
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
17
+ # of this software and associated documentation files (the "Software"), to deal
18
+ # in the Software without restriction, including without limitation the rights
19
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
20
+ # copies of the Software, and to permit persons to whom the Software is
21
+ # furnished to do so, subject to the following conditions:
22
+ #
23
+ # The above copyright notice and this permission notice shall be included in all
24
+ # copies or substantial portions of the Software.
25
+ #
26
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
27
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
28
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
29
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
30
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
31
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32
+ # SOFTWARE.
33
+ class Containers::Trie
34
+ # Create a new, empty Trie.
35
+ #
36
+ # t = Containers::Trie.new
37
+ # t["hello"] = "world"
38
+ # t["hello"] #=> "world"
39
+ def initialize
40
+ @root = nil
41
+ end
42
+
43
+ # Adds a key, value pair to the Trie, and returns the value if successful. The to_s method is
44
+ # called on the parameter to turn it into a string.
45
+ #
46
+ # Complexity: O(m)
47
+ #
48
+ # t = Containers::Trie.new
49
+ # t["hello"] = "world"
50
+ # t.push("hello", "world") # does the same thing
51
+ # t["hello"] #=> "world"
52
+ # t[1] = 1
53
+ # t[1] #=> 1
54
+ def push(key, value)
55
+ key = key.to_s
56
+ return nil if key.empty?
57
+ @root = push_recursive(@root, key, 0, value)
58
+ value
59
+ end
60
+ alias_method :[]=, :push
61
+
62
+ # Returns true if the key is contained in the Trie.
63
+ #
64
+ # Complexity: O(m) worst case
65
+ #
66
+ def has_key?(key)
67
+ key = key.to_s
68
+ return false if key.empty?
69
+ !(get_recursive(@root, key, 0).nil?)
70
+ end
71
+
72
+ # Returns the value of the desired key, or nil if the key doesn't exist.
73
+ #
74
+ # Complexity: O(m) worst case
75
+ #
76
+ # t = Containers::Trie.new
77
+ # t.get("hello") = "world"
78
+ # t.get("non-existant") #=> nil
79
+ def get(key)
80
+ key = key.to_s
81
+ return nil if key.empty?
82
+ node = get_recursive(@root, key, 0)
83
+ node ? node.last : nil
84
+ end
85
+ alias_method :[], :get
86
+
87
+ # Returns the longest key that has a prefix in common with the parameter string. If
88
+ # no match is found, the blank string "" is returned.
89
+ #
90
+ # Complexity: O(m) worst case
91
+ #
92
+ # t = Containers::Trie.new
93
+ # t.push("Hello", "World")
94
+ # t.push("Hello, brother", "World")
95
+ # t.push("Hello, bob", "World")
96
+ # t.longest_prefix("Hello, brandon") #=> "Hello"
97
+ # t.longest_prefix("Hel") #=> ""
98
+ # t.longest_prefix("Hello") #=> "Hello"
99
+ def longest_prefix(string)
100
+ string = string.to_s
101
+ return nil if string.empty?
102
+ len = prefix_recursive(@root, string, 0)
103
+ string[0...len]
104
+ end
105
+
106
+ # Returns a sorted array containing strings that match the parameter string. The wildcard
107
+ # characters that match any character are '*' and '.' If no match is found, an empty
108
+ # array is returned.
109
+ #
110
+ # Complexity: O(n) worst case
111
+ #
112
+ # t = Containers::Trie.new
113
+ # t.push("Hello", "World")
114
+ # t.push("Hilly", "World")
115
+ # t.push("Hello, bob", "World")
116
+ # t.wildcard("H*ll.") #=> ["Hello", "Hilly"]
117
+ # t.wildcard("Hel") #=> []
118
+ def wildcard(string)
119
+ string = string.to_s
120
+ return nil if string.empty?
121
+ ary = []
122
+ ary << wildcard_recursive(@root, string, 0, "")
123
+ ary.flatten.compact.sort
124
+ end
125
+
126
+ class Node # :nodoc: all
127
+ attr_accessor :left, :mid, :right, :char, :value, :end
128
+
129
+ def initialize(char, value)
130
+ @char = char
131
+ @value = value
132
+ @left = @mid = @right = nil
133
+ @end = false
134
+ end
135
+
136
+ def last?
137
+ @end == true
138
+ end
139
+ end
140
+
141
+ def wildcard_recursive(node, string, index, prefix)
142
+ return nil if node.nil? || index == string.length
143
+ arr = []
144
+ char = string[index]
145
+ if (char.chr == "*" || char.chr == "." || char < node.char)
146
+ arr << wildcard_recursive(node.left, string, index, prefix)
147
+ end
148
+ if (char.chr == "*" || char.chr == "." || char > node.char)
149
+ arr << wildcard_recursive(node.right, string, index, prefix)
150
+ end
151
+ if (char.chr == "*" || char.chr == "." || char == node.char)
152
+ arr << "#{prefix}#{node.char.chr}" if node.last?
153
+ arr << wildcard_recursive(node.mid, string, index+1, prefix + node.char.chr)
154
+ end
155
+ arr
156
+ end
157
+
158
+ def prefix_recursive(node, string, index)
159
+ return 0 if node.nil? || index == string.length
160
+ len = 0
161
+ rec_len = 0
162
+ char = string[index]
163
+ if (char < node.char)
164
+ rec_len = prefix_recursive(node.left, string, index)
165
+ elsif (char > node.char)
166
+ rec_len = prefix_recursive(node.right, string, index)
167
+ else
168
+ len = index+1 if node.last?
169
+ rec_len = prefix_recursive(node.mid, string, index+1)
170
+ end
171
+ len > rec_len ? len : rec_len
172
+ end
173
+
174
+ def push_recursive(node, string, index, value)
175
+ char = string[index]
176
+ node = Node.new(char, value) if node.nil?
177
+ if (char < node.char)
178
+ node.left = push_recursive(node.left, string, index, value)
179
+ elsif (char > node.char)
180
+ node.right = push_recursive(node.right, string, index, value)
181
+ elsif (index < string.length-1) # We're not at the end of the input string; add next char
182
+ node.mid = push_recursive(node.mid, string, index+1, value)
183
+ else
184
+ node.end = true
185
+ node.value = value
186
+ end
187
+ node
188
+ end
189
+
190
+ # Returns [char, value] if found
191
+ def get_recursive(node, string, index)
192
+ return nil if node.nil?
193
+ char = string[index]
194
+ if (char < node.char)
195
+ return get_recursive(node.left, string, index)
196
+ elsif (char > node.char)
197
+ return get_recursive(node.right, string, index)
198
+ elsif (index < string.length-1) # We're not at the end of the input string; add next char
199
+ return get_recursive(node.mid, string, index+1)
200
+ else
201
+ return node.last? ? [node.char, node.value] : nil
202
+ end
203
+ end
204
+ end
@@ -0,0 +1,20 @@
1
+ class Tuple
2
+ @elements = []
3
+ def self.[](*elements)
4
+ new(elements)
5
+ end
6
+
7
+ def initialize(elements)
8
+ @elements = elements
9
+ end
10
+
11
+ def [](idx)
12
+ @elements[idx]
13
+ end
14
+
15
+ def to_a
16
+ @elements.to_a
17
+ end
18
+ end
19
+
20
+ T = Tuple
@@ -1,3 +1,3 @@
1
1
  module Victory
2
- VERSION = "0.0.0"
2
+ VERSION = "0.0.1"
3
3
  end
data/lib/victory.rb CHANGED
@@ -1,7 +1,14 @@
1
1
  require "victory/version"
2
- require "victory/victory"
2
+ require 'require_all'
3
3
 
4
4
  module Victory
5
5
  class Error < StandardError; end
6
6
  # Your code goes here...
7
7
  end
8
+
9
+ module Algorithms; end
10
+ module Containers; end
11
+
12
+ require 'XORList'
13
+
14
+ require_all 'lib/**/*rb'
data/victory.gemspec CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ['Arnold Szederjesi']
10
10
  spec.email = ['szederjesiarnold@gmail.com']
11
11
 
12
- spec.summary = 'A gem providing all useful algorithms and data structures for contests'
12
+ spec.summary = 'A gem providing all useful algorithms and data structures for programming contests'
13
13
  spec.license = 'MIT'
14
14
 
15
15
  # Specify which files should be added to the gem when it is released.
@@ -19,11 +19,20 @@ Gem::Specification.new do |spec|
19
19
  end
20
20
  spec.bindir = 'exe'
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
- spec.require_paths = ['lib']
23
- spec.extensions = ['ext/victory/extconf.rb']
22
+ spec.require_paths = ['lib', 'ext']
23
+ spec.extensions = [
24
+ 'ext/algorithms/string/extconf.rb',
25
+ 'ext/containers/bst/extconf.rb',
26
+ 'ext/containers/deque/extconf.rb',
27
+ 'ext/containers/rbtree_map/extconf.rb',
28
+ 'ext/containers/splaytree_map/extconf.rb',
29
+ 'ext/containers/xor_list/extconf.rb'
30
+ ]
24
31
 
25
32
  spec.add_development_dependency 'bundler', '~> 1.17'
26
33
  spec.add_development_dependency 'minitest', '~> 5.0'
27
34
  spec.add_development_dependency 'rake', '~> 10.0'
28
35
  spec.add_development_dependency 'rake-compiler'
36
+ spec.add_development_dependency 'require_all'
37
+ spec.add_development_dependency 'rspec'
29
38
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: victory
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arnold Szederjesi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-03-08 00:00:00.000000000 Z
11
+ date: 2019-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,20 +66,48 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: require_all
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
69
97
  description:
70
98
  email:
71
99
  - szederjesiarnold@gmail.com
72
100
  executables: []
73
101
  extensions:
74
- - ext/victory/extconf.rb
102
+ - ext/algorithms/string/extconf.rb
103
+ - ext/containers/bst/extconf.rb
104
+ - ext/containers/deque/extconf.rb
105
+ - ext/containers/rbtree_map/extconf.rb
106
+ - ext/containers/splaytree_map/extconf.rb
107
+ - ext/containers/xor_list/extconf.rb
75
108
  extra_rdoc_files: []
76
109
  files:
77
110
  - ".gitignore"
78
- - ".idea/encodings.xml"
79
- - ".idea/misc.xml"
80
- - ".idea/modules.xml"
81
- - ".idea/victory.iml"
82
- - ".idea/workspace.xml"
83
111
  - ".rubocop.yml"
84
112
  - ".travis.yml"
85
113
  - CODE_OF_CONDUCT.md
@@ -87,11 +115,42 @@ files:
87
115
  - LICENSE.txt
88
116
  - README.md
89
117
  - Rakefile
118
+ - USAGE.md
90
119
  - bin/console
91
120
  - bin/setup
92
- - ext/victory/extconf.rb
93
- - ext/victory/victory.c
94
- - ext/victory/victory.h
121
+ - ext/algorithms/string/LICENSE.md
122
+ - ext/algorithms/string/extconf.rb
123
+ - ext/algorithms/string/string.c
124
+ - ext/containers/bst/LICENSE.md
125
+ - ext/containers/bst/bst.c
126
+ - ext/containers/bst/extconf.rb
127
+ - ext/containers/deque/LICENSE.md
128
+ - ext/containers/deque/deque.c
129
+ - ext/containers/deque/extconf.rb
130
+ - ext/containers/rbtree_map/LICENSE.md
131
+ - ext/containers/rbtree_map/extconf.rb
132
+ - ext/containers/rbtree_map/rbtree.c
133
+ - ext/containers/splaytree_map/LICENSE.md
134
+ - ext/containers/splaytree_map/extconf.rb
135
+ - ext/containers/splaytree_map/splaytree.c
136
+ - ext/containers/xor_list/extconf.rb
137
+ - ext/containers/xor_list/xor_list.c
138
+ - lib/algorithms/search.rb
139
+ - lib/algorithms/sort.rb
140
+ - lib/algorithms/string.rb
141
+ - lib/containers/deque.rb
142
+ - lib/containers/heap.rb
143
+ - lib/containers/kd_tree.rb
144
+ - lib/containers/list.rb
145
+ - lib/containers/prefix_tree.rb
146
+ - lib/containers/priority_queue.rb
147
+ - lib/containers/queue.rb
148
+ - lib/containers/rb_tree_map.rb
149
+ - lib/containers/splay_tree_map.rb
150
+ - lib/containers/stack.rb
151
+ - lib/containers/suffix_array.rb
152
+ - lib/containers/trie.rb
153
+ - lib/containers/tuple.rb
95
154
  - lib/victory.rb
96
155
  - lib/victory/version.rb
97
156
  - victory.gemspec
@@ -103,6 +162,7 @@ post_install_message:
103
162
  rdoc_options: []
104
163
  require_paths:
105
164
  - lib
165
+ - ext
106
166
  required_ruby_version: !ruby/object:Gem::Requirement
107
167
  requirements:
108
168
  - - ">="
@@ -117,5 +177,6 @@ requirements: []
117
177
  rubygems_version: 3.0.1
118
178
  signing_key:
119
179
  specification_version: 4
120
- summary: A gem providing all useful algorithms and data structures for contests
180
+ summary: A gem providing all useful algorithms and data structures for programming
181
+ contests
121
182
  test_files: []
data/.idea/encodings.xml DELETED
@@ -1,4 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="Encoding" addBOMForNewFiles="with NO BOM" />
4
- </project>
data/.idea/misc.xml DELETED
@@ -1,7 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="JavaScriptSettings">
4
- <option name="languageLevel" value="ES6" />
5
- </component>
6
- <component name="ProjectRootManager" version="2" project-jdk-name="RVM: ruby-2.6.0" project-jdk-type="RUBY_SDK" />
7
- </project>
data/.idea/modules.xml DELETED
@@ -1,8 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectModuleManager">
4
- <modules>
5
- <module fileurl="file://$PROJECT_DIR$/.idea/victory.iml" filepath="$PROJECT_DIR$/.idea/victory.iml" />
6
- </modules>
7
- </component>
8
- </project>
data/.idea/victory.iml DELETED
@@ -1,13 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <module type="RUBY_MODULE" version="4">
3
- <component name="ModuleRunConfigurationManager">
4
- <shared />
5
- </component>
6
- <component name="NewModuleRootManager">
7
- <content url="file://$MODULE_DIR$" />
8
- <orderEntry type="inheritedJdk" />
9
- <orderEntry type="sourceFolder" forTests="false" />
10
- <orderEntry type="library" scope="PROVIDED" name="bundler (v1.17.2, RVM: ruby-2.6.0) [gem]" level="application" />
11
- <orderEntry type="library" scope="PROVIDED" name="minitest (v5.11.3, RVM: ruby-2.6.0) [gem]" level="application" />
12
- </component>
13
- </module>