databoom 0.0.1 → 0.0.2
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.
- checksums.yaml +4 -4
- data/lib/databoom/avl_tree.rb +4 -0
- data/lib/databoom/balanced_tree.rb +4 -0
- data/lib/databoom/binary_search_tree.rb +4 -0
- data/lib/databoom/circular_dequeue.rb +4 -0
- data/lib/databoom/dequeue.rb +4 -0
- data/lib/databoom/digraph.rb +91 -0
- data/lib/databoom/doubly_linked_list.rb +10 -0
- data/lib/databoom/linked_list.rb +25 -17
- data/lib/databoom/lru_cache.rb +4 -0
- data/lib/databoom/queue.rb +4 -0
- data/lib/databoom/stack.rb +14 -0
- data/lib/databoom/trie.rb +4 -0
- data/lib/databoom.rb +12 -0
- metadata +13 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e1d484cd683188765b294f9f8fd04744b14e847e834c0c422b89c7f90f69773a
|
4
|
+
data.tar.gz: a24495427f1b97bdc54af540e8db8c347fc38f402338218cd3426d2a7a36d72d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 80918aca1518e362a9af8af4811bd63c6e89832056de34c0b12fb9495414793ca18e648b5efdce5bc85836a865f1dd85b1be0cc2c9b73286336bc267b5e22e4e
|
7
|
+
data.tar.gz: 3ffdfe094197c34b6115087e9331e59b5dcc99323b11832475619f5a0d22ac16e3974c9c0df0fb6f70832225805d6fcd8d00a3b7b27bfafee5a9df62cea6b6a7
|
@@ -0,0 +1,91 @@
|
|
1
|
+
module Databoom
|
2
|
+
class Digraph
|
3
|
+
attr_reader :vertices, :edges
|
4
|
+
|
5
|
+
class Vertex
|
6
|
+
attr_accessor :value, :label
|
7
|
+
|
8
|
+
def initialize(value, label = nil)
|
9
|
+
@value = value
|
10
|
+
@label = label
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class Edge
|
15
|
+
attr_accessor :source, :sink, :label
|
16
|
+
|
17
|
+
def initialize(source_vertex, sink_vertex, label)
|
18
|
+
@source = source_vertex
|
19
|
+
@sink = sink_vertex
|
20
|
+
@label = label
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def initialize
|
25
|
+
@vertices = []
|
26
|
+
@edges = []
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
# NOTE: Vertex values are uniq
|
31
|
+
def add_vertex(vertex_value, label = nil)
|
32
|
+
find_vertex(vertex_value) || create_vertex(vertex_value, label)
|
33
|
+
end
|
34
|
+
|
35
|
+
def del_vertex(vertex_value)
|
36
|
+
@vertices.reject! { |iter_vertex| iter_vertex.value == vertex_value }
|
37
|
+
end
|
38
|
+
|
39
|
+
def vertex?(vertex_value)
|
40
|
+
!find_vertex(vertex_value).nil?
|
41
|
+
end
|
42
|
+
|
43
|
+
def edge?(source_vertex_value, sink_vertex_value, label = nil)
|
44
|
+
!find_edge(source_vertex_value, sink_vertex_value, label).nil?
|
45
|
+
end
|
46
|
+
|
47
|
+
# NOTE: label has to be unique. Only one edge with the same source & sink can exist with no label
|
48
|
+
def add_edge(source_value, sink_value, label = nil)
|
49
|
+
find_edge(source_value, sink_value, label) || create_edge(source_value, sink_value, label)
|
50
|
+
end
|
51
|
+
|
52
|
+
def out_edges(vertex_value)
|
53
|
+
return nil unless vertex?(vertex_value)
|
54
|
+
|
55
|
+
@edges.select {|edge| edge.source = find_vertex(vertex_value) }
|
56
|
+
end
|
57
|
+
|
58
|
+
def in_edges(vertex_value)
|
59
|
+
return nil unless vertex?(vertex_value)
|
60
|
+
|
61
|
+
@edges.select {|edge| edge.sink = find_vertex(vertex_value) }
|
62
|
+
end
|
63
|
+
|
64
|
+
def find_path(origin_value, terminal_value, path = [])
|
65
|
+
return nil unless vertex?(origin_value) && vertex?(terminal_value)
|
66
|
+
return path if find_vertex(origin_value)
|
67
|
+
end
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
def find_edge(source_value, sink_value, label = nil)
|
72
|
+
@edges.find do |iter_edge|
|
73
|
+
iter_edge.source == find_vertex(source_value) &&
|
74
|
+
iter_edge.sink == find_vertex(sink_value) &&
|
75
|
+
iter_edge.label == label
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def create_edge(source_value, sink_value, label = nil)
|
80
|
+
@edges << Edge.new(find_vertex(source_value), find_vertex(sink_value), label)
|
81
|
+
end
|
82
|
+
|
83
|
+
def find_vertex(vertex_value)
|
84
|
+
@vertices.find { |iter_vertex| iter_vertex.value == vertex_value }
|
85
|
+
end
|
86
|
+
|
87
|
+
def create_vertex(vertex_value, label = nil)
|
88
|
+
@vertices << Vertex.new(vertex_value, label)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
data/lib/databoom/linked_list.rb
CHANGED
@@ -2,26 +2,13 @@ module Databoom
|
|
2
2
|
class LinkedList
|
3
3
|
attr_accessor :head
|
4
4
|
|
5
|
-
def initialize
|
6
|
-
@head = Node.new("*")
|
7
|
-
end
|
8
|
-
|
9
|
-
def append(value)
|
10
|
-
@head.append(value)
|
11
|
-
end
|
12
|
-
|
13
|
-
def append_after(find_node, nodeval)
|
14
|
-
after_node = find(find_node)
|
15
|
-
return append(nodeval) unless after_node
|
16
|
-
end
|
17
|
-
|
18
|
-
def find(value)
|
19
|
-
@head&.find(value)
|
20
|
-
end
|
21
|
-
|
22
5
|
class Node
|
23
6
|
attr_accessor :value, :npointer
|
24
7
|
|
8
|
+
def inspect(buffer = String.new)
|
9
|
+
@npointer&.inspect(buffer += "#{value} -> ") || buffer + value
|
10
|
+
end
|
11
|
+
|
25
12
|
def find(value)
|
26
13
|
return self if @value == value
|
27
14
|
return nil unless @npointer
|
@@ -39,5 +26,26 @@ module Databoom
|
|
39
26
|
@npointer = Node.new(nodeval)
|
40
27
|
end
|
41
28
|
end
|
29
|
+
|
30
|
+
def initialize
|
31
|
+
@head = Node.new("*")
|
32
|
+
end
|
33
|
+
|
34
|
+
def append(value)
|
35
|
+
@head.append(value)
|
36
|
+
end
|
37
|
+
|
38
|
+
def append_after(find_node, nodeval)
|
39
|
+
after_node = find(find_node)
|
40
|
+
return append(nodeval) unless after_node
|
41
|
+
end
|
42
|
+
|
43
|
+
def find(value)
|
44
|
+
@head&.find(value)
|
45
|
+
end
|
46
|
+
|
47
|
+
def inspect
|
48
|
+
@head&.inspect
|
49
|
+
end
|
42
50
|
end
|
43
51
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
3
|
+
module Databoom
|
4
|
+
class Stack
|
5
|
+
extend Forwardable
|
6
|
+
def initialize; @mem = []; end
|
7
|
+
def pop; [@mem.pop, @mem]; end
|
8
|
+
|
9
|
+
def_delegator :@mem, :push
|
10
|
+
def_delegator :@mem, :pop, :pop!
|
11
|
+
def_delegator :@mem, :last, :peek
|
12
|
+
def_delegators :@mem, :size, :inspect
|
13
|
+
end
|
14
|
+
end
|
data/lib/databoom.rb
CHANGED
@@ -1,3 +1,15 @@
|
|
1
1
|
module Databoom
|
2
2
|
require_relative "databoom/linked_list"
|
3
|
+
require_relative "databoom/doubly_linked_list"
|
4
|
+
require_relative "databoom/doubly_linked_list"
|
5
|
+
require_relative "databoom/avl_tree"
|
6
|
+
require_relative "databoom/balanced_tree"
|
7
|
+
require_relative "databoom/binary_search_tree"
|
8
|
+
require_relative "databoom/circular_dequeue"
|
9
|
+
require_relative "databoom/dequeue"
|
10
|
+
require_relative "databoom/digraph"
|
11
|
+
require_relative "databoom/lru_cache"
|
12
|
+
require_relative "databoom/stack"
|
13
|
+
require_relative "databoom/queue"
|
14
|
+
require_relative "databoom/trie"
|
3
15
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: databoom
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sreedev Kodichath
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-12-
|
11
|
+
date: 2021-12-10 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email: sreedevpadmakumar@gmail.com
|
@@ -17,7 +17,18 @@ extensions: []
|
|
17
17
|
extra_rdoc_files: []
|
18
18
|
files:
|
19
19
|
- lib/databoom.rb
|
20
|
+
- lib/databoom/avl_tree.rb
|
21
|
+
- lib/databoom/balanced_tree.rb
|
22
|
+
- lib/databoom/binary_search_tree.rb
|
23
|
+
- lib/databoom/circular_dequeue.rb
|
24
|
+
- lib/databoom/dequeue.rb
|
25
|
+
- lib/databoom/digraph.rb
|
26
|
+
- lib/databoom/doubly_linked_list.rb
|
20
27
|
- lib/databoom/linked_list.rb
|
28
|
+
- lib/databoom/lru_cache.rb
|
29
|
+
- lib/databoom/queue.rb
|
30
|
+
- lib/databoom/stack.rb
|
31
|
+
- lib/databoom/trie.rb
|
21
32
|
homepage: https://github.com/sreedevk/databoom
|
22
33
|
licenses:
|
23
34
|
- MIT
|