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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5b340064ca215b577785aab75153fbf4be2d2d5b
4
- data.tar.gz: 343ce71da1b0747c6719ccae71c03b51aaa8b610
3
+ metadata.gz: 68b73fd67411141f66bd87e8ff498e04f912ed31
4
+ data.tar.gz: f878c3eb27b0853d95b309527dadccd6c5d171e4
5
5
  SHA512:
6
- metadata.gz: 23f1c6d9cc901e66b2929013555b8aa17a9c3939dfbfe9ecbf0289ea7276b28f52498e6db4b631cb9197ad4b390e4d92cd0f53f46a4f854bee296979742cd348
7
- data.tar.gz: 9815200aa801d4b11ab3a12e519acf8f56a9bbeecb3ef2b47edc76465b8b30432629045f59503b9ace205e156fd319eb80fd1f06f864a68dab720c5a759609ac
6
+ metadata.gz: b8e113ef337870295ba232ce6d3ac589c705da1bbbcc35cb82b929a8b037e726bab85c960c7ff8f24d2c161dbe70418f2235192a40267e45b7e032cdedc5fd36
7
+ data.tar.gz: 976a497b0ba1971295db2e3e4ccc96dd70cd5a16b7fa6a04db83e3ee263e09691740c51e53cf486bb7f65cea6b473cb73ee4af942b1c41f07f09d0ff87942692
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 Power']
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.11
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
- bTAeFw0xNzEwMDEyMzEzNTZaFw0xODEwMDEyMzEzNTZaMEAxEjAQBgNVBAMMCWx0
16
+ bTAeFw0xNzEwMDYyMjUyMzVaFw0xODEwMDYyMjUyMzVaMEAxEjAQBgNVBAMMCWx0
17
17
  ZnNjaG9lbjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYD
18
- Y29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuMBmDG4EWBtfY6nt
19
- 4LBxF0WZgmk3szCOwhRz3FlL0zcBpmPKOZOfO6WhukrRlmaMJz9QiZqI6oIVWhXc
20
- bCp9U6Dw9hikcuiJ3Bn0xFsQ1PJ79G+PfaxgFnbtjO+GQclMmUoUvSeXGVl0Mpv/
21
- VVONwwaHdzVMUGpOoONH/YOl1H0msWqeZHTomIfLTn+gIZ+MMaz6LztReOysKxMj
22
- vVlwlT3ekGzur5u27NwUAfUnAF0l4sHUdBPU4vhUaf85qlcBdD6eVg8qRF4edD27
23
- QfatFmSjQlCwMPM5/6mwhqiyKBGgWgeVVLM6Zha5r338EyR+5H1hETi2qGuQf96k
24
- O9mpIwIDAQABo3kwdzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU
25
- sGhGsGcuYnUXOpeEJFgrOI4BY/QwHgYDVR0RBBcwFYETbHRmc2Nob2VuQGdtYWls
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
- BQUAA4IBAQCGawOSbqMW77cpF4Uh32TdFMjt6DA0fzYv6M2FgqFLHzOI4jKAXYQw
28
- 29JKKkpZ227Zf822dURltQfHTjEVhMq8B0bnl/wcU9cumAmDAPxZAOGYi8LgutAi
29
- NGNXZ5dRfqx6nGjXSTU/NGEt/TtoM5OdaDmeP2mZeSAmz9Y68OLIjyHb9Bxwvsy4
30
- iIlbxzF5++a62dnuZ0ii59Wj70tH/guadhzriDUSgGxt6F1Maz2RLYaGsQD7NKa1
31
- UWfCTjh7JotaFGnTPWlySaAz9maIKufWomALq+3RP/j/j0Exc4h2CzhuxknMQHjY
32
- fjdbMlWFUWxTgI0x3elGzxxorRUmHJBw
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-02 00:00:00.000000000 Z
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 gem
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