keyhit_pain 1.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 9ce72c7f173a4d4bdcc8e9d5e54d3c490e0776491feded32d7759ef1b463f7c0
4
+ data.tar.gz: 2d209e330fea1bdb2130f9d3dc697ca2ac101e31e1cdabca48b15a7372e16452
5
+ SHA512:
6
+ metadata.gz: 954541d23056d736f75863f7d34414abb10c6273fa7998fe8e939235d921adb0c5e70c6b63575ed60a7db71dd7872c24dbf8c9f28fbe03feeef286e6f7051352
7
+ data.tar.gz: cb82d9bbe11475666459a2c973dbe25bfa85b93cfa18657808465b981da621fe0eb82d7640ceee32de9c74da1fd4871c542d54f6961e985107b34fd189f19908
@@ -0,0 +1,126 @@
1
+ # require 'colorize'
2
+
3
+ module KeyhitPain
4
+ autoload :Classes, 'keyhit_pain/classes'
5
+ # # -----------------------------------------------------------------
6
+ # task = '1.3'
7
+ # puts "----| Execution 1 | of task #{task} -----".white.on_black
8
+ # unit = 'meter'
9
+ # units = 'meters'
10
+ # edge_cube_length = 2
11
+
12
+ # volume = Classes::Cube.volume(edge_cube_length)
13
+ # square = Classes::Cube.cube_plane_square(edge_cube_length)
14
+
15
+ # condition = 'We have length edge of cube equal = '\
16
+ # "#{edge_cube_length} #{units}."\
17
+ # ' Find volume and square of cube.'.yellow
18
+
19
+ # puts condition
20
+ # puts "Volume of cube = #{volume} cubic #{unit}."
21
+ # puts "Cube plane square = #{square} square #{units}."
22
+ # puts
23
+
24
+ # # -----------------------------------------------------------------
25
+ # task = '1.4'
26
+ # puts "----| Execution 2 | of task #{task} -----".white.on_black
27
+ # number1 = 30
28
+ # number2 = 19
29
+ # numbers = [number1, number2]
30
+
31
+ # average = Classes::Average.count(numbers)
32
+ # geometric = Classes::GeometricMean.count(numbers)
33
+
34
+ # puts "We have two numbers #{number1} and #{number2}."\
35
+ # 'Find average and geometric mean'.yellow
36
+ # puts "Average #{number1} and #{number2} is #{average}"
37
+ # puts "Geometric mean #{number1} and #{number2} is #{geometric}"
38
+ # puts
39
+
40
+ # # -----------------------------------------------------------------
41
+ # task = '1.5'
42
+ # puts "----| Execution 3 | of task #{task} -----".white.on_black
43
+
44
+ # number1 = -30
45
+ # number2 = 19
46
+ # numbers = [number1, number2]
47
+
48
+ # average = Classes::Average.count(numbers)
49
+ # geometric = Classes::GeometricMeanModule.count(numbers)
50
+
51
+ # puts "We have two numbers #{number1} and #{number2}.".yellow
52
+ # puts 'Find average and geometric mean'.yellow
53
+ # puts "Average #{number1} and #{number2} is #{average}"
54
+ # puts "Geometric mean #{number1} and #{number2} by module is #{geometric}"
55
+ # puts
56
+
57
+ # # -----------------------------------------------------------------
58
+
59
+ # task = '1.6'
60
+ # puts "----| Execution 4 | of task #{task} -----".white.on_black
61
+ # cathetus1 = 3
62
+ # cathetus2 = 6.5
63
+
64
+ # angle = { a: 90 }
65
+ # angle_side = { b: cathetus1, c: cathetus2 }
66
+
67
+ # triangle = Classes::Triangle.new(angle, angle_side)
68
+ # square = triangle.square
69
+ # hypotenuse = triangle.hypotenuse
70
+
71
+ # puts "Cathetus 1 = #{cathetus1} sm and cathetus 2 = #{cathetus2} sm.".yellow
72
+ # puts 'Finf triangle sqare and hypotenuse'.yellow
73
+ # puts "Hypotenuse is #{hypotenuse} sm."
74
+ # puts "Triangle square is #{square} square sm."
75
+ # puts
76
+
77
+ # task = '1.12'
78
+ # puts "----| Execution 5 | of task #{task} -----".white.on_black
79
+ # side = 5
80
+
81
+ # sides_length = { a: side, b: side, c: side }
82
+ # angle = { a: 60 }
83
+
84
+ # triangle = Classes::Triangle.new(angle, sides_length)
85
+ # square = triangle.square
86
+
87
+ # puts "Triangle side = #{side} sm".yellow
88
+ # puts 'Find triangle square'.yellow
89
+ # puts "Triangle square is #{square} square sm."
90
+ # puts
91
+
92
+ # task = '1.15'
93
+ # puts "----| Execution 6 | of task #{task} -----".white.on_black
94
+
95
+ # hypotenuse = 20
96
+ # cathetus = 10
97
+ # angle = { a: 90 }
98
+ # side = { a: hypotenuse, b: cathetus }
99
+
100
+ # find = Classes::Triangle.new(angle, side)
101
+ # second_cathetus = find.cathetus
102
+ # side[:c] = second_cathetus
103
+
104
+ # find = Classes::Triangle.new(angle, side)
105
+ # radius = find.radius_circle_inside_triangle
106
+
107
+ # puts "Hypotenuse = #{hypotenuse} sm, cathetus = #{cathetus} sm.".yellow
108
+ # puts '1. Find second cathetus'.yellow
109
+ # puts '2. Find radius of circle drower inside this triangle'.yellow
110
+
111
+ # puts "1. Second cathetus = #{second_cathetus} sm."
112
+ # puts "2. Radius = #{radius}sm."
113
+ # puts
114
+
115
+ # task = '1.16'
116
+ # puts "----| Execution 7 | of task #{task} -----".white.on_black
117
+ # circle_length = 50
118
+
119
+ # circle = Classes::Circle.new(circle_length)
120
+ # circle_square = circle.square
121
+
122
+ # puts "Circle length = #{circle_length} sm.".yellow
123
+ # puts 'Find square this circle.'.yellow
124
+ # puts "Circle square = #{circle_square} square sm."
125
+ # puts
126
+ end
@@ -0,0 +1,169 @@
1
+ # require 'colorize'
2
+ # require 'pry'
3
+
4
+ module KeyhitPain
5
+ module Classes
6
+ class Test
7
+ def initalizer(actual, expected, comment)
8
+ @actual = actual
9
+ @expected = expected
10
+ @comment = comment
11
+ end
12
+
13
+ def self.result(expected, actual, comment)
14
+ if actual == expected
15
+ puts "Data comparison PASSED in #{comment} task.".green
16
+ else
17
+ puts "Data comparison FAILED in #{comment} task.".red
18
+ end
19
+ end
20
+ end
21
+
22
+ class Cube
23
+ def self.volume(edge)
24
+ edge**3
25
+ end
26
+
27
+ def self.cube_plane_square(edge)
28
+ edge**2
29
+ end
30
+ end
31
+
32
+ class Average
33
+ def self.count(numbers)
34
+ summury_elements_array = numbers.inject { |sum, n| sum + n }.to_f
35
+ summury_elements_array / numbers.length.to_f
36
+ end
37
+ end
38
+
39
+ class GeometricMean
40
+ def self.count(numbers)
41
+ multiple = numbers.inject(1) { |elem, n| elem * n }
42
+ result = Math.exp(Math.log(multiple) / numbers.length.to_f)
43
+ result.round(4)
44
+ end
45
+ end
46
+
47
+ class GeometricMeanModule
48
+ def self.count(numbers)
49
+ multiple = numbers.inject(1) { |elem, n| elem.abs * n.abs }
50
+ result = Math.exp(Math.log(multiple) / numbers.length.to_f)
51
+ result.round(4)
52
+ end
53
+ end
54
+
55
+ class Triangle
56
+ # angle must be hash
57
+ # side must be hash
58
+ # triangle sides must have key a:, b:, c:
59
+ # side a: is hypotenuse
60
+ def initialize(angle = 0, side = 0)
61
+ @angle = angle
62
+ @side = side
63
+ end
64
+
65
+ def datatype_error
66
+ raise 'Variable @angle must be a Hash!!!' unless @angle.is_a?(Hash)
67
+ end
68
+
69
+ def angle_value_90
70
+ @angle.value?(90)
71
+ end
72
+
73
+ def angle_value_60
74
+ @angle.value?(60)
75
+ end
76
+
77
+ def same_sides
78
+ @side[:b] == @side[:c]
79
+ end
80
+
81
+ def differ_sides
82
+ @side[:b] != @side[:c]
83
+ end
84
+
85
+ def angle_value_90_same_sides
86
+ angle_value_90 && same_sides
87
+ end
88
+
89
+ def angle_value_90_differ_sides
90
+ angle_value_90 && differ_sides
91
+ end
92
+
93
+ def angle_value_90_angle_value_60_differ_sides
94
+ angle_value_90 && angle_value_60 && differ_sides
95
+ end
96
+
97
+ def angle_value_60_same_sides
98
+ angle_value_60 && same_sides
99
+ end
100
+
101
+ def angle_value_60_differ_sides
102
+ angle_value_60 && differ_sides
103
+ end
104
+
105
+ def type_definer
106
+ datatype_error
107
+ if angle_value_90_same_sides
108
+ 'angle_90_same_cathetus'
109
+ elsif angle_value_90_differ_sides
110
+ 'Triangle_90_differ_cathetus'
111
+ elsif angle_value_90_angle_value_60_differ_sides
112
+ 'Triangle_90_differ_cathetus'
113
+ elsif angle_value_60_same_sides
114
+ 'Right triangle'
115
+ elsif angle_value_60_differ_sides
116
+ 'Various side triangle 60'
117
+ else
118
+ 'Various side triangle'
119
+ end
120
+ end
121
+
122
+ def square
123
+ case type_definer
124
+ when 'Triangle_90_differ_cathetus'
125
+ (@side[:b] * @side[:c] / 2).round(4)
126
+ when 'Right triangle'
127
+ (0.5 * @side[:a] * height).round(4)
128
+ end
129
+ end
130
+
131
+ def radius_circle_inside_triangle
132
+ (square / (perimeter / 2)).round(4)
133
+ end
134
+
135
+ def hypotenuse
136
+ Math.sqrt(@side.values.max**2 + @side.values.min**2).round(4)
137
+ end
138
+
139
+ def cathetus
140
+ hypotenuse = @side.values.max
141
+ cathetus = @side.values.min
142
+ Math.sqrt(hypotenuse**2 - cathetus**2).round(4)
143
+ end
144
+
145
+ def perimeter
146
+ @side.values.inject { |sum, n| sum + n }.to_f.round(4)
147
+ end
148
+
149
+ def height
150
+ small_kathetus = @side[:a].to_f / 2.to_f
151
+ Math.sqrt(@side[:a]**2.to_f - small_kathetus**2).round(4)
152
+ end
153
+ end
154
+
155
+ class Circle
156
+ def initialize(circle_length)
157
+ @circle_length = circle_length
158
+ end
159
+
160
+ def radius_by_length
161
+ @circle_length / (2 * 3.14)
162
+ end
163
+
164
+ def square
165
+ ((radius_by_length**2) * 3.14).round(4)
166
+ end
167
+ end
168
+ end
169
+ end
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: keyhit_pain
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Nick Quaranto
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-11-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: colorize
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 0.8.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 0.8.1
27
+ description: A simple hello world gem
28
+ email: nick@quaran.to
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - lib/keyhit_pain.rb
34
+ - lib/keyhit_pain/classes.rb
35
+ homepage: http://rubygems.org/gems/keyhit_pain
36
+ licenses:
37
+ - MIT
38
+ metadata: {}
39
+ post_install_message:
40
+ rdoc_options: []
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ requirements: []
54
+ rubyforge_project:
55
+ rubygems_version: 2.7.6
56
+ signing_key:
57
+ specification_version: 4
58
+ summary: gh_task_hw5!
59
+ test_files: []