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 +7 -0
- data/lib/keyhit_pain.rb +126 -0
- data/lib/keyhit_pain/classes.rb +169 -0
- metadata +59 -0
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
|
data/lib/keyhit_pain.rb
ADDED
|
@@ -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: []
|