figurate_numbers 0.0.9
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/figurate_numbers.rb +516 -0
- metadata +45 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 5db66d95b652260cf17eb02c7cb04ee509e327a736541fa957b3050b68cb0fbd
|
4
|
+
data.tar.gz: 3d4e572eb205c255cefa638e7730be18b0115d749b60892cf018aa5e88e94312
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c2aaec998a13c0baa7a6251e1926f3bd4a63e0dd48523c6d995d286184f4266bcb3617d5352e7cf27a5197f52e2341419bc68f2097d99d086cd9bf8df218da79
|
7
|
+
data.tar.gz: 4b49273eac1939259f938ae07bc1f3c34feb3bd4e868bf8e04a0b734f9ef17f7e448f551907868b4950f8af96cafde568aa3e75a8605e926c629f0d1ce8d31a8
|
@@ -0,0 +1,516 @@
|
|
1
|
+
# A module based on the book Figurate Numbers(2012) by Elena Deza & Michel Deza
|
2
|
+
|
3
|
+
module FigurateNumbers
|
4
|
+
|
5
|
+
# Plane figurate numbers
|
6
|
+
def FigurateNumbers.polygonal_numbers(m)
|
7
|
+
Enumerator.new do |y|
|
8
|
+
(1..Float::INFINITY).each do |delta|
|
9
|
+
y << ((m - 2) * delta**2 - (m - 4) * delta) / 2
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def FigurateNumbers.centered_pol_numbers(k)
|
15
|
+
Enumerator.new do |y|
|
16
|
+
(1..Float::INFINITY).each do |delta|
|
17
|
+
y << (k * delta**2 - k * delta + 2) / 2
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def FigurateNumbers.pronic_numbers
|
23
|
+
(1..Float::INFINITY).lazy.collect { |delta| delta * (delta + 1)}
|
24
|
+
end
|
25
|
+
|
26
|
+
def FigurateNumbers.cross_numbers
|
27
|
+
(1..Float::INFINITY).lazy.collect { |delta| 4 * delta - 3}
|
28
|
+
end
|
29
|
+
|
30
|
+
def FigurateNumbers.aztec_diamond_numbers
|
31
|
+
(1..Float::INFINITY).lazy.collect { |delta| (2 * delta) * (delta + 1)}
|
32
|
+
end
|
33
|
+
|
34
|
+
def FigurateNumbers.polygram_numbers(m)
|
35
|
+
Enumerator.new do |y|
|
36
|
+
(1..Float::INFINITY).each do |delta|
|
37
|
+
y << m * delta**2 - m * delta + 1
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def FigurateNumbers.gnomic_numbers
|
43
|
+
(1..Float::INFINITY).lazy.collect { |delta| 2 * delta - 1}
|
44
|
+
end
|
45
|
+
|
46
|
+
def FigurateNumbers.truncated_triangular_numbers
|
47
|
+
Enumerator.new do |y|
|
48
|
+
(1..Float::INFINITY).each do |delta|
|
49
|
+
y << (3 * delta**2) - (3 * delta) + 1
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def FigurateNumbers.truncated_square_numbers
|
55
|
+
Enumerator.new do |y|
|
56
|
+
(1..Float::INFINITY).each do |delta|
|
57
|
+
y << (7 * delta**2) - (10 * delta) + 4
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def FigurateNumbers.truncated_pronic_numbers
|
63
|
+
Enumerator.new do |y|
|
64
|
+
(1..Float::INFINITY).each do |delta|
|
65
|
+
y << (7 * delta**2) - (7 * delta) + 2
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def FigurateNumbers.truncated_center_pol_numbers(k)
|
71
|
+
Enumerator.new do |y|
|
72
|
+
(1..Float::INFINITY).each do |delta|
|
73
|
+
y << 1 + (k * (7 * delta**2 - 11 * delta + 4)) / 2
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
## Space figurate numbers
|
79
|
+
def FigurateNumbers.r_pyramidal_numbers(r = 3)
|
80
|
+
Enumerator.new do |y|
|
81
|
+
(1..Float::INFINITY).each do |delta|
|
82
|
+
y << (3 * delta**2 + delta**3 * (r - 2) - delta * (r - 5)) / 6
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def FigurateNumbers.cubic_numbers
|
88
|
+
Enumerator.new do |y|
|
89
|
+
(1..Float::INFINITY).each do |delta|
|
90
|
+
y << delta**3
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def FigurateNumbers.tetrahedral_numbers
|
96
|
+
Enumerator.new do |y|
|
97
|
+
(1..Float::INFINITY).each do |delta|
|
98
|
+
y << (delta * (delta + 1) * (delta + 2)) / 6
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def FigurateNumbers.octahedral_numbers
|
104
|
+
Enumerator.new do |y|
|
105
|
+
(1..Float::INFINITY).each do |delta|
|
106
|
+
y << (delta * (2 * delta**2 + 1)) / 3
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def FigurateNumbers.dodecahedral_numbers
|
112
|
+
Enumerator.new do |y|
|
113
|
+
(1..Float::INFINITY).each do |delta|
|
114
|
+
y << (delta * (3 * delta -1) * (3 * delta - 2)) / 2
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def FigurateNumbers.icosahedral_numbers
|
120
|
+
Enumerator.new do |y|
|
121
|
+
(1..Float::INFINITY).each do |delta|
|
122
|
+
y << (delta * (5 * delta**2 - 5 * delta + 2)) / 2
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def FigurateNumbers.truncated_tetrahedral_numbers
|
128
|
+
Enumerator.new do |y|
|
129
|
+
(1..Float::INFINITY).each do |delta|
|
130
|
+
y << (23 * delta**2 - 27 * delta + 10) * delta / 6
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def FigurateNumbers.truncated_cubic_numbers
|
136
|
+
Enumerator.new do |y|
|
137
|
+
(1..Float::INFINITY).each do |delta|
|
138
|
+
y << (3 * delta - 2)**3 - ((8 * (delta - 1) * delta * (delta + 1)) / 6)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
def FigurateNumbers.truncated_octahedral_numbers
|
144
|
+
Enumerator.new do |y|
|
145
|
+
(1..Float::INFINITY).each do |delta|
|
146
|
+
y << (16 * delta**3 - 33 * delta**2 + 24 * delta - 6)
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
def FigurateNumbers.stella_octangula_numbers
|
152
|
+
Enumerator.new do |y|
|
153
|
+
(1..Float::INFINITY).each do |delta|
|
154
|
+
y << delta * (2 * delta**2 - 1)
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
def FigurateNumbers.centered_cube_numbers
|
160
|
+
Enumerator.new do |y|
|
161
|
+
(1..Float::INFINITY).each do |delta|
|
162
|
+
y << (2 * delta - 1) * (delta**2 - delta + 1)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
def FigurateNumbers.rhombic_dodecahedral_numbers
|
168
|
+
Enumerator.new do |y|
|
169
|
+
(1..Float::INFINITY).each do |delta|
|
170
|
+
y << (2 * delta - 1) * (2 * delta**2 - 2 * delta + 1)
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
def FigurateNumbers.hauy_rhombic_dodecahedral_numbers
|
176
|
+
Enumerator.new do |y|
|
177
|
+
(1..Float::INFINITY).each do |delta|
|
178
|
+
y << (2 * delta - 1) * (8 * delta**2 - 14 * delta + 7)
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
def FigurateNumbers.centered_tetrahedral_numbers
|
184
|
+
Enumerator.new do |y|
|
185
|
+
(1..Float::INFINITY).each do |delta|
|
186
|
+
y << (2 * delta - 1) * ((delta**2 - delta + 3)) / 3
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
def FigurateNumbers.centered_square_pyramid_numbers
|
192
|
+
Enumerator.new do |y|
|
193
|
+
(1..Float::INFINITY).each do |delta|
|
194
|
+
y << (2 * delta - 1) * ((delta**2 - delta + 2)) / 2
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
def FigurateNumbers.centered_pentagonal_pyramid_numbers
|
200
|
+
Enumerator.new do |y|
|
201
|
+
(1..Float::INFINITY).each do |delta|
|
202
|
+
y << (2 * delta - 1) * ( 2 * delta**2 - 2 * delta + 3) / 3
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
def FigurateNumbers.centered_hexagonal_pyramid_numbers
|
208
|
+
Enumerator.new do |y|
|
209
|
+
(1..Float::INFINITY).each do |delta|
|
210
|
+
y << (2 * delta - 1) * (5 * delta**2 - 5 * delta + 6) / 6
|
211
|
+
end
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
def FigurateNumbers.centered_heptagonal_pyramid_numbers
|
216
|
+
Enumerator.new do |y|
|
217
|
+
(1..Float::INFINITY).each do |delta|
|
218
|
+
y << (2 * delta - 1) * (delta**2 - delta + 1)
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
def FigurateNumbers.centered_octagonal_pyramid_numbers
|
224
|
+
Enumerator.new do |y|
|
225
|
+
(1..Float::INFINITY).each do |delta|
|
226
|
+
y << (2 * delta - 1) * (7 * delta**2 - 7 * delta + 6) / 6
|
227
|
+
end
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
def FigurateNumbers.centered_icosahedron_numbers
|
232
|
+
Enumerator.new do |y|
|
233
|
+
(1..Float::INFINITY).each do |delta|
|
234
|
+
y << (2 * delta - 1) * (5 * delta**2 - 5 * delta + 3) / 3
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
def FigurateNumbers.centered_dodecahedron_numbers
|
240
|
+
Enumerator.new do |y|
|
241
|
+
(1..Float::INFINITY).each do |delta|
|
242
|
+
y << (2 * delta - 1) * (3 * delta**2 - 3 * delta + 1)
|
243
|
+
end
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
def FigurateNumbers.centered_mgonal_pyramid_numbers(m)
|
248
|
+
Enumerator.new do |y|
|
249
|
+
(1..Float::INFINITY).each do |delta|
|
250
|
+
y << (m - 1) * ((delta - 1) * delta * (2 * delta - 1)) / 6 + (2 * delta - 1)
|
251
|
+
end
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
def FigurateNumbers.centered_mgonal_pyramidal_numbers(m)
|
256
|
+
Enumerator.new do |y|
|
257
|
+
(1..Float::INFINITY).each do |delta|
|
258
|
+
y << (m * delta**3 + delta * (6 - m)) / 6
|
259
|
+
end
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
def FigurateNumbers.hexagonal_prism_numbers
|
264
|
+
Enumerator.new do |y|
|
265
|
+
(1..Float::INFINITY).each do |delta|
|
266
|
+
y << delta * ( 3 * delta**2 - 3 * delta + 1)
|
267
|
+
end
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
def FigurateNumbers.generalized_mgonal_pyramidal_numbers(m, left_index = 0)
|
272
|
+
Enumerator.new do |y|
|
273
|
+
((-1 * left_index.abs)..Float::INFINITY).each do |delta|
|
274
|
+
y << (delta * (delta + 1) * ((m - 2) * delta - m + 5 )) / 6
|
275
|
+
end
|
276
|
+
end
|
277
|
+
end
|
278
|
+
|
279
|
+
def FigurateNumbers.generalized_icosahedral_numbers(left_index = 0)
|
280
|
+
Enumerator.new do |y|
|
281
|
+
((-1 * left_index.abs)..Float::INFINITY).each do |delta|
|
282
|
+
y << ( 5 * delta**2 - 5 * delta + 2 ) * delta / 2
|
283
|
+
end
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
287
|
+
def FigurateNumbers.generalized_dodecahedral_numbers(left_index = 0)
|
288
|
+
Enumerator.new do |y|
|
289
|
+
((-1 * left_index.abs)..Float::INFINITY).each do |delta|
|
290
|
+
y << (9 * delta**2 - 9 * delta + 2) * delta / 2
|
291
|
+
end
|
292
|
+
end
|
293
|
+
end
|
294
|
+
|
295
|
+
def FigurateNumbers.generalized_hexagonal_prism_numbers(left_index = 0)
|
296
|
+
Enumerator.new do |y|
|
297
|
+
((-1 * left_index.abs)..Float::INFINITY).each do |delta|
|
298
|
+
y << delta * (3 * delta**2 - 3 * delta + 1)
|
299
|
+
end
|
300
|
+
end
|
301
|
+
end
|
302
|
+
|
303
|
+
## Multidimensional figurate numbers
|
304
|
+
def FigurateNumbers.factorial_iter(num)
|
305
|
+
t = 1
|
306
|
+
(1..num).each do |i|
|
307
|
+
t = t * i
|
308
|
+
end
|
309
|
+
t
|
310
|
+
end
|
311
|
+
|
312
|
+
def FigurateNumbers.binomial_coefficient(n, k)
|
313
|
+
factorial_iter(n) / (factorial_iter(k) * factorial_iter(n - k))
|
314
|
+
end
|
315
|
+
|
316
|
+
private_class_method :factorial_iter
|
317
|
+
private_class_method :binomial_coefficient
|
318
|
+
|
319
|
+
def FigurateNumbers.pentatope_numbers
|
320
|
+
Enumerator.new do |y|
|
321
|
+
(1..Float::INFINITY).each do |delta|
|
322
|
+
y << (delta * (delta + 1) * (delta + 2) * (delta + 3)) / 24
|
323
|
+
end
|
324
|
+
end
|
325
|
+
end
|
326
|
+
|
327
|
+
def FigurateNumbers.k_dimensional_hypertetrahedron_numbers(k)
|
328
|
+
Enumerator.new do |y|
|
329
|
+
(1..Float::INFINITY).each do |delta|
|
330
|
+
y << binomial_coefficient(delta + (k - 1), k)
|
331
|
+
end
|
332
|
+
end
|
333
|
+
end
|
334
|
+
|
335
|
+
def FigurateNumbers.biquadratic_numbers
|
336
|
+
Enumerator.new do |y|
|
337
|
+
(1..Float::INFINITY).each do |delta|
|
338
|
+
y << delta**4
|
339
|
+
end
|
340
|
+
end
|
341
|
+
end
|
342
|
+
|
343
|
+
def FigurateNumbers.k_dimensional_hypercube_numbers(k)
|
344
|
+
Enumerator.new do |y|
|
345
|
+
(1..Float::INFINITY).each do |delta|
|
346
|
+
y << delta**k
|
347
|
+
end
|
348
|
+
end
|
349
|
+
end
|
350
|
+
|
351
|
+
def FigurateNumbers.hyperoctahedral_numbers
|
352
|
+
Enumerator.new do |y|
|
353
|
+
(1..Float::INFINITY).each do |delta|
|
354
|
+
y << (delta**2 * (delta**2 + 2)) / 3
|
355
|
+
end
|
356
|
+
end
|
357
|
+
end
|
358
|
+
|
359
|
+
def FigurateNumbers.hypericosahedral_numbers
|
360
|
+
Enumerator.new do |y|
|
361
|
+
(1..Float::INFINITY).each do |delta|
|
362
|
+
y << (delta * (145 * delta ** 3 - 280 * delta**2 + 179 * delta - 38)) / 6
|
363
|
+
end
|
364
|
+
end
|
365
|
+
end
|
366
|
+
|
367
|
+
def FigurateNumbers.hyperdodecahedral_numbers
|
368
|
+
Enumerator.new do |y|
|
369
|
+
(1..Float::INFINITY).each do |delta|
|
370
|
+
y << (delta * (261 * delta**3 - 504 * delta**2 + 283 * delta - 38)) / 2
|
371
|
+
end
|
372
|
+
end
|
373
|
+
end
|
374
|
+
|
375
|
+
def FigurateNumbers.polyoctahedral_numbers
|
376
|
+
Enumerator.new do |y|
|
377
|
+
(1..Float::INFINITY).each do |delta|
|
378
|
+
y << delta**2 * (3 * delta**2 - 4 * delta + 2)
|
379
|
+
end
|
380
|
+
end
|
381
|
+
end
|
382
|
+
|
383
|
+
def FigurateNumbers.four_dimensional_pyramidal_numbers(m)
|
384
|
+
Enumerator.new do |y|
|
385
|
+
(1..Float::INFINITY).each do |delta|
|
386
|
+
y << (delta * (delta + 1) * (delta + 2) * ((m - 2) * delta - m + 6)) / 24
|
387
|
+
end
|
388
|
+
end
|
389
|
+
end
|
390
|
+
|
391
|
+
def FigurateNumbers.five_dimensional_pyramidal_numbers(m)
|
392
|
+
Enumerator.new do |y|
|
393
|
+
(1..Float::INFINITY).each do |delta|
|
394
|
+
y << (delta * (delta + 1) * (delta + 2) * (delta + 3) * ((m - 2) * delta - m + 7)) / 120
|
395
|
+
end
|
396
|
+
end
|
397
|
+
end
|
398
|
+
|
399
|
+
def FigurateNumbers.six_dimensional_pyramidal_numbers(m)
|
400
|
+
Enumerator.new do |y|
|
401
|
+
(1..Float::INFINITY).each do |delta|
|
402
|
+
y << (delta * (delta + 1) * (delta + 2) * (delta + 3) * (delta + 4) * ((m - 2) * delta - m + 8)) / 720
|
403
|
+
end
|
404
|
+
end
|
405
|
+
end
|
406
|
+
|
407
|
+
def FigurateNumbers.pseudo_rising_factorial(n, k)
|
408
|
+
t = 1
|
409
|
+
(n..(n + k - 2)).each do |i|
|
410
|
+
t *= i
|
411
|
+
end
|
412
|
+
t
|
413
|
+
end
|
414
|
+
|
415
|
+
def FigurateNumbers.pseudo_pochhammer_function(n, k)
|
416
|
+
(n..(n + k - 2)).reduce(:*)
|
417
|
+
end
|
418
|
+
|
419
|
+
private_class_method :pseudo_rising_factorial
|
420
|
+
private_class_method :pseudo_pochhammer_function
|
421
|
+
|
422
|
+
def FigurateNumbers.k_dimensional_pyramidal_numbers(k, m)
|
423
|
+
Enumerator.new do |y|
|
424
|
+
(1..Float::INFINITY).each do |n|
|
425
|
+
y << (pseudo_pochhammer_function(n, k) * ((m - 2) * n - m + k + 2)) /
|
426
|
+
factorial_iter(k)
|
427
|
+
end
|
428
|
+
end
|
429
|
+
end
|
430
|
+
|
431
|
+
def FigurateNumbers.k_dimensional_centered_hypercube_numbers(k)
|
432
|
+
Enumerator.new do |y|
|
433
|
+
(1..Float::INFINITY).each do |delta|
|
434
|
+
y << delta**k + (delta - 1)**k
|
435
|
+
end
|
436
|
+
end
|
437
|
+
end
|
438
|
+
|
439
|
+
def FigurateNumbers.centered_polytope_numbers
|
440
|
+
Enumerator.new do |y|
|
441
|
+
(1..Float::INFINITY).each do |delta|
|
442
|
+
y << (5 * delta**4 - 10 * delta**3 + 55 * delta**2 - 50 * delta + 24) / 24
|
443
|
+
end
|
444
|
+
end
|
445
|
+
end
|
446
|
+
|
447
|
+
def FigurateNumbers.helper_centered_hypertetrahedron(k, n)
|
448
|
+
return 1 if n == 1
|
449
|
+
t = binomial_coefficient(k + 1, k)
|
450
|
+
return t if n == 2
|
451
|
+
tau = 0
|
452
|
+
(0..k-1).each do |i|
|
453
|
+
tau += binomial_coefficient(k + 1, k - i) * binomial_coefficient(n - 2, i)
|
454
|
+
end
|
455
|
+
tau
|
456
|
+
end
|
457
|
+
|
458
|
+
def FigurateNumbers.acc_helper_centered_hypertetrahedron(k, n)
|
459
|
+
a = 0
|
460
|
+
(1..n).each do |j|
|
461
|
+
a += helper_centered_hypertetrahedron(k, j)
|
462
|
+
end
|
463
|
+
a
|
464
|
+
end
|
465
|
+
|
466
|
+
private_class_method :helper_centered_hypertetrahedron
|
467
|
+
private_class_method :acc_helper_centered_hypertetrahedron
|
468
|
+
|
469
|
+
def FigurateNumbers.k_dimensional_centered_hypertetrahedron_numbers(k)
|
470
|
+
Enumerator.new do |y|
|
471
|
+
(1..Float::INFINITY).each do |n|
|
472
|
+
y << acc_helper_centered_hypertetrahedron(k, n)
|
473
|
+
end
|
474
|
+
end
|
475
|
+
end
|
476
|
+
|
477
|
+
def FigurateNumbers.centered_hyperotahedral_numbers
|
478
|
+
Enumerator.new do |y|
|
479
|
+
(1..Float::INFINITY).each do |delta|
|
480
|
+
y << (2 * delta**4 - 4 * delta**3 + 10 * delta**2 - 8 * delta + 3) / 3
|
481
|
+
end
|
482
|
+
end
|
483
|
+
end
|
484
|
+
|
485
|
+
def FigurateNumbers.nexus_numbers(k)
|
486
|
+
Enumerator.new do |y|
|
487
|
+
(0..Float::INFINITY).each do |n|
|
488
|
+
y << (n + 1)**(k + 1) - (n**(k + 1))
|
489
|
+
end
|
490
|
+
end
|
491
|
+
end
|
492
|
+
|
493
|
+
def FigurateNumbers.ext_int_double_summation(k, n)
|
494
|
+
t = ((2**(1)) * binomial_coefficient(k, 1) * binomial_coefficient(1, 0))
|
495
|
+
return (t + 1) if n == 1
|
496
|
+
a = 0
|
497
|
+
(1..(n - 1)).each do |j|
|
498
|
+
(0..(k - 1)).each do |i|
|
499
|
+
a += (2**(1 + i)) * binomial_coefficient(k, 1 + i) * binomial_coefficient(j, i)
|
500
|
+
end
|
501
|
+
end
|
502
|
+
(1 + t + a)
|
503
|
+
end
|
504
|
+
|
505
|
+
private_class_method :ext_int_double_summation
|
506
|
+
|
507
|
+
def FigurateNumbers.k_dimensional_centered_hyperoctahedron_numbers(k)
|
508
|
+
Enumerator.new do |y|
|
509
|
+
y << 1
|
510
|
+
(1..Float::INFINITY).each do |n|
|
511
|
+
y << ext_int_double_summation(k, n)
|
512
|
+
end
|
513
|
+
end
|
514
|
+
end
|
515
|
+
|
516
|
+
end
|
metadata
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: figurate_numbers
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.9
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Edgar Armando Delgado Vega
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-06-15 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Implementation of sequences of figurate numbers in the plane, space and
|
14
|
+
multidimensional using the enumerator class. Intended for use in Sonic Pi.
|
15
|
+
email: edelve91@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/figurate_numbers.rb
|
21
|
+
homepage: https://rubygems.org/gems/figurate_numbers
|
22
|
+
licenses:
|
23
|
+
- MIT
|
24
|
+
metadata: {}
|
25
|
+
post_install_message:
|
26
|
+
rdoc_options: []
|
27
|
+
require_paths:
|
28
|
+
- lib
|
29
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ">="
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
requirements: []
|
40
|
+
rubygems_version: 3.3.7
|
41
|
+
signing_key:
|
42
|
+
specification_version: 4
|
43
|
+
summary: Generates sequences of figurative numbers based on the book Figurate Numbers(2012)
|
44
|
+
by Elena Deza and Michel Deza
|
45
|
+
test_files: []
|