hack01 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/hack01.rb +14 -5
- data/lib/hack01/nth_prime.rb +36 -0
- data/lib/hack01/roman_numerals.rb +209 -0
- data/lib/hack01/space_age.rb +38 -0
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3e6a082da6b2c59065b83d42fd81838cba9fa4922e69f4664abbc272fccbb865
|
4
|
+
data.tar.gz: 496ab8d750f44ed7de4b7156639a42fe8774c354b34d8be1e3de13381233b52f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aab3e59cd33738a43d914b634bd546a20d4c212fbe275e8cc45f81e2c5918b441da90a697684640150475bae81ff5eb46388c410e73e97a8394ee4a86a451923
|
7
|
+
data.tar.gz: 75e36f679bac4e35a1d60896a8d8d4a68276cddddf6a69b01e9bac39be8071ef96ea1a32efaf67bafcbcc93dd4497f898c371388565926223fae464f54c3866b
|
data/lib/hack01.rb
CHANGED
@@ -8,20 +8,29 @@ class Hack01
|
|
8
8
|
#
|
9
9
|
# Arguments:
|
10
10
|
# language: (String)
|
11
|
-
#
|
12
|
-
# Example:
|
13
|
-
# >> Hack.info
|
14
|
-
# => "Making a first ruby gem"
|
15
|
-
|
16
11
|
def self.hi language = "english"
|
17
12
|
translator = Translator.new language
|
18
13
|
translator.hi
|
19
14
|
end
|
20
15
|
|
16
|
+
# Example:
|
17
|
+
# >> Hack.info
|
18
|
+
# => "Making a first ruby gem"
|
21
19
|
def self.info
|
22
20
|
p "Making a first ruby gem"
|
23
21
|
p "https://guides.rubygems.org/make-your-own-gem/"
|
24
22
|
end
|
23
|
+
|
24
|
+
# Example
|
25
|
+
# >> a = Hack.new
|
26
|
+
# >> a.hello
|
27
|
+
# => "hello there"
|
28
|
+
def hello
|
29
|
+
p "hello there"
|
30
|
+
end
|
25
31
|
end
|
26
32
|
|
27
33
|
require 'hack01/translator'
|
34
|
+
require 'hack01/nth_prime'
|
35
|
+
require 'hack01/roman_numerals'
|
36
|
+
require 'hack01/space_age'
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require "pry"
|
2
|
+
class Prime
|
3
|
+
class << self # means you don't have to use self.nth etc
|
4
|
+
|
5
|
+
def is_prime number_to_test
|
6
|
+
prime = true
|
7
|
+
|
8
|
+
number_to_test
|
9
|
+
arr = (2 .. (number_to_test - 1) ).to_a
|
10
|
+
arr.each do |n|
|
11
|
+
if (number_to_test % n) == 0
|
12
|
+
prime = false
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
return prime
|
17
|
+
end
|
18
|
+
|
19
|
+
def nth num
|
20
|
+
|
21
|
+
throw ArgumentError.new unless num > 0
|
22
|
+
|
23
|
+
primes = [2]
|
24
|
+
candidate = primes.last
|
25
|
+
|
26
|
+
while primes.length < num
|
27
|
+
candidate = candidate + 1
|
28
|
+
if is_prime candidate
|
29
|
+
primes.push candidate
|
30
|
+
end
|
31
|
+
end
|
32
|
+
# p primes
|
33
|
+
primes.last
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,209 @@
|
|
1
|
+
require "pry"
|
2
|
+
|
3
|
+
class Integer
|
4
|
+
# class Integer is the pre-defined class of Integer numbers.
|
5
|
+
# what we are doing below is extending the class by adding a new method.
|
6
|
+
# to see the built in methods for class of integer type something like `5.methods.sort`
|
7
|
+
|
8
|
+
ROMANS = {
|
9
|
+
"M" => 1000,
|
10
|
+
"CM" => 900,
|
11
|
+
"D" => 500,
|
12
|
+
"CD" => 400,
|
13
|
+
"C" => 100,
|
14
|
+
"XC" => 90,
|
15
|
+
"L" => 50,
|
16
|
+
"XL" => 40,
|
17
|
+
"X" => 10,
|
18
|
+
"IX" => 9,
|
19
|
+
"V" => 5,
|
20
|
+
"IV" => 4,
|
21
|
+
"I" => 1
|
22
|
+
}
|
23
|
+
|
24
|
+
def to_roman
|
25
|
+
number = self
|
26
|
+
# self is like `this` in javascript. in this example if we call this method thusly `5.to_roman` then self is 5
|
27
|
+
output = ""
|
28
|
+
|
29
|
+
# long way. would need lots of if / else statements.
|
30
|
+
# if number == 1
|
31
|
+
# output = "I"
|
32
|
+
# elsif number == 2
|
33
|
+
# output = "II"
|
34
|
+
# else
|
35
|
+
# output = "III"
|
36
|
+
# end
|
37
|
+
|
38
|
+
# clever ruby way - eaching through the hash defined above.
|
39
|
+
ROMANS.each do |key, value|
|
40
|
+
# output = output + key * ( number / value )
|
41
|
+
output << key * ( number / value )
|
42
|
+
number = number % value
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
output
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
# binding.pry
|
53
|
+
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
# require 'pry'
|
96
|
+
#
|
97
|
+
# class Integer
|
98
|
+
#
|
99
|
+
# ROMANS = {
|
100
|
+
# "M" => 1000,
|
101
|
+
# "CM" => 900,
|
102
|
+
# "D" => 500,
|
103
|
+
# "CD" => 400,
|
104
|
+
# "C" => 100,
|
105
|
+
# "XC" => 90,
|
106
|
+
# "L" => 50,
|
107
|
+
# "XL" => 40,
|
108
|
+
# "X" => 10,
|
109
|
+
# "IX" => 9,
|
110
|
+
# "V" => 5,
|
111
|
+
# "IV" => 4,
|
112
|
+
# "I" => 1
|
113
|
+
# }
|
114
|
+
#
|
115
|
+
# def to_roman
|
116
|
+
# number = self
|
117
|
+
# output = ""
|
118
|
+
#
|
119
|
+
# # if number == 1
|
120
|
+
# # output = "I"
|
121
|
+
# # elsif number == 2
|
122
|
+
# # output = "II"
|
123
|
+
# # else
|
124
|
+
# # output = "III"
|
125
|
+
# # end
|
126
|
+
#
|
127
|
+
# ROMANS.each do |key, value|
|
128
|
+
# output << key * ( number / value)
|
129
|
+
# number = number % value
|
130
|
+
# end
|
131
|
+
#
|
132
|
+
#
|
133
|
+
# output
|
134
|
+
# end
|
135
|
+
# end
|
136
|
+
#
|
137
|
+
#
|
138
|
+
#
|
139
|
+
# # binding.pry
|
140
|
+
|
141
|
+
|
142
|
+
|
143
|
+
|
144
|
+
|
145
|
+
|
146
|
+
|
147
|
+
|
148
|
+
|
149
|
+
|
150
|
+
|
151
|
+
|
152
|
+
|
153
|
+
|
154
|
+
|
155
|
+
|
156
|
+
|
157
|
+
|
158
|
+
|
159
|
+
|
160
|
+
|
161
|
+
|
162
|
+
|
163
|
+
|
164
|
+
|
165
|
+
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
+
|
170
|
+
|
171
|
+
|
172
|
+
|
173
|
+
|
174
|
+
|
175
|
+
|
176
|
+
|
177
|
+
|
178
|
+
|
179
|
+
|
180
|
+
# class Integer
|
181
|
+
# ROMANS = {
|
182
|
+
# "M" => 1000,
|
183
|
+
# "CM" => 900,
|
184
|
+
# "D" => 500,
|
185
|
+
# "CD" => 400,
|
186
|
+
# "C" => 100,
|
187
|
+
# "XC" => 90,
|
188
|
+
# "L" => 50,
|
189
|
+
# "XL" => 40,
|
190
|
+
# "X" => 10,
|
191
|
+
# "IX" => 9,
|
192
|
+
# "V" => 5,
|
193
|
+
# "IV" => 4,
|
194
|
+
# "I" => 1
|
195
|
+
# }
|
196
|
+
#
|
197
|
+
#
|
198
|
+
# def to_roman
|
199
|
+
# int = self
|
200
|
+
# result = ""
|
201
|
+
#
|
202
|
+
# ROMANS.each do |sign, num|
|
203
|
+
# result << sign * ( int / num )
|
204
|
+
# int = int % num
|
205
|
+
# end
|
206
|
+
#
|
207
|
+
# result
|
208
|
+
# end
|
209
|
+
# end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'pry'
|
2
|
+
# Definition of class SpaceAge for Exercism
|
3
|
+
class SpaceAge
|
4
|
+
EARTH_YEAR_IN_SECONDS = 31_557_600
|
5
|
+
PLANETS = {
|
6
|
+
Earth: 1,
|
7
|
+
Mercury: 0.2408467,
|
8
|
+
Venus: 0.61519726,
|
9
|
+
Mars: 1.8808158,
|
10
|
+
Jupiter: 11.862615,
|
11
|
+
Saturn: 29.447498,
|
12
|
+
Uranus: 84.016846,
|
13
|
+
Neptune: 164.79132
|
14
|
+
}.freeze
|
15
|
+
|
16
|
+
def initialize(seconds)
|
17
|
+
@seconds = seconds
|
18
|
+
end
|
19
|
+
|
20
|
+
PLANETS.each do |planet, _year|
|
21
|
+
define_method("on_#{planet.downcase}") do
|
22
|
+
@seconds.to_f / EARTH_YEAR_IN_SECONDS / PLANETS[planet]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def method_missing(name, *args, &block)
|
27
|
+
# first time using method_missing
|
28
|
+
# super basically checks if the method exists in the class's ancestor
|
29
|
+
# (if any)
|
30
|
+
super
|
31
|
+
raise "'#{name}' is not a method of the class #{self.class}"
|
32
|
+
end
|
33
|
+
|
34
|
+
def respond_to_missing?(*)
|
35
|
+
p 'not sure what to do here but'
|
36
|
+
p "rubocop recommends a 'respond_to_missing?' method"
|
37
|
+
end
|
38
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hack01
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Coote
|
@@ -19,6 +19,9 @@ extra_rdoc_files: []
|
|
19
19
|
files:
|
20
20
|
- bin/hack01
|
21
21
|
- lib/hack01.rb
|
22
|
+
- lib/hack01/nth_prime.rb
|
23
|
+
- lib/hack01/roman_numerals.rb
|
24
|
+
- lib/hack01/space_age.rb
|
22
25
|
- lib/hack01/translator.rb
|
23
26
|
homepage: http://rubygems.org/gems/hack01
|
24
27
|
licenses:
|