zadt 0.1.0 → 0.1.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.
- checksums.yaml +4 -4
- data/.DS_Store +0 -0
- data/lib/ADT_requireables.rb +6 -0
- data/lib/zadt/AbstractDataTypes/ADT.rb +15 -0
- data/lib/zadt/AbstractDataTypes/MinMaxStack.rb +74 -0
- data/lib/zadt/AbstractDataTypes/MinMaxStackQueue.rb +81 -0
- data/lib/zadt/AbstractDataTypes/Queue.rb +49 -0
- data/lib/zadt/AbstractDataTypes/Stack.rb +49 -0
- data/lib/zadt/AbstractDataTypes/StackQueue.rb +58 -0
- data/lib/zadt/version.rb +1 -1
- data/lib/zadt.rb +1 -0
- data/zadt.gemspec +1 -1
- metadata +11 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cbc3136e504bb61d48ef017ca9fc1ccf398d2fdb
|
4
|
+
data.tar.gz: be82f8e8688f3074e381a293fa1aea983587c994
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 878cc14d73b9ac881fcc787d214c6541afc91990aa551df86692c1bd2dd2178a1288ab22806a6ca66768a3241b648b343e2104d07c397eb528a74ff5a67370dc
|
7
|
+
data.tar.gz: cf9047e02fa9921b30e7925c00a7700b30d4ce812c15e3d696f792f22309818b1864f63ff55f74fd933ec99a5e9f1d527770dd05b5101745a33543d7315badaa
|
data/.DS_Store
ADDED
Binary file
|
@@ -0,0 +1,6 @@
|
|
1
|
+
require_relative 'zadt/AbstractDataTypes/ADT.rb'
|
2
|
+
require_relative 'zadt/AbstractDataTypes/Stack.rb'
|
3
|
+
require_relative 'zadt/AbstractDataTypes/Queue.rb'
|
4
|
+
require_relative 'zadt/AbstractDataTypes/StackQueue.rb'
|
5
|
+
require_relative 'zadt/AbstractDataTypes/MinMaxStack.rb'
|
6
|
+
require_relative 'zadt/AbstractDataTypes/MinMaxStackQueue.rb'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Zadt
|
2
|
+
class ADT
|
3
|
+
def self.help
|
4
|
+
puts "Thank you for using Zagorski Advanced Data Types!"
|
5
|
+
puts "This package contains the following Array-like Data Types:"
|
6
|
+
puts "-Stack, a LIFO array with functions push and pop"
|
7
|
+
puts "-Queue, a FIFO array with functions enqueue and dequeue"
|
8
|
+
puts "-StackQueue, a Queue that is Stack-based (no real difference)"
|
9
|
+
puts "-MinMaxStack, a Stack that can return Min and Max in constant time"
|
10
|
+
puts "-MinMaxStackQueue, a Queue that can return Min and Max in constant time"
|
11
|
+
puts ""
|
12
|
+
puts "Each data type also has a help function. Type Zadt::Stack::help for a list of Stack functions, and so on."
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# A MinMaxStack is a stack that allows for Min and Max
|
2
|
+
# to be found in constant time, unlike a stack or
|
3
|
+
# array that generally takes linear time.
|
4
|
+
module Zadt
|
5
|
+
class MinMaxStack
|
6
|
+
def initialize
|
7
|
+
@values = []
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.help
|
11
|
+
puts "Here are the functions for MinMaxStack:"
|
12
|
+
puts "push(value)"
|
13
|
+
puts "pop"
|
14
|
+
puts "peek"
|
15
|
+
puts "min"
|
16
|
+
puts "max"
|
17
|
+
puts "length"
|
18
|
+
puts "show"
|
19
|
+
puts "empty?"
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.methods
|
23
|
+
self.help
|
24
|
+
end
|
25
|
+
|
26
|
+
def help
|
27
|
+
MinMaxStack.help
|
28
|
+
end
|
29
|
+
|
30
|
+
def methods
|
31
|
+
help
|
32
|
+
end
|
33
|
+
|
34
|
+
def push(val)
|
35
|
+
if @values.empty?
|
36
|
+
@values.push([val, val, val])
|
37
|
+
else
|
38
|
+
cur_min = @values.last[1]
|
39
|
+
cur_max = @values.last[2]
|
40
|
+
@values.push([val, [val, cur_min].min, [val, cur_max].max])
|
41
|
+
@values
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def pop
|
46
|
+
@values.pop[0]
|
47
|
+
end
|
48
|
+
|
49
|
+
def peek
|
50
|
+
@values.last[0]
|
51
|
+
end
|
52
|
+
|
53
|
+
def min
|
54
|
+
@values.empty? ? "Empty" : @values.last[1]
|
55
|
+
end
|
56
|
+
|
57
|
+
def max
|
58
|
+
@values.empty? ? "Empty" : @values.last[2]
|
59
|
+
end
|
60
|
+
|
61
|
+
def length
|
62
|
+
@values.length
|
63
|
+
end
|
64
|
+
|
65
|
+
def show
|
66
|
+
showthis = []
|
67
|
+
@values.map{|value| value[0]}
|
68
|
+
end
|
69
|
+
|
70
|
+
def empty?
|
71
|
+
@values.empty?
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# A MinMaxStackQueue is a queue that allows for Min and Max
|
2
|
+
# to be found in constant time, unlike a queue or
|
3
|
+
# array that generally takes linear time. It does this
|
4
|
+
# because it's based on a MinMaxStack, which has this
|
5
|
+
# ability.
|
6
|
+
module Zadt
|
7
|
+
class MinMaxStackQueue
|
8
|
+
def initialize
|
9
|
+
@in = MinMaxStack.new
|
10
|
+
@out = MinMaxStack.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.help
|
14
|
+
puts "Here are the functions for MinMaxStackQueue:"
|
15
|
+
puts "show"
|
16
|
+
puts "enqueue(value)"
|
17
|
+
puts "dequeue"
|
18
|
+
puts "min"
|
19
|
+
puts "max"
|
20
|
+
puts "length"
|
21
|
+
puts "empty?"
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.methods
|
25
|
+
self.help
|
26
|
+
end
|
27
|
+
|
28
|
+
def help
|
29
|
+
MinMaxStackQueue.help
|
30
|
+
end
|
31
|
+
|
32
|
+
def methods
|
33
|
+
help
|
34
|
+
end
|
35
|
+
|
36
|
+
def show
|
37
|
+
@out.show.reverse + @in.show
|
38
|
+
end
|
39
|
+
|
40
|
+
def enqueue(val)
|
41
|
+
@in.push(val)
|
42
|
+
end
|
43
|
+
|
44
|
+
def dequeue
|
45
|
+
if @out.empty?
|
46
|
+
@in.length.times do
|
47
|
+
@out.push(@in.pop)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
@out.pop
|
51
|
+
end
|
52
|
+
|
53
|
+
def min
|
54
|
+
if @in.empty?
|
55
|
+
@out.min
|
56
|
+
elsif @out.empty?
|
57
|
+
@in.min
|
58
|
+
else
|
59
|
+
[@in.min, @out.min].min
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def max
|
64
|
+
if @in.empty?
|
65
|
+
@out.max
|
66
|
+
elsif @out.empty?
|
67
|
+
@in.max
|
68
|
+
else
|
69
|
+
[@in.max, @out.max].max
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def length
|
74
|
+
@in.length + @out.length
|
75
|
+
end
|
76
|
+
|
77
|
+
def empty?
|
78
|
+
@in.empty? && @out.empty?
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Zadt
|
2
|
+
class Queue
|
3
|
+
def initialize
|
4
|
+
@values = Array.new
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.help
|
8
|
+
puts "Here are the functions for Queue:"
|
9
|
+
puts "show"
|
10
|
+
puts "enqueue(value)"
|
11
|
+
puts "dequeue"
|
12
|
+
puts "length"
|
13
|
+
puts "empty?"
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.methods
|
17
|
+
self.help
|
18
|
+
end
|
19
|
+
|
20
|
+
def help
|
21
|
+
Queue.help
|
22
|
+
end
|
23
|
+
|
24
|
+
def methods
|
25
|
+
help
|
26
|
+
end
|
27
|
+
|
28
|
+
def show
|
29
|
+
@values
|
30
|
+
end
|
31
|
+
|
32
|
+
def enqueue(val)
|
33
|
+
@values.push(val)
|
34
|
+
@values
|
35
|
+
end
|
36
|
+
|
37
|
+
def dequeue
|
38
|
+
@values.shift
|
39
|
+
end
|
40
|
+
|
41
|
+
def length
|
42
|
+
@values.length
|
43
|
+
end
|
44
|
+
|
45
|
+
def empty?
|
46
|
+
@values.empty?
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Zadt
|
2
|
+
class Stack
|
3
|
+
def initialize
|
4
|
+
@values = Array.new
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.help
|
8
|
+
puts "Here are the functions for Stack:"
|
9
|
+
puts "show"
|
10
|
+
puts "push(value)"
|
11
|
+
puts "pop"
|
12
|
+
puts "length"
|
13
|
+
puts "empty?"
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.methods
|
17
|
+
self.help
|
18
|
+
end
|
19
|
+
|
20
|
+
def help
|
21
|
+
Stack.help
|
22
|
+
end
|
23
|
+
|
24
|
+
def methods
|
25
|
+
help
|
26
|
+
end
|
27
|
+
|
28
|
+
def show
|
29
|
+
@values
|
30
|
+
end
|
31
|
+
|
32
|
+
def push(val)
|
33
|
+
@values.push(val)
|
34
|
+
@values
|
35
|
+
end
|
36
|
+
|
37
|
+
def pop
|
38
|
+
@values.pop
|
39
|
+
end
|
40
|
+
|
41
|
+
def length
|
42
|
+
@values.length
|
43
|
+
end
|
44
|
+
|
45
|
+
def empty?
|
46
|
+
@values.empty?
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# A StackQueue works just like a queue, but it's based on
|
2
|
+
# a Stack. Functionality-wise, it's exactly the same
|
3
|
+
# as a queue. I mainly made it as an exercise leading
|
4
|
+
# up to MinMaxStackQueue.
|
5
|
+
module Zadt
|
6
|
+
class StackQueue
|
7
|
+
def initialize
|
8
|
+
@in = Stack.new
|
9
|
+
@out = Stack.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.help
|
13
|
+
puts "Here are the functions for StackQueue:"
|
14
|
+
puts "show"
|
15
|
+
puts "enqueue(value)"
|
16
|
+
puts "dequeue"
|
17
|
+
puts "length"
|
18
|
+
puts "empty?"
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.methods
|
22
|
+
self.help
|
23
|
+
end
|
24
|
+
|
25
|
+
def help
|
26
|
+
StackQueue.help
|
27
|
+
end
|
28
|
+
|
29
|
+
def methods
|
30
|
+
help
|
31
|
+
end
|
32
|
+
|
33
|
+
def show
|
34
|
+
@out.show.reverse + @in.show
|
35
|
+
end
|
36
|
+
|
37
|
+
def enqueue(val)
|
38
|
+
@in.push(val)
|
39
|
+
end
|
40
|
+
|
41
|
+
def dequeue
|
42
|
+
if @out.empty?
|
43
|
+
@in.length.times do
|
44
|
+
@out.push(@in.pop)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
@out.pop
|
48
|
+
end
|
49
|
+
|
50
|
+
def length
|
51
|
+
@in.length + @out.length
|
52
|
+
end
|
53
|
+
|
54
|
+
def empty?
|
55
|
+
@values.empty?
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/lib/zadt/version.rb
CHANGED
data/lib/zadt.rb
CHANGED
data/zadt.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["benj@zagorski.com"]
|
11
11
|
|
12
12
|
spec.summary = %q{Zagorski ADT is a collection of advanced data types that are not included in the standard Ruby library.}
|
13
|
-
spec.description = %q{Includes the following Advanced Data Types: Stack, Queue, StackQueue, MinMaxStack, and MinMaxStackQueue.}
|
13
|
+
spec.description = %q{Includes the following Advanced Data Types: Stack, Queue, StackQueue, MinMaxStack, and MinMaxStackQueue. Once installed, type "Zadt::ADT::help" for a list of datatypes and basic functionality.}
|
14
14
|
spec.homepage = "https://github.com/MrMicrowaveOven/zadt.git"
|
15
15
|
spec.license = "MIT"
|
16
16
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zadt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benjamin Zagorski
|
@@ -53,13 +53,15 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
55
|
description: 'Includes the following Advanced Data Types: Stack, Queue, StackQueue,
|
56
|
-
MinMaxStack, and MinMaxStackQueue.
|
56
|
+
MinMaxStack, and MinMaxStackQueue. Once installed, type "Zadt::ADT::help" for a
|
57
|
+
list of datatypes and basic functionality.'
|
57
58
|
email:
|
58
59
|
- benj@zagorski.com
|
59
60
|
executables: []
|
60
61
|
extensions: []
|
61
62
|
extra_rdoc_files: []
|
62
63
|
files:
|
64
|
+
- ".DS_Store"
|
63
65
|
- ".gitignore"
|
64
66
|
- ".rspec"
|
65
67
|
- ".travis.yml"
|
@@ -70,7 +72,14 @@ files:
|
|
70
72
|
- Rakefile
|
71
73
|
- bin/console
|
72
74
|
- bin/setup
|
75
|
+
- lib/ADT_requireables.rb
|
73
76
|
- lib/zadt.rb
|
77
|
+
- lib/zadt/AbstractDataTypes/ADT.rb
|
78
|
+
- lib/zadt/AbstractDataTypes/MinMaxStack.rb
|
79
|
+
- lib/zadt/AbstractDataTypes/MinMaxStackQueue.rb
|
80
|
+
- lib/zadt/AbstractDataTypes/Queue.rb
|
81
|
+
- lib/zadt/AbstractDataTypes/Stack.rb
|
82
|
+
- lib/zadt/AbstractDataTypes/StackQueue.rb
|
74
83
|
- lib/zadt/version.rb
|
75
84
|
- zadt.gemspec
|
76
85
|
homepage: https://github.com/MrMicrowaveOven/zadt.git
|