silicium 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +4 -0
  3. data/.gitignore +13 -0
  4. data/.travis.yml +25 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +8 -0
  7. data/LICENSE.txt +21 -0
  8. data/Makefile +269 -0
  9. data/README.md +46 -0
  10. data/Rakefile +17 -0
  11. data/bin/console +14 -0
  12. data/bin/setup +8 -0
  13. data/docs/Object.html +117 -0
  14. data/docs/README_md.html +142 -0
  15. data/docs/Silicium/Combinatorics.html +270 -0
  16. data/docs/Silicium/Dice/Polyhedron.html +315 -0
  17. data/docs/Silicium/Dice/PolyhedronSet.html +321 -0
  18. data/docs/Silicium/Dice.html +99 -0
  19. data/docs/Silicium/Error.html +106 -0
  20. data/docs/Silicium/Geometry/Line2dCanon.html +243 -0
  21. data/docs/Silicium/Geometry/VariablesOrderException.html +106 -0
  22. data/docs/Silicium/Geometry.html +940 -0
  23. data/docs/Silicium/Graphs/GraphError.html +106 -0
  24. data/docs/Silicium/Graphs/OrientedGraph.html +775 -0
  25. data/docs/Silicium/Graphs/UnorientedGraph.html +284 -0
  26. data/docs/Silicium/Graphs.html +164 -0
  27. data/docs/Silicium/IntegralDoesntExistError.html +106 -0
  28. data/docs/Silicium/NumericalIntegration.html +521 -0
  29. data/docs/Silicium/Optimization.html +639 -0
  30. data/docs/Silicium/Plotter/Image.html +297 -0
  31. data/docs/Silicium/Plotter.html +186 -0
  32. data/docs/Silicium.html +101 -0
  33. data/docs/created.rid +9 -0
  34. data/docs/css/fonts.css +167 -0
  35. data/docs/css/rdoc.css +619 -0
  36. data/docs/fonts/Lato-Light.ttf +0 -0
  37. data/docs/fonts/Lato-LightItalic.ttf +0 -0
  38. data/docs/fonts/Lato-Regular.ttf +0 -0
  39. data/docs/fonts/Lato-RegularItalic.ttf +0 -0
  40. data/docs/fonts/SourceCodePro-Bold.ttf +0 -0
  41. data/docs/fonts/SourceCodePro-Regular.ttf +0 -0
  42. data/docs/images/add.png +0 -0
  43. data/docs/images/arrow_up.png +0 -0
  44. data/docs/images/brick.png +0 -0
  45. data/docs/images/brick_link.png +0 -0
  46. data/docs/images/bug.png +0 -0
  47. data/docs/images/bullet_black.png +0 -0
  48. data/docs/images/bullet_toggle_minus.png +0 -0
  49. data/docs/images/bullet_toggle_plus.png +0 -0
  50. data/docs/images/date.png +0 -0
  51. data/docs/images/delete.png +0 -0
  52. data/docs/images/find.png +0 -0
  53. data/docs/images/loadingAnimation.gif +0 -0
  54. data/docs/images/macFFBgHack.png +0 -0
  55. data/docs/images/package.png +0 -0
  56. data/docs/images/page_green.png +0 -0
  57. data/docs/images/page_white_text.png +0 -0
  58. data/docs/images/page_white_width.png +0 -0
  59. data/docs/images/plugin.png +0 -0
  60. data/docs/images/ruby.png +0 -0
  61. data/docs/images/tag_blue.png +0 -0
  62. data/docs/images/tag_green.png +0 -0
  63. data/docs/images/transparent.png +0 -0
  64. data/docs/images/wrench.png +0 -0
  65. data/docs/images/wrench_orange.png +0 -0
  66. data/docs/images/zoom.png +0 -0
  67. data/docs/index.html +132 -0
  68. data/docs/js/darkfish.js +84 -0
  69. data/docs/js/navigation.js +105 -0
  70. data/docs/js/navigation.js.gz +0 -0
  71. data/docs/js/search.js +110 -0
  72. data/docs/js/search_index.js +1 -0
  73. data/docs/js/search_index.js.gz +0 -0
  74. data/docs/js/searcher.js +229 -0
  75. data/docs/js/searcher.js.gz +0 -0
  76. data/docs/table_of_contents.html +608 -0
  77. data/lib/geometry.rb +236 -0
  78. data/lib/graph.rb +164 -0
  79. data/lib/numerical_integration.rb +147 -0
  80. data/lib/optimization.rb +144 -0
  81. data/lib/plotter.rb +96 -0
  82. data/lib/silicium/version.rb +3 -0
  83. data/lib/silicium.rb +5 -0
  84. data/lib/theory_of_probability.rb +227 -0
  85. data/silicium.gemspec +39 -0
  86. metadata +185 -0
data/lib/plotter.rb ADDED
@@ -0,0 +1,96 @@
1
+ require 'silicium'
2
+ require 'chunky_png'
3
+
4
+ module Silicium
5
+ module Plotter
6
+ ##
7
+ # Factory method to return a color value, based on the arguments given.
8
+ #
9
+ # @overload Color(r, g, b, a)
10
+ # @param (see ChunkyPNG::Color.rgba)
11
+ # @return [Integer] The rgba color value.
12
+ #
13
+ # @overload Color(r, g, b)
14
+ # @param (see ChunkyPNG::Color.rgb)
15
+ # @return [Integer] The rgb color value.
16
+ #
17
+ # @overload Color(hex_value, opacity = nil)
18
+ # @param (see ChunkyPNG::Color.from_hex)
19
+ # @return [Integer] The hex color value, with the opacity applied if one
20
+ # was given.
21
+ #
22
+ # @overload Color(color_name, opacity = nil)
23
+ # @param (see ChunkyPNG::Color.html_color)
24
+ # @return [Integer] The hex color value, with the opacity applied if one
25
+ # was given.
26
+ #
27
+ # @overload Color(color_value, opacity = nil)
28
+ # @param [Integer, :to_i] The color value.
29
+ # @return [Integer] The color value, with the opacity applied if one was
30
+ # given.
31
+ #
32
+ # @return [Integer] The determined color value as RGBA integer.
33
+ # @raise [ArgumentError] if the arguments weren't understood as a color.
34
+ def color(*args)
35
+ case args.length
36
+ when 1; ChunkyPNG::Color.parse(args.first)
37
+ when 2; (ChunkyPNG::Color.parse(args.first) & 0xffffff00) | args[1].to_i
38
+ when 3; ChunkyPNG::Color.rgb(*args)
39
+ when 4; ChunkyPNG::Color.rgba(*args)
40
+ else raise ArgumentError, "Don't know how to create a color from #{args.inspect}!"
41
+ end
42
+ end
43
+ ##
44
+ # A class representing canvas for plotting bar charts and function graphs
45
+ class Image
46
+ ##
47
+ # Creates a new plot with chosen +width+ and +height+ parameters
48
+ # with background colored +bg_color+
49
+ def initialize(width, height, bg_color = ChunkyPNG::Color::TRANSPARENT)
50
+ @image = ChunkyPNG::Image.new(width, height, bg_color)
51
+ end
52
+
53
+ def rectangle(x, y, width, height, color)
54
+ x_end = x + width - 1
55
+ y_end = y + height - 1
56
+ (x..x_end).each do |i|
57
+ (y..y_end).each do |j|
58
+ @image[i, j] = color
59
+ end
60
+ end
61
+ end
62
+
63
+ ##
64
+ # Draws a bar chart in the plot using provided +bars+,
65
+ # each of them has width of +bar_width+ and colored +bars_color+
66
+ def bar_chart(bars, bar_width, bars_color = ChunkyPNG::Color('red @ 1.0'), axis_color = ChunkyPNG::Color::BLACK)
67
+ if bars.count * bar_width > @image.width
68
+ raise ArgumentError, 'Not enough big size of image to plot these number of bars'
69
+ end
70
+
71
+ padding = 5
72
+ # Values of x and y on borders of plot
73
+ minx = [bars.collect { |k, _| k }.min, 0].min
74
+ maxx = [bars.collect { |k, _| k }.max, 0].max
75
+ miny = [bars.collect { |_, v| v }.min, 0].min
76
+ maxy = [bars.collect { |_, v| v }.max, 0].max
77
+ dpux = Float((@image.width - 2 * padding)) / (maxx - minx + bar_width) # Dots per unit for X
78
+ dpuy = Float((@image.height - 2 * padding)) / (maxy - miny) # Dots per unit for Y
79
+ rectangle(padding, @image.height - padding - (miny.abs * dpuy).ceil, @image.width - 2 * padding, 1, axis_color) # Axis OX
80
+ rectangle(padding + (minx.abs * dpux).ceil, padding, 1, @image.height - 2 * padding, axis_color) # Axis OY
81
+
82
+ bars.each do |x, y| # Cycle drawing bars
83
+ rectangle(padding + ((x + minx.abs) * dpux).floor,
84
+ @image.height - padding - (([y, 0].max + miny.abs) * dpuy).ceil + (y.negative? ? 1 : 0),
85
+ bar_width, (y.abs * dpuy).ceil, bars_color)
86
+ end
87
+ end
88
+
89
+ ##
90
+ # Exports plotted image to file +filename+
91
+ def export(filename)
92
+ @image.save(filename, :interlace => true)
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,3 @@
1
+ module Silicium
2
+ VERSION = "0.0.2"
3
+ end
data/lib/silicium.rb ADDED
@@ -0,0 +1,5 @@
1
+ require "silicium/version"
2
+
3
+ module Silicium
4
+ class Error < StandardError; end
5
+ end
@@ -0,0 +1,227 @@
1
+ require 'silicium'
2
+ require 'plotter'
3
+ require 'chunky_png'
4
+
5
+ include Silicium::Plotter
6
+ module Silicium
7
+
8
+ module Combinatorics
9
+
10
+ def factorial(n)
11
+ res = (1..n).inject(:*) || 1
12
+ res
13
+ end
14
+
15
+ ##
16
+ #Factorial for counting 3 parameters in one run
17
+ def fact(n, k)
18
+ res = [1,1,1]
19
+ if n > 1
20
+ fact_n_greater_1(n, k, res)
21
+ end
22
+ res
23
+ end
24
+
25
+ ##
26
+ #Function C(n,k)
27
+ def combination(n, k)
28
+ f = fact(n, k)
29
+ if n < k or k <= 0
30
+ -1
31
+ else
32
+ f[0] / (f[2] * f[1])
33
+ end
34
+ end
35
+
36
+ ##
37
+ #Function A(n,k)
38
+ def arrangement(n, k)
39
+ f = fact(n, k)
40
+ if n < k or k <= 0
41
+ -1
42
+ else
43
+ f[0] / f[1]
44
+ end
45
+ end
46
+
47
+ private
48
+
49
+ def fact_n_greater_1(n,k, res)
50
+ c = 1
51
+ for i in 2..n
52
+ c *= i
53
+ determining_i([i, n, k, c], res)
54
+ end
55
+ res[0] = c
56
+ end
57
+
58
+ def determining_i(arr, res)
59
+ if arr[0] == arr[1] - arr[2]
60
+ res[1] = arr[3]
61
+ end
62
+ if arr[0] == arr[2]
63
+ res[2] = arr[3]
64
+ end
65
+ end
66
+
67
+ end
68
+
69
+ module Dice
70
+
71
+ ##
72
+ # Class represents a polyhedron
73
+ # csides - number or sides
74
+ # sides - array of sides(unusual for custom polyhedrons)
75
+ class Polyhedron
76
+
77
+ def csides
78
+ @csides
79
+ end
80
+
81
+ def sides
82
+ @sides
83
+ end
84
+
85
+ def to_s
86
+ sides
87
+ end
88
+
89
+ ##
90
+ # initializing polyhedron's variables
91
+ # there are two ways how to create it
92
+ # 1: by number (6) - creates polyhedron with 6 sides [1,2,3,4,5,6]
93
+ # 2: by array ([1,3,5]) - creates polyhedron with 3 sides [1,3,5]
94
+ def initialize(sides)
95
+ @csides = 1
96
+ @sides = [1]
97
+ if sides.class == Integer and sides > 1
98
+ @csides = sides
99
+ (2..sides).each {|i| @sides << i}
100
+ elsif sides.class == Array and sides.size > 0
101
+ @csides = sides.size
102
+ @sides = sides.sort
103
+ end
104
+ end
105
+
106
+ ##
107
+ # ability to throw a polyhedron
108
+ def throw
109
+ @sides[rand(0..@csides-1)]
110
+ end
111
+ end
112
+
113
+ ##
114
+ # Class represents a PolyhedronsSet
115
+ # percentage - hash with chances of getting definite score
116
+ class PolyhedronSet
117
+
118
+ def initialize(arr)
119
+ @pons = parse_pons(arr).sort_by{|item| -item.csides}
120
+ @percentage = count_chance_sum
121
+ end
122
+
123
+ def percentage
124
+ @percentage
125
+ end
126
+
127
+ ##
128
+ # returns array of polyhedrons
129
+ def to_s
130
+ res = @pons.map {|item| item.to_s}
131
+ res
132
+ end
133
+
134
+ ##
135
+ # ability to throw a polyhedron's set using hash of chances
136
+ def throw
137
+ sum = 0
138
+ r = rand
139
+ @percentage.each do |item|
140
+ sum += item[1]
141
+ if sum > r
142
+ item[0]
143
+ break
144
+ end
145
+ end
146
+ end
147
+
148
+ ##
149
+ # creating a graph representing chances of getting points
150
+ def make_graph_by_plotter(x = percentage.size * 10, y = percentage.size * 10)
151
+ filename = 'tmp/percentage.png'
152
+ File.delete(filename) if File.exist?(filename)
153
+ plotter = Image.new(x, y)
154
+ plotter.bar_chart(percentage, 1, color('red @ 1.0'))
155
+ plotter.export(filename)
156
+ end
157
+
158
+ private
159
+
160
+ def parse_pons(arr)
161
+ res = []
162
+ arr.each do |item|
163
+ res << Polyhedron.new(item)
164
+ end
165
+ res
166
+ end
167
+
168
+ def count_chance_sum_chances_step(arr1, arr2, arr3, h)
169
+ n = 0
170
+ m = 0
171
+ sum = 0
172
+ q = Queue.new
173
+ h1 = Hash.new
174
+ while m < arr2.size
175
+ sum = m_0([sum, n, m], q, h, arr1)
176
+ if q.size > arr2.size or m > 0
177
+ sum -= q.pop
178
+ end
179
+ h1[arr1[n] + arr2[m]] = sum
180
+ arr3 << (arr1[n] + arr2[m])
181
+ nmarr = n_less_arr1_size(n, arr1, m)
182
+ n, m = nmarr[0], nmarr[1]
183
+ end
184
+ h1
185
+ end
186
+
187
+ def m_0(arr, q, h, arr1)
188
+ if arr[2] == 0
189
+ a = h[arr1[arr[1]]]
190
+ q << a
191
+ arr[0] += a
192
+ end
193
+ arr[0]
194
+ end
195
+
196
+ def n_less_arr1_size(n, arr1, m)
197
+ if n < arr1.size - 1
198
+ n += 1
199
+ else
200
+ m += 1
201
+ end
202
+ [n,m]
203
+ end
204
+
205
+ def count_chance_sum
206
+ h = Hash.new
207
+ @pons[0].sides.each do |item|
208
+ h[item] = 1
209
+ end
210
+ arr3 = @pons[0].sides
211
+ for i in 1..@pons.size - 1
212
+ arr1 = arr3
213
+ arr3 = Array.new
214
+ arr2 = @pons[i].sides
215
+ h1 = count_chance_sum_chances_step(arr1, arr2, arr3, h)
216
+ h = h1
217
+ h1 = Hash.new
218
+ end
219
+ res = Hash.new
220
+ fchance = @pons.inject(1) { |mult, item| mult * item.csides }
221
+ arr3.each {|item| res[item] = Float(h[item]) / fchance}
222
+ res
223
+ end
224
+
225
+ end
226
+ end
227
+ end
data/silicium.gemspec ADDED
@@ -0,0 +1,39 @@
1
+ lib = File.expand_path("lib", __dir__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require "silicium/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "silicium"
7
+ spec.version = Silicium::VERSION
8
+ spec.authors = ["mmcs-ruby"]
9
+ spec.email = ["poganesyan@sfedu.ru"]
10
+
11
+ spec.summary = %q{Ruby math library made as exercise by MMCS students .}
12
+ spec.description = %q{Long list of applied functions}
13
+ # spec.homepage = "TODO: Put your gem's website or public repo URL here."
14
+ spec.license = "MIT"
15
+
16
+ =begin
17
+
18
+ spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
19
+
20
+ spec.metadata["homepage_uri"] = spec.homepage
21
+
22
+ spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
23
+ =end
24
+ spec.metadata["source_code_uri"] = 'https://github.com/mmcs-ruby/silicium'
25
+ # Specify which files should be added to the gem when it is released.
26
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
27
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
28
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
29
+ end
30
+ spec.bindir = "exe"
31
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
+ spec.require_paths = ["lib"]
33
+
34
+ spec.add_development_dependency "bundler", "~> 2.0"
35
+ spec.add_development_dependency "rake", "~> 10.0"
36
+ spec.add_development_dependency "minitest", "~> 5.0"
37
+ spec.add_development_dependency 'simplecov'
38
+
39
+ end
metadata ADDED
@@ -0,0 +1,185 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: silicium
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - mmcs-ruby
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-10-31 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Long list of applied functions
70
+ email:
71
+ - poganesyan@sfedu.ru
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - ".codeclimate.yml"
77
+ - ".gitignore"
78
+ - ".travis.yml"
79
+ - CODE_OF_CONDUCT.md
80
+ - Gemfile
81
+ - LICENSE.txt
82
+ - Makefile
83
+ - README.md
84
+ - Rakefile
85
+ - bin/console
86
+ - bin/setup
87
+ - docs/Object.html
88
+ - docs/README_md.html
89
+ - docs/Silicium.html
90
+ - docs/Silicium/Combinatorics.html
91
+ - docs/Silicium/Dice.html
92
+ - docs/Silicium/Dice/Polyhedron.html
93
+ - docs/Silicium/Dice/PolyhedronSet.html
94
+ - docs/Silicium/Error.html
95
+ - docs/Silicium/Geometry.html
96
+ - docs/Silicium/Geometry/Line2dCanon.html
97
+ - docs/Silicium/Geometry/VariablesOrderException.html
98
+ - docs/Silicium/Graphs.html
99
+ - docs/Silicium/Graphs/GraphError.html
100
+ - docs/Silicium/Graphs/OrientedGraph.html
101
+ - docs/Silicium/Graphs/UnorientedGraph.html
102
+ - docs/Silicium/IntegralDoesntExistError.html
103
+ - docs/Silicium/NumericalIntegration.html
104
+ - docs/Silicium/Optimization.html
105
+ - docs/Silicium/Plotter.html
106
+ - docs/Silicium/Plotter/Image.html
107
+ - docs/created.rid
108
+ - docs/css/fonts.css
109
+ - docs/css/rdoc.css
110
+ - docs/fonts/Lato-Light.ttf
111
+ - docs/fonts/Lato-LightItalic.ttf
112
+ - docs/fonts/Lato-Regular.ttf
113
+ - docs/fonts/Lato-RegularItalic.ttf
114
+ - docs/fonts/SourceCodePro-Bold.ttf
115
+ - docs/fonts/SourceCodePro-Regular.ttf
116
+ - docs/images/add.png
117
+ - docs/images/arrow_up.png
118
+ - docs/images/brick.png
119
+ - docs/images/brick_link.png
120
+ - docs/images/bug.png
121
+ - docs/images/bullet_black.png
122
+ - docs/images/bullet_toggle_minus.png
123
+ - docs/images/bullet_toggle_plus.png
124
+ - docs/images/date.png
125
+ - docs/images/delete.png
126
+ - docs/images/find.png
127
+ - docs/images/loadingAnimation.gif
128
+ - docs/images/macFFBgHack.png
129
+ - docs/images/package.png
130
+ - docs/images/page_green.png
131
+ - docs/images/page_white_text.png
132
+ - docs/images/page_white_width.png
133
+ - docs/images/plugin.png
134
+ - docs/images/ruby.png
135
+ - docs/images/tag_blue.png
136
+ - docs/images/tag_green.png
137
+ - docs/images/transparent.png
138
+ - docs/images/wrench.png
139
+ - docs/images/wrench_orange.png
140
+ - docs/images/zoom.png
141
+ - docs/index.html
142
+ - docs/js/darkfish.js
143
+ - docs/js/navigation.js
144
+ - docs/js/navigation.js.gz
145
+ - docs/js/search.js
146
+ - docs/js/search_index.js
147
+ - docs/js/search_index.js.gz
148
+ - docs/js/searcher.js
149
+ - docs/js/searcher.js.gz
150
+ - docs/table_of_contents.html
151
+ - lib/geometry.rb
152
+ - lib/graph.rb
153
+ - lib/numerical_integration.rb
154
+ - lib/optimization.rb
155
+ - lib/plotter.rb
156
+ - lib/silicium.rb
157
+ - lib/silicium/version.rb
158
+ - lib/theory_of_probability.rb
159
+ - silicium.gemspec
160
+ homepage:
161
+ licenses:
162
+ - MIT
163
+ metadata:
164
+ source_code_uri: https://github.com/mmcs-ruby/silicium
165
+ post_install_message:
166
+ rdoc_options: []
167
+ require_paths:
168
+ - lib
169
+ required_ruby_version: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ required_rubygems_version: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: '0'
179
+ requirements: []
180
+ rubyforge_project:
181
+ rubygems_version: 2.7.7
182
+ signing_key:
183
+ specification_version: 4
184
+ summary: Ruby math library made as exercise by MMCS students .
185
+ test_files: []