numb 0.10.0 → 0.20.0
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/numb/carmichael.rb +8 -0
- data/lib/numb/cube.rb +8 -0
- data/lib/numb/decagonal.rb +5 -0
- data/lib/numb/dodecagonal.rb +5 -0
- data/lib/numb/dudeney.rb +3 -1
- data/lib/numb/heptagonal.rb +5 -0
- data/lib/numb/hexagonal.rb +7 -0
- data/lib/numb/myriagonal.rb +5 -0
- data/lib/numb/n_gonal.rb +8 -0
- data/lib/numb/octagonal.rb +8 -0
- data/lib/numb/pentagonal.rb +5 -0
- data/lib/numb/ruby1.8.rb +1 -1
- data/lib/numb/triangular.rb +1 -3
- data/lib/numb.rb +9 -7
- data/spec/carmichael_spec.rb +20 -0
- data/spec/cube_spec.rb +24 -0
- data/spec/decagonal_spec.rb +16 -0
- data/spec/dodecagonal_spec.rb +18 -0
- data/spec/heptagonal_spec.rb +15 -0
- data/spec/hexagonal_spec.rb +16 -0
- data/spec/myriagonal_spec.rb +16 -0
- data/spec/octagonal_spec.rb +15 -0
- data/spec/pentagonal_spec.rb +14 -0
- metadata +30 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.20.0
|
data/lib/numb/cube.rb
ADDED
data/lib/numb/dudeney.rb
CHANGED
@@ -10,6 +10,8 @@ class Integer
|
|
10
10
|
# 98.dudeney? #=> false
|
11
11
|
#
|
12
12
|
def dudeney?
|
13
|
-
|
13
|
+
# The ugly hack below is seemingly needed for 1.8 compatibility. I ave
|
14
|
+
# yet to understand why.
|
15
|
+
Math.cbrt(self).to_s.sub(/\.0$/,'') == self.digits.reduce(:+).to_s
|
14
16
|
end
|
15
17
|
end
|
data/lib/numb/n_gonal.rb
ADDED
data/lib/numb/ruby1.8.rb
CHANGED
data/lib/numb/triangular.rb
CHANGED
data/lib/numb.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
libs = %w{abundant achilles automorphic balanced_prime carol
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
3
|
+
libs = %w{abundant achilles automorphic balanced_prime carmichael carol
|
4
|
+
composite cube decagonal deficient dodecagonal dihedral_prime
|
5
|
+
dudeney economical emrip equidigital extravagant factorion
|
6
|
+
frugal happy harshad heptagonal hexagonal hilbert hyperperfect
|
7
|
+
impolite kaprekar keith kynea lucas lucas_carmichael mms_pair
|
8
|
+
mobius myriagonal narcissistic nivenmorphic n_gonal octagonal
|
9
|
+
ordinal parasitic pentagonal perfect perfect_power polite
|
10
|
+
polydivisible powerful practical primitive_pseudoperfect pronic
|
11
|
+
rhonda self self_descriptive semiperfect semiprime
|
10
12
|
smarandache_wellin smith sophie_germain_prime sphenic square
|
11
13
|
square_free triangular trimorphic undulating vampire weird
|
12
14
|
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
describe Integer, "#carmichael?" do
|
2
|
+
# A002997
|
3
|
+
CARMICHAEL = [561,1105,1729,2465,2821,6601,8911,10585,15841,
|
4
|
+
29341,41041,46657,52633,62745,63973,75361,101101,
|
5
|
+
115921,126217,162401,172081,188461,252601,278545,
|
6
|
+
294409,314821,334153,340561,399001,410041,449065,
|
7
|
+
488881,512461]
|
8
|
+
|
9
|
+
CARMICHAEL.each do |n|
|
10
|
+
it "returns true for Carmichael number #{n}" do
|
11
|
+
n.should be_carmichael
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
((1..CARMICHAEL.last).to_a - CARMICHAEL).shuffle.first(10).each do |n|
|
16
|
+
it "returns false for non-Carmichael number #{n}" do
|
17
|
+
n.should_not be_carmichael
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/spec/cube_spec.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
describe Integer, "#cube?" do
|
2
|
+
# A000578
|
3
|
+
CUBES = [0,1,8,27,64,125,216,343,512,729,1000,1331,1728,
|
4
|
+
2197,2744,3375,4096,4913,5832,6859,8000,9261,
|
5
|
+
10648,12167,13824,15625,17576,19683,21952,24389,
|
6
|
+
27000,29791,32768,35937,39304,42875,46656,50653,
|
7
|
+
54872,59319,64000]
|
8
|
+
|
9
|
+
it "returns true for perfect cubes" do
|
10
|
+
CUBES.each{|n| n.should be_cube}
|
11
|
+
end
|
12
|
+
|
13
|
+
it "returns true for negative perfect cubes" do
|
14
|
+
CUBES.shuffle.first(10).each{|n| (-n).should be_cube}
|
15
|
+
end
|
16
|
+
|
17
|
+
it "returns false for non-perfect cubes" do
|
18
|
+
((0..CUBES.last).to_a - CUBES).shuffle.first(10).each{|n| n.should_not be_cube}
|
19
|
+
end
|
20
|
+
|
21
|
+
it "returns false for negative non-perfect cubes" do
|
22
|
+
((0..CUBES.last).to_a - CUBES).shuffle.first(10).each{|n| (-n).should_not be_cube}
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
describe Integer, "#decagonal?" do
|
2
|
+
# A001107
|
3
|
+
DECAGONAL = [0,1,10,27,52,85,126,175,232,297,370,451,540,637,
|
4
|
+
742,855,976,1105,1242,1387,1540,1701,1870,2047,
|
5
|
+
2232,2425,2626,2835,3052,3277,3510,3751,4000,4257,
|
6
|
+
4522,4795,5076,5365,5662,5967,6280,6601,6930,7267,
|
7
|
+
7612,7965,8326]
|
8
|
+
|
9
|
+
it "returns true for a decagonal number" do
|
10
|
+
DECAGONAL.each{|n| n.should be_decagonal}
|
11
|
+
end
|
12
|
+
|
13
|
+
it "returns false for a non-decagonal number" do
|
14
|
+
((0..DECAGONAL.last).to_a - DECAGONAL).each{|n| n.should_not be_decagonal}
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
describe Integer, "#dodecagonal?" do
|
2
|
+
|
3
|
+
# A051624
|
4
|
+
DODECAGONAL = [0,1,12,33,64,105,156,217,288,369,460,561,672,793,
|
5
|
+
924,1065,1216,1377,1548,1729,1920,2121,2332,2553,
|
6
|
+
2784,3025,3276,3537,3808,4089,4380,4681,4992,5313,
|
7
|
+
5644,5985,6336,6697,7068,7449,7840,8241,8652]
|
8
|
+
|
9
|
+
it "returns true for dodecagonal numbers" do
|
10
|
+
DODECAGONAL.each{|n| n.should be_dodecagonal}
|
11
|
+
end
|
12
|
+
|
13
|
+
it "returns false for non-dodecagonal numbers" do
|
14
|
+
((0..DODECAGONAL.last).to_a - DODECAGONAL).each do |n|
|
15
|
+
n.should_not be_dodecagonal
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
describe Integer, "#heptagonal?" do
|
2
|
+
HEPTAGONAL = [0,1,7,18,34,55,81,112,148,189,235,286,342,403,
|
3
|
+
469,540,616,697,783,874,970,1071,1177,1288,1404,
|
4
|
+
1525,1651,1782,1918,2059,2205,2356,2512,2673,2839,
|
5
|
+
3010,3186,3367,3553,3744,3940,4141,4347,4558,4774,
|
6
|
+
4995,5221,5452,5688]
|
7
|
+
|
8
|
+
it "returns true for a heptagonal number" do
|
9
|
+
HEPTAGONAL.each{|n| n.should be_heptagonal}
|
10
|
+
end
|
11
|
+
|
12
|
+
it "returns false for a non-heptagonal number" do
|
13
|
+
((0..HEPTAGONAL.last).to_a - HEPTAGONAL).each{|n| n.should_not be_heptagonal}
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
describe Integer, "#hexagonal?" do
|
2
|
+
# A000384
|
3
|
+
HEXAGONAL = [0,1,6,15,28,45,66,91,120,153,190,231,276,325,378,
|
4
|
+
435,496,561,630,703,780,861,946,1035,1128,1225,
|
5
|
+
1326,1431,1540,1653,1770,1891,2016,2145,2278,2415,
|
6
|
+
2556,2701,2850,3003,3160,3321,3486,3655,3828,4005,
|
7
|
+
4186,4371,4560]
|
8
|
+
|
9
|
+
it "returns true for a hexagonal number" do
|
10
|
+
HEXAGONAL.each{|n| n.should be_hexagonal}
|
11
|
+
end
|
12
|
+
|
13
|
+
it "returns false for a non-hexagonal number" do
|
14
|
+
((0..HEXAGONAL.last).to_a - HEXAGONAL).each{|n| n.should_not be_hexagonal}
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
describe Integer, "#myriagonal?" do
|
2
|
+
|
3
|
+
MYRIAGONAL = [0, 1, 10000, 29997, 59992, 99985, 149976, 209965, 279952,
|
4
|
+
359937, 449920, 549901, 659880, 779857, 909832, 1049805,
|
5
|
+
1199776, 1359745, 1529712, 1709677, 1899640, 2099601]
|
6
|
+
|
7
|
+
it "should return true for myriagonal numbers" do
|
8
|
+
MYRIAGONAL.shuffle.first(2).each{|n| n.should be_myriagonal}
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should return false for non-myriagonal numbers" do
|
12
|
+
((0..MYRIAGONAL.last).to_a - MYRIAGONAL).shuffle.first(2).each do |n|
|
13
|
+
n.should_not be_myriagonal
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
describe Integer, "#octagonal?" do
|
2
|
+
#A000567
|
3
|
+
OCTAGONAL = [0,1,8,21,40,65,96,133,176,225,280,341,408,481,
|
4
|
+
560,645,736,833,936,1045,1160,1281,1408,1541,1680,
|
5
|
+
1825,1976,2133,2296,2465,2640,2821,3008,3201,3400,
|
6
|
+
3605,3816,4033,4256,4485,4720,4961,5208,5461]
|
7
|
+
|
8
|
+
it "returns true for octagonal numbers" do
|
9
|
+
OCTAGONAL.each{|n| n.should be_octagonal}
|
10
|
+
end
|
11
|
+
|
12
|
+
it "returns false for non-octagonal numbers" do
|
13
|
+
((0..OCTAGONAL.last).to_a - OCTAGONAL).each{|n| n.should_not be_octagonal}
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
describe Integer, "#pentagonal?" do
|
2
|
+
PENTAGONAL = [0,1,5,12,22,35,51,70,92,117,145,176,210,247,287,
|
3
|
+
330,376,425,477,532,590,651,715,782,852,925,1001,
|
4
|
+
1080,1162,1247,1335,1426,1520,1617,1717,1820,1926,
|
5
|
+
2035,2147,2262,2380,2501,2625,2752,2882,3015,3151]
|
6
|
+
|
7
|
+
it "returns true for pentagonal numbers" do
|
8
|
+
PENTAGONAL.each{|n| n.should be_pentagonal}
|
9
|
+
end
|
10
|
+
|
11
|
+
it "returns false for non-pentagonal numbers" do
|
12
|
+
((0..PENTAGONAL.last).to_a - PENTAGONAL).each{|n| n.should_not be_pentagonal}
|
13
|
+
end
|
14
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: numb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.20.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Run Paint Run Run
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-05 00:00:00 +00:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -43,10 +43,14 @@ files:
|
|
43
43
|
- lib/numb/achilles.rb
|
44
44
|
- lib/numb/automorphic.rb
|
45
45
|
- lib/numb/balanced_prime.rb
|
46
|
+
- lib/numb/carmichael.rb
|
46
47
|
- lib/numb/carol.rb
|
47
48
|
- lib/numb/composite.rb
|
49
|
+
- lib/numb/cube.rb
|
50
|
+
- lib/numb/decagonal.rb
|
48
51
|
- lib/numb/deficient.rb
|
49
52
|
- lib/numb/dihedral_prime.rb
|
53
|
+
- lib/numb/dodecagonal.rb
|
50
54
|
- lib/numb/dudeney.rb
|
51
55
|
- lib/numb/economical.rb
|
52
56
|
- lib/numb/emrip.rb
|
@@ -56,6 +60,8 @@ files:
|
|
56
60
|
- lib/numb/frugal.rb
|
57
61
|
- lib/numb/happy.rb
|
58
62
|
- lib/numb/harshad.rb
|
63
|
+
- lib/numb/heptagonal.rb
|
64
|
+
- lib/numb/hexagonal.rb
|
59
65
|
- lib/numb/hilbert.rb
|
60
66
|
- lib/numb/hyperperfect.rb
|
61
67
|
- lib/numb/impolite.rb
|
@@ -66,10 +72,14 @@ files:
|
|
66
72
|
- lib/numb/lucas_carmichael.rb
|
67
73
|
- lib/numb/mms_pair.rb
|
68
74
|
- lib/numb/mobius.rb
|
75
|
+
- lib/numb/myriagonal.rb
|
76
|
+
- lib/numb/n_gonal.rb
|
69
77
|
- lib/numb/narcissistic.rb
|
70
78
|
- lib/numb/nivenmorphic.rb
|
79
|
+
- lib/numb/octagonal.rb
|
71
80
|
- lib/numb/ordinal.rb
|
72
81
|
- lib/numb/parasitic.rb
|
82
|
+
- lib/numb/pentagonal.rb
|
73
83
|
- lib/numb/perfect.rb
|
74
84
|
- lib/numb/perfect_power.rb
|
75
85
|
- lib/numb/polite.rb
|
@@ -101,11 +111,15 @@ files:
|
|
101
111
|
- spec/achilles_spec.rb
|
102
112
|
- spec/automorphic_spec.rb
|
103
113
|
- spec/balanced_prime_spec.rb
|
114
|
+
- spec/carmichael_spec.rb
|
104
115
|
- spec/carol_spec.rb
|
105
116
|
- spec/composite_spec.rb
|
117
|
+
- spec/cube_spec.rb
|
118
|
+
- spec/decagonal_spec.rb
|
106
119
|
- spec/deficient_spec.rb
|
107
120
|
- spec/digital_sum_spec.rb
|
108
121
|
- spec/dihedral_prime_spec.rb
|
122
|
+
- spec/dodecagonal_spec.rb
|
109
123
|
- spec/dudeney_spec.rb
|
110
124
|
- spec/economical_spec.rb
|
111
125
|
- spec/emrip_spec.rb
|
@@ -116,6 +130,8 @@ files:
|
|
116
130
|
- spec/frugal_spec.rb
|
117
131
|
- spec/happy_spec.rb
|
118
132
|
- spec/harshad_spec.rb
|
133
|
+
- spec/heptagonal_spec.rb
|
134
|
+
- spec/hexagonal_spec.rb
|
119
135
|
- spec/hilbert_spec.rb
|
120
136
|
- spec/hyperperfect_spec.rb
|
121
137
|
- spec/kaprekar_spec.rb
|
@@ -125,12 +141,15 @@ files:
|
|
125
141
|
- spec/lucas_spec.rb
|
126
142
|
- spec/maris_mcgwire_sosa_pair_spec.rb
|
127
143
|
- spec/mobius_spec.rb
|
144
|
+
- spec/myriagonal_spec.rb
|
128
145
|
- spec/narcissistic_spec.rb
|
129
146
|
- spec/nivenmorphic_spec.rb
|
130
147
|
- spec/number_of_distinct_prime_factors_spec.rb
|
131
148
|
- spec/number_of_prime_factors_spec.rb
|
149
|
+
- spec/octagonal_spec.rb
|
132
150
|
- spec/ordinal_spec.rb
|
133
151
|
- spec/parasitic_spec.rb
|
152
|
+
- spec/pentagonal_spec.rb
|
134
153
|
- spec/perfect_power_spec.rb
|
135
154
|
- spec/perfect_spec.rb
|
136
155
|
- spec/polite_spec.rb
|
@@ -200,15 +219,19 @@ test_files:
|
|
200
219
|
- spec/ordinal_spec.rb
|
201
220
|
- spec/perfect_spec.rb
|
202
221
|
- spec/perfect_power_spec.rb
|
222
|
+
- spec/carmichael_spec.rb
|
203
223
|
- spec/polite_spec.rb
|
204
224
|
- spec/automorphic_spec.rb
|
205
225
|
- spec/hyperperfect_spec.rb
|
206
226
|
- spec/spec_helper.rb
|
227
|
+
- spec/heptagonal_spec.rb
|
207
228
|
- spec/kynea_spec.rb
|
208
229
|
- spec/factor_spec.rb
|
209
230
|
- spec/emrip_spec.rb
|
210
231
|
- spec/smith_spec.rb
|
232
|
+
- spec/octagonal_spec.rb
|
211
233
|
- spec/vampire_spec.rb
|
234
|
+
- spec/dodecagonal_spec.rb
|
212
235
|
- spec/dihedral_prime_spec.rb
|
213
236
|
- spec/sphenic_spec.rb
|
214
237
|
- spec/lucas_carmichael_spec.rb
|
@@ -222,13 +245,16 @@ test_files:
|
|
222
245
|
- spec/semiprime_spec.rb
|
223
246
|
- spec/deficient_spec.rb
|
224
247
|
- spec/happy_spec.rb
|
248
|
+
- spec/hexagonal_spec.rb
|
225
249
|
- spec/triangular_spec.rb
|
226
250
|
- spec/semi_perfect_spec.rb
|
251
|
+
- spec/pentagonal_spec.rb
|
227
252
|
- spec/smarandache_wellin_spec.rb
|
228
253
|
- spec/maris_mcgwire_sosa_pair_spec.rb
|
229
254
|
- spec/lucas_spec.rb
|
230
255
|
- spec/trimorphic_spec.rb
|
231
256
|
- spec/harshad_spec.rb
|
257
|
+
- spec/cube_spec.rb
|
232
258
|
- spec/carol_spec.rb
|
233
259
|
- spec/powerful_spec.rb
|
234
260
|
- spec/weird_spec.rb
|
@@ -239,10 +265,12 @@ test_files:
|
|
239
265
|
- spec/undulating_spec.rb
|
240
266
|
- spec/extravagant_spec.rb
|
241
267
|
- spec/self_descriptive_spec.rb
|
268
|
+
- spec/decagonal_spec.rb
|
242
269
|
- spec/kaprekar_spec.rb
|
243
270
|
- spec/hilbert_spec.rb
|
244
271
|
- spec/keith_spec.rb
|
245
272
|
- spec/narcissistic_spec.rb
|
273
|
+
- spec/myriagonal_spec.rb
|
246
274
|
- spec/achilles_spec.rb
|
247
275
|
- spec/pronic_spec.rb
|
248
276
|
- spec/politeness_spec.rb
|