discrete_math 0.0.11 → 0.0.12
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
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/modules/menus/submenu_demo.rb +6 -1
- data/lib/modules/topics/demos/algorithm_demo.rb +98 -0
- data/lib/modules/topics/demos/lib/movie.rb +28 -0
- data/lib/modules/topics/discrete_math_topics.rb +2 -0
- data/lib/utils/processing_spinner.rb +31 -0
- metadata +62 -18
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 68b73fd67411141f66bd87e8ff498e04f912ed31
|
4
|
+
data.tar.gz: f878c3eb27b0853d95b309527dadccd6c5d171e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b8e113ef337870295ba232ce6d3ac589c705da1bbbcc35cb82b929a8b037e726bab85c960c7ff8f24d2c161dbe70418f2235192a40267e45b7e032cdedc5fd36
|
7
|
+
data.tar.gz: 976a497b0ba1971295db2e3e4ccc96dd70cd5a16b7fa6a04db83e3ee263e09691740c51e53cf486bb7f65cea6b473cb73ee4af942b1c41f07f09d0ff87942692
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
@@ -12,7 +12,8 @@ module SubmenuDemo
|
|
12
12
|
t.title = 'Select a number'
|
13
13
|
t.add_row [0, 'Back to main menu']
|
14
14
|
t.add_row [1, 'Demo SHA-256 Checksum']
|
15
|
-
t.add_row [2, 'Demo
|
15
|
+
t.add_row [2, 'Demo Algorithm']
|
16
|
+
t.add_row [3, 'Demo Power']
|
16
17
|
t.style = { all_separators: true }
|
17
18
|
end
|
18
19
|
puts table
|
@@ -33,6 +34,10 @@ module SubmenuDemo
|
|
33
34
|
MenuHelpers.request_input_continue_for_menu("sub_demo")
|
34
35
|
SubmenuDemo.show_choices_sub_menu
|
35
36
|
when "2"
|
37
|
+
AlgorithmDemo.run
|
38
|
+
MenuHelpers.request_input_continue_for_menu("sub_demo")
|
39
|
+
SubmenuDemo.show_choices_sub_menu
|
40
|
+
when "3"
|
36
41
|
PowersDemo::Calculate.run
|
37
42
|
MenuHelpers.request_input_continue_for_menu("sub_demo")
|
38
43
|
SubmenuDemo.show_choices_sub_menu
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'algorithms'
|
2
|
+
require 'faker'
|
3
|
+
require 'benchmark'
|
4
|
+
require_relative './lib/movie.rb'
|
5
|
+
require_relative '../../../../lib/utils/processing_spinner'
|
6
|
+
|
7
|
+
module AlgorithmDemo
|
8
|
+
module Helpers
|
9
|
+
def self.generate_movies_list_of_size(size)
|
10
|
+
movies = []
|
11
|
+
size.times do
|
12
|
+
movies << Movie.new(Faker::Name.last_name, Faker::Name.name_with_middle)
|
13
|
+
end
|
14
|
+
movies
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.generate_hash_for_movies(movies)
|
18
|
+
hash = Hash.new
|
19
|
+
movies.each_with_index do |movie, index|
|
20
|
+
hash[movie.title] = movie.description
|
21
|
+
end
|
22
|
+
hash
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.generate_treemap_for_movies(movies)
|
26
|
+
map = Containers::RubyRBTreeMap.new
|
27
|
+
movies.each do |movie|
|
28
|
+
map.push(movie.title, movie.description)
|
29
|
+
end
|
30
|
+
map
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.sort_all_movies
|
34
|
+
Movie.all.sort
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.run_spinner(spinner)
|
39
|
+
spinner.start_processing
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.show_status_of_threads(threads)
|
43
|
+
threads.each_with_index { |thread, index|
|
44
|
+
puts "Thread #{index} status: #{thread.status ? 'OPEN' : 'CLOSED'}"
|
45
|
+
}
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.run
|
49
|
+
n = 3000
|
50
|
+
|
51
|
+
movies = AlgorithmDemo::Helpers.generate_movies_list_of_size(n)
|
52
|
+
AlgorithmDemo::Helpers.sort_all_movies
|
53
|
+
hash = AlgorithmDemo::Helpers.generate_hash_for_movies(movies)
|
54
|
+
treemap = AlgorithmDemo::Helpers.generate_treemap_for_movies(movies)
|
55
|
+
|
56
|
+
sample_key = Movie.all[-1].clone.title
|
57
|
+
sample_value = Movie.all[-1].clone.description
|
58
|
+
|
59
|
+
puts "Please wait, processing Big-O Benchmarks..."
|
60
|
+
spinner = Utils::Spinner.new
|
61
|
+
threads = []
|
62
|
+
# Ruby Threads - https://ruby-doc.org/core-2.4.2/Thread.html
|
63
|
+
spinner_thread = Thread.start { AlgorithmDemo.run_spinner(spinner) }
|
64
|
+
benchmarking_thread = Thread.start {
|
65
|
+
# O(1) - Benchmark Search/Lookup
|
66
|
+
# References:
|
67
|
+
# - https://ruby-doc.org/stdlib-2.4.2/libdoc/benchmark/rdoc/Benchmark.html
|
68
|
+
# - https://stackoverflow.com/questions/1592649/examples-of-algorithms-which-has-o1-on-log-n-and-olog-n-complexities
|
69
|
+
Benchmark.bm do |x|
|
70
|
+
x.report { treemap.get(sample_key) } # RubyRBTreeMap
|
71
|
+
x.report { hash[sample_key] } # Hash
|
72
|
+
end
|
73
|
+
|
74
|
+
# O(n) - Benchmark Delete
|
75
|
+
Benchmark.bm do |x|
|
76
|
+
x.report { treemap.delete(sample_key) } # RubyRBTreeMap
|
77
|
+
x.report { hash.delete(sample_key) } # Hash
|
78
|
+
end
|
79
|
+
|
80
|
+
# O(n^2) - Benchmark Sort
|
81
|
+
Benchmark.bm do |x|
|
82
|
+
x.report { Algorithms::Sort.bubble_sort Movie.all } # Bubble Sort
|
83
|
+
x.report { Movie.all.sort } # Object
|
84
|
+
end
|
85
|
+
|
86
|
+
# Stop spinner rotating
|
87
|
+
spinner.stop_processing
|
88
|
+
|
89
|
+
# Kill spinner thread
|
90
|
+
Thread.kill(spinner_thread)
|
91
|
+
}
|
92
|
+
threads << spinner_thread
|
93
|
+
threads << benchmarking_thread
|
94
|
+
threads.each { |thread| thread.join }
|
95
|
+
# AlgorithmDemo.show_status_of_threads(threads)
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class Movie
|
2
|
+
# Mixin Comparable assumes any class using it defines
|
3
|
+
# operator <=> and adds comparison operators and between? methods
|
4
|
+
# Reference: Page 90 of Programming Ruby textbook
|
5
|
+
include Comparable
|
6
|
+
attr_reader :title, :description
|
7
|
+
|
8
|
+
def initialize(title, description)
|
9
|
+
@title = title
|
10
|
+
@description = description
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_s
|
14
|
+
"#{@title}"
|
15
|
+
end
|
16
|
+
|
17
|
+
def <=>(other)
|
18
|
+
@title <=> other.title
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.all
|
22
|
+
ObjectSpace.each_object(self).to_a
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.count
|
26
|
+
all.count
|
27
|
+
end
|
28
|
+
end
|
@@ -1,10 +1,12 @@
|
|
1
1
|
require_relative './demos/powers_demo'
|
2
2
|
require_relative './demos/shasum_demo'
|
3
|
+
require_relative './demos/algorithm_demo'
|
3
4
|
|
4
5
|
# DiscreteMath::Preliminary
|
5
6
|
module DiscreteMathTopics
|
6
7
|
module PreliminaryMath
|
7
8
|
include PowersDemo
|
8
9
|
include ShasumDemo
|
10
|
+
include AlgorithmDemo
|
9
11
|
end
|
10
12
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Utils
|
2
|
+
class Spinner
|
3
|
+
|
4
|
+
def initialize
|
5
|
+
@wheel = ''
|
6
|
+
@processing = false
|
7
|
+
end
|
8
|
+
|
9
|
+
def start_processing
|
10
|
+
@wheel = %w{| / - \\}
|
11
|
+
@processing = true
|
12
|
+
while @processing do
|
13
|
+
print "\b" + @wheel.rotate!.first
|
14
|
+
sleep(0.1)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.all
|
19
|
+
ObjectSpace.each_object(self).to_a
|
20
|
+
end
|
21
|
+
|
22
|
+
def is_processing?
|
23
|
+
@processing
|
24
|
+
end
|
25
|
+
|
26
|
+
def stop_processing
|
27
|
+
@wheel = ''
|
28
|
+
@processing = false
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: discrete_math
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luke Schoen
|
@@ -13,25 +13,25 @@ cert_chain:
|
|
13
13
|
-----BEGIN CERTIFICATE-----
|
14
14
|
MIIDdDCCAlygAwIBAgIBATANBgkqhkiG9w0BAQUFADBAMRIwEAYDVQQDDAlsdGZz
|
15
15
|
Y2hvZW4xFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkWA2Nv
|
16
|
-
|
16
|
+
bTAeFw0xNzEwMDYyMjUyMzVaFw0xODEwMDYyMjUyMzVaMEAxEjAQBgNVBAMMCWx0
|
17
17
|
ZnNjaG9lbjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYD
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
18
|
+
Y29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtUXjXVL5nEF8mQKo
|
19
|
+
PBTkD+YFGmSAbCp+nZLaqAH2LTj+pBilYJdx03r/yegWfQGwtt0LtLRQeDRtWoUt
|
20
|
+
Btdg5zqLuTKABbNi1zzIQX6Hx111OhB0Vk8diglH25u1F6AHRBZBRA4EazfIXRyx
|
21
|
+
5K00bCjYmdyjr+EnaueJslDhTUluNHxA1BtLdhoJZMUQQUHpos5bQpD8i50SlA//
|
22
|
+
1cjmaFhkWUDGuWxp9m/YWtBoFohaIZuN0LQJgAXx3oZkYkOyjD4MJO7hKNiK35Re
|
23
|
+
6g0X3Ql67+IU47/y15NYeQ7KJDwAEse7srKXM258c5L4hrp4N/Kt4jww+IUkVVhL
|
24
|
+
DUbCwQIDAQABo3kwdzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU
|
25
|
+
f1GXPyUwlsif/Mkz8jJ23QmzC/UwHgYDVR0RBBcwFYETbHRmc2Nob2VuQGdtYWls
|
26
26
|
LmNvbTAeBgNVHRIEFzAVgRNsdGZzY2hvZW5AZ21haWwuY29tMA0GCSqGSIb3DQEB
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
27
|
+
BQUAA4IBAQBMQaQYR4CKegM6B859t1gvxbMaMsUqbRdc33zpe4H/cxaiXCy7shKe
|
28
|
+
uBhlOaPa5B8twxTFZqhU7+GXZj2Q1yI9S63cFxxjv6H3r6zIEYHIajiWDt+1armU
|
29
|
+
myyUix/eDLTqzZN8A6VjKtUlgiXK6NVlQk8sadJKnKPjb3fmkaVjqNSJTFqUvIyh
|
30
|
+
0Bs9lXxq/Vxm2wDHKv98ypDnDx5jwjOa1kw3AKBKnEYMpRBNR2BydFp7giFl2Rfj
|
31
|
+
RffEuh7t+xfGvcIj31MoYtK7umh0B9BkchO+k3TftEEM1zF/Tj6QBs8QbpHoyofx
|
32
|
+
yyM5w8a39Uhr8CuxKJuMs60PK8pLayLW
|
33
33
|
-----END CERTIFICATE-----
|
34
|
-
date: 2017-10-
|
34
|
+
date: 2017-10-07 00:00:00.000000000 Z
|
35
35
|
dependencies:
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
@@ -93,6 +93,46 @@ dependencies:
|
|
93
93
|
- - ">="
|
94
94
|
- !ruby/object:Gem::Version
|
95
95
|
version: 2.0.2
|
96
|
+
- !ruby/object:Gem::Dependency
|
97
|
+
name: algorithms
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0.6'
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: 0.6.1
|
106
|
+
type: :runtime
|
107
|
+
prerelease: false
|
108
|
+
version_requirements: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - "~>"
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0.6'
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: 0.6.1
|
116
|
+
- !ruby/object:Gem::Dependency
|
117
|
+
name: faker
|
118
|
+
requirement: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - "~>"
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '0.8'
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 0.8.6
|
126
|
+
type: :runtime
|
127
|
+
prerelease: false
|
128
|
+
version_requirements: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - "~>"
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0.8'
|
133
|
+
- - ">="
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: 0.8.6
|
96
136
|
- !ruby/object:Gem::Dependency
|
97
137
|
name: rspec
|
98
138
|
requirement: !ruby/object:Gem::Requirement
|
@@ -113,7 +153,8 @@ dependencies:
|
|
113
153
|
- - ">="
|
114
154
|
- !ruby/object:Gem::Version
|
115
155
|
version: 3.6.0
|
116
|
-
description: A discrete math
|
156
|
+
description: A discrete math interactive terminal app with sub-menus and demos including
|
157
|
+
a RubyGems checksum validator and Big-O benchmarks using a spinner with threads
|
117
158
|
email: ltfschoen@gmail.com
|
118
159
|
executables:
|
119
160
|
- discrete
|
@@ -127,9 +168,12 @@ files:
|
|
127
168
|
- lib/modules/menus/menu.rb
|
128
169
|
- lib/modules/menus/submenu_demo.rb
|
129
170
|
- lib/modules/menus/submenu_help.rb
|
171
|
+
- lib/modules/topics/demos/algorithm_demo.rb
|
172
|
+
- lib/modules/topics/demos/lib/movie.rb
|
130
173
|
- lib/modules/topics/demos/powers_demo.rb
|
131
174
|
- lib/modules/topics/demos/shasum_demo.rb
|
132
175
|
- lib/modules/topics/discrete_math_topics.rb
|
176
|
+
- lib/utils/processing_spinner.rb
|
133
177
|
homepage: https://github.com/ltfschoen/discrete_math
|
134
178
|
licenses:
|
135
179
|
- MIT
|
metadata.gz.sig
CHANGED
Binary file
|