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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 56a24158e6810822de3fe88accdfa0e31bd94a74f6f143c29f9cf3373ea8b988
4
- data.tar.gz: 706ae431b2924a2fd8cee865869c8f0d1df9fc03bf4345b545cb7eb395884896
3
+ metadata.gz: e1d484cd683188765b294f9f8fd04744b14e847e834c0c422b89c7f90f69773a
4
+ data.tar.gz: a24495427f1b97bdc54af540e8db8c347fc38f402338218cd3426d2a7a36d72d
5
5
  SHA512:
6
- metadata.gz: ccd8a684f254cf2ac5bfbfc7d751eca0d91202786140ef3265a6db51f3f7e0d5c5449ef08dd3aabdcf16af99445c734b5e79df0a0525f549478547b5bcf43b91
7
- data.tar.gz: 3daf6172065906c3e7c52e6b5d212cf9a5a5160056c3f33514275627884a00697fa586382755bd43ab4b801f11b6af4d62ee565200b09f2a598d20b885b3eaf5
6
+ metadata.gz: 80918aca1518e362a9af8af4811bd63c6e89832056de34c0b12fb9495414793ca18e648b5efdce5bc85836a865f1dd85b1be0cc2c9b73286336bc267b5e22e4e
7
+ data.tar.gz: 3ffdfe094197c34b6115087e9331e59b5dcc99323b11832475619f5a0d22ac16e3974c9c0df0fb6f70832225805d6fcd8d00a3b7b27bfafee5a9df62cea6b6a7
@@ -0,0 +1,4 @@
1
+ module Databoom
2
+ class AvlTree
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Databoom
2
+ class BalancedTree
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Databoom
2
+ class BinarySearchTree
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Databoom
2
+ class CircularDequeue
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Databoom
2
+ class Dequeue
3
+ end
4
+ end
@@ -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
@@ -0,0 +1,10 @@
1
+ module Databoom
2
+ class DoublyLinkedList
3
+ class Node
4
+ attr_accessor :previous, :next
5
+ end
6
+
7
+ def initialize
8
+ end
9
+ end
10
+ end
@@ -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,4 @@
1
+ module Databoom
2
+ class LruCache
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Databoom
2
+ class Queue
3
+ end
4
+ 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
@@ -0,0 +1,4 @@
1
+ module Databoom
2
+ class Trie
3
+ end
4
+ 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.1
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-07 00:00:00.000000000 Z
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