figurate_numbers 0.9.6 → 1.0.0

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/figurate_numbers.rb +1576 -166
  3. metadata +7 -7
@@ -1,8 +1,9 @@
1
1
  # Generates infinite sequences of plane, space, and multidimensional figurate numbers based on the book ‘Figurate Numbers’ (2012) by Elena Deza and Michel Deza. The methods are implemented using the Enumerator class and are designed for use in Sonic Pi.
2
2
 
3
3
  module FigurateNumbers
4
+ extend self
4
5
 
5
- def FigurateNumbers.polygonal_numbers(m)
6
+ def polygonal_numbers(m)
6
7
  Enumerator.new do |y|
7
8
  (1..Float::INFINITY).each do |delta|
8
9
  y << ((m - 2) * delta**2 - (m - 4) * delta) / 2
@@ -10,503 +11,1912 @@ module FigurateNumbers
10
11
  end
11
12
  end
12
13
 
13
- def FigurateNumbers.centered_pol_numbers(k)
14
+ def triangular_numbers
14
15
  Enumerator.new do |y|
15
16
  (1..Float::INFINITY).each do |delta|
16
- y << (k * delta**2 - k * delta + 2) / 2
17
+ y << (delta**2 + delta) / 2
17
18
  end
18
19
  end
19
20
  end
20
21
 
21
- def FigurateNumbers.pronic_numbers
22
- (1..Float::INFINITY).lazy.collect { |delta| delta * (delta + 1)}
22
+ def square_numbers
23
+ Enumerator.new do |y|
24
+ (1..Float::INFINITY).each do |delta|
25
+ y << (2 * delta**2) / 2
26
+ end
27
+ end
23
28
  end
24
29
 
25
- def FigurateNumbers.cross_numbers
26
- (1..Float::INFINITY).lazy.collect { |delta| 4 * delta - 3}
30
+ def pentagonal_numbers
31
+ Enumerator.new do |y|
32
+ (1..Float::INFINITY).each do |delta|
33
+ y << (3 * delta**2 - delta) / 2
34
+ end
35
+ end
27
36
  end
28
37
 
29
- def FigurateNumbers.aztec_diamond_numbers
30
- (1..Float::INFINITY).lazy.collect { |delta| (2 * delta) * (delta + 1)}
38
+ def hexagonal_numbers
39
+ Enumerator.new do |y|
40
+ (1..Float::INFINITY).each do |delta|
41
+ y << (4 * delta**2 - 2 * delta) / 2
42
+ end
43
+ end
31
44
  end
32
45
 
33
- def FigurateNumbers.polygram_numbers(m)
46
+ def heptagonal_numbers
34
47
  Enumerator.new do |y|
35
48
  (1..Float::INFINITY).each do |delta|
36
- y << m * delta**2 - m * delta + 1
49
+ y << (5 * delta**2 - 3 * delta) / 2
37
50
  end
38
51
  end
39
52
  end
40
53
 
41
- def FigurateNumbers.gnomic_numbers
42
- (1..Float::INFINITY).lazy.collect { |delta| 2 * delta - 1}
54
+ def octagonal_numbers
55
+ Enumerator.new do |y|
56
+ (1..Float::INFINITY).each do |delta|
57
+ y << (6 * delta**2 - 4 * delta) / 2
58
+ end
59
+ end
43
60
  end
44
61
 
45
- def FigurateNumbers.truncated_triangular_numbers
62
+ def nonagonal_numbers
46
63
  Enumerator.new do |y|
47
64
  (1..Float::INFINITY).each do |delta|
48
- y << (3 * delta**2) - (3 * delta) + 1
65
+ y << (7 * delta**2 - 5 * delta) / 2
49
66
  end
50
67
  end
51
68
  end
52
69
 
53
- def FigurateNumbers.truncated_square_numbers
70
+ def decagonal_numbers
54
71
  Enumerator.new do |y|
55
72
  (1..Float::INFINITY).each do |delta|
56
- y << (7 * delta**2) - (10 * delta) + 4
73
+ y << (8 * delta**2 - 6 * delta) / 2
57
74
  end
58
75
  end
59
76
  end
60
77
 
61
- def FigurateNumbers.truncated_pronic_numbers
78
+ def hendecagonal_numbers
62
79
  Enumerator.new do |y|
63
80
  (1..Float::INFINITY).each do |delta|
64
- y << (7 * delta**2) - (7 * delta) + 2
81
+ y << (9 * delta**2 - 7 * delta) / 2
65
82
  end
66
83
  end
67
84
  end
68
85
 
69
- def FigurateNumbers.truncated_center_pol_numbers(k)
86
+ def dodecagonal_numbers
70
87
  Enumerator.new do |y|
71
88
  (1..Float::INFINITY).each do |delta|
72
- y << 1 + (k * (7 * delta**2 - 11 * delta + 4)) / 2
89
+ y << (10 * delta**2 - 8 * delta) / 2
73
90
  end
74
91
  end
75
92
  end
76
93
 
77
- def FigurateNumbers.r_pyramidal_numbers(r = 3)
94
+ def tridecagonal_numbers
78
95
  Enumerator.new do |y|
79
96
  (1..Float::INFINITY).each do |delta|
80
- y << (3 * delta**2 + delta**3 * (r - 2) - delta * (r - 5)) / 6
97
+ y << (11 * delta**2 - 9 * delta) / 2
81
98
  end
82
99
  end
83
100
  end
84
101
 
85
- def FigurateNumbers.cubic_numbers
102
+ def tetradecagonal_numbers
86
103
  Enumerator.new do |y|
87
104
  (1..Float::INFINITY).each do |delta|
88
- y << delta**3
105
+ y << (12 * delta**2 - 10 * delta) / 2
89
106
  end
90
107
  end
91
108
  end
92
109
 
93
- def FigurateNumbers.tetrahedral_numbers
110
+ def pentadecagonal_numbers
94
111
  Enumerator.new do |y|
95
112
  (1..Float::INFINITY).each do |delta|
96
- y << (delta * (delta + 1) * (delta + 2)) / 6
113
+ y << (13 * delta**2 - 11 * delta) / 2
97
114
  end
98
115
  end
99
116
  end
100
117
 
101
- def FigurateNumbers.octahedral_numbers
118
+ def hexadecagonal_numbers
102
119
  Enumerator.new do |y|
103
120
  (1..Float::INFINITY).each do |delta|
104
- y << (delta * (2 * delta**2 + 1)) / 3
121
+ y << (14 * delta**2 - 12 * delta) / 2
105
122
  end
106
123
  end
107
124
  end
108
125
 
109
- def FigurateNumbers.dodecahedral_numbers
126
+ def heptadecagonal_numbers
110
127
  Enumerator.new do |y|
111
128
  (1..Float::INFINITY).each do |delta|
112
- y << (delta * (3 * delta -1) * (3 * delta - 2)) / 2
129
+ y << (15 * delta**2 - 13 * delta) / 2
113
130
  end
114
131
  end
115
132
  end
116
133
 
117
- def FigurateNumbers.icosahedral_numbers
134
+ def octadecagonal_numbers
118
135
  Enumerator.new do |y|
119
136
  (1..Float::INFINITY).each do |delta|
120
- y << (delta * (5 * delta**2 - 5 * delta + 2)) / 2
137
+ y << (16 * delta**2 - 14 * delta) / 2
121
138
  end
122
139
  end
123
140
  end
124
141
 
125
- def FigurateNumbers.truncated_tetrahedral_numbers
142
+ def nonadecagonal_numbers
126
143
  Enumerator.new do |y|
127
144
  (1..Float::INFINITY).each do |delta|
128
- y << (23 * delta**2 - 27 * delta + 10) * delta / 6
145
+ y << (17 * delta**2 - 15 * delta) / 2
129
146
  end
130
147
  end
131
148
  end
132
149
 
133
- def FigurateNumbers.truncated_cubic_numbers
150
+ def icosagonal_numbers
134
151
  Enumerator.new do |y|
135
152
  (1..Float::INFINITY).each do |delta|
136
- y << (3 * delta - 2)**3 - ((8 * (delta - 1) * delta * (delta + 1)) / 6)
153
+ y << (18 * delta**2 - 16 * delta) / 2
137
154
  end
138
155
  end
139
156
  end
140
157
 
141
- def FigurateNumbers.truncated_octahedral_numbers
158
+ def icosihenagonal_numbers
142
159
  Enumerator.new do |y|
143
160
  (1..Float::INFINITY).each do |delta|
144
- y << (16 * delta**3 - 33 * delta**2 + 24 * delta - 6)
161
+ y << (19 * delta**2 - 17 * delta) / 2
145
162
  end
146
163
  end
147
164
  end
148
165
 
149
- def FigurateNumbers.stella_octangula_numbers
166
+ def icosidigonal_numbers
150
167
  Enumerator.new do |y|
151
168
  (1..Float::INFINITY).each do |delta|
152
- y << delta * (2 * delta**2 - 1)
169
+ y << (20 * delta**2 - 18 * delta) / 2
153
170
  end
154
171
  end
155
172
  end
156
173
 
157
- def FigurateNumbers.centered_cube_numbers
174
+ def icositrigonal_numbers
158
175
  Enumerator.new do |y|
159
176
  (1..Float::INFINITY).each do |delta|
160
- y << (2 * delta - 1) * (delta**2 - delta + 1)
177
+ y << (21 * delta**2 - 19 * delta) / 2
161
178
  end
162
179
  end
163
180
  end
164
181
 
165
- def FigurateNumbers.rhombic_dodecahedral_numbers
182
+ def icositetragonal_numbers
166
183
  Enumerator.new do |y|
167
184
  (1..Float::INFINITY).each do |delta|
168
- y << (2 * delta - 1) * (2 * delta**2 - 2 * delta + 1)
185
+ y << (22 * delta**2 - 20 * delta) / 2
169
186
  end
170
187
  end
171
188
  end
172
189
 
173
- def FigurateNumbers.hauy_rhombic_dodecahedral_numbers
190
+ def icosipentagonal_numbers
174
191
  Enumerator.new do |y|
175
192
  (1..Float::INFINITY).each do |delta|
176
- y << (2 * delta - 1) * (8 * delta**2 - 14 * delta + 7)
193
+ y << (23 * delta**2 - 21 * delta) / 2
177
194
  end
178
195
  end
179
196
  end
180
197
 
181
- def FigurateNumbers.centered_tetrahedral_numbers
198
+ def icosihexagonal_numbers
182
199
  Enumerator.new do |y|
183
200
  (1..Float::INFINITY).each do |delta|
184
- y << (2 * delta - 1) * ((delta**2 - delta + 3)) / 3
201
+ y << (24 * delta**2 - 22 * delta) / 2
185
202
  end
186
203
  end
187
204
  end
188
205
 
189
- def FigurateNumbers.centered_square_pyramid_numbers
206
+ def icosiheptagonal_numbers
190
207
  Enumerator.new do |y|
191
208
  (1..Float::INFINITY).each do |delta|
192
- y << (2 * delta - 1) * ((delta**2 - delta + 2)) / 2
209
+ y << (25 * delta**2 - 23 * delta) / 2
193
210
  end
194
211
  end
195
212
  end
196
213
 
197
- def FigurateNumbers.centered_pentagonal_pyramid_numbers
214
+ def icosioctagonal_numbers
198
215
  Enumerator.new do |y|
199
216
  (1..Float::INFINITY).each do |delta|
200
- y << (2 * delta - 1) * ( 2 * delta**2 - 2 * delta + 3) / 3
217
+ y << (26 * delta**2 - 24 * delta) / 2
201
218
  end
202
219
  end
203
220
  end
204
221
 
205
- def FigurateNumbers.centered_hexagonal_pyramid_numbers
222
+ def icosinonagonal_numbers
206
223
  Enumerator.new do |y|
207
224
  (1..Float::INFINITY).each do |delta|
208
- y << (2 * delta - 1) * (5 * delta**2 - 5 * delta + 6) / 6
225
+ y << (27 * delta**2 - 25 * delta) / 2
209
226
  end
210
227
  end
211
228
  end
212
229
 
213
- def FigurateNumbers.centered_heptagonal_pyramid_numbers
230
+ def triacontagonal_numbers
214
231
  Enumerator.new do |y|
215
232
  (1..Float::INFINITY).each do |delta|
216
- y << (2 * delta - 1) * (delta**2 - delta + 1)
233
+ y << (28 * delta**2 - 26 * delta) / 2
217
234
  end
218
235
  end
219
236
  end
220
237
 
221
- def FigurateNumbers.centered_octagonal_pyramid_numbers
238
+ def centered_triangular_numbers
222
239
  Enumerator.new do |y|
223
240
  (1..Float::INFINITY).each do |delta|
224
- y << (2 * delta - 1) * (7 * delta**2 - 7 * delta + 6) / 6
241
+ y << (3 * delta**2 - 3 * delta + 2) / 2
225
242
  end
226
243
  end
227
244
  end
228
245
 
229
- def FigurateNumbers.centered_icosahedron_numbers
246
+ def centered_square_numbers
230
247
  Enumerator.new do |y|
231
248
  (1..Float::INFINITY).each do |delta|
232
- y << (2 * delta - 1) * (5 * delta**2 - 5 * delta + 3) / 3
249
+ y << 2 * delta**2 - 2 * delta + 1
233
250
  end
234
251
  end
235
252
  end
236
253
 
237
- def FigurateNumbers.centered_dodecahedron_numbers
254
+ alias_method :diamond_numbers, :centered_square_numbers
255
+
256
+ def centered_pentagonal_numbers
238
257
  Enumerator.new do |y|
239
258
  (1..Float::INFINITY).each do |delta|
240
- y << (2 * delta - 1) * (3 * delta**2 - 3 * delta + 1)
259
+ y << (5 * delta**2 - 5 * delta + 2) / 2
241
260
  end
242
261
  end
243
262
  end
244
263
 
245
- def FigurateNumbers.centered_mgonal_pyramid_numbers(m)
264
+ def centered_hexagonal_numbers
246
265
  Enumerator.new do |y|
247
266
  (1..Float::INFINITY).each do |delta|
248
- y << (m - 1) * ((delta - 1) * delta * (2 * delta - 1)) / 6 + (2 * delta - 1)
267
+ y << 3 * delta**2 - 3 * delta + 1
249
268
  end
250
269
  end
251
270
  end
252
271
 
253
- def FigurateNumbers.centered_mgonal_pyramidal_numbers(m)
272
+ def centered_heptagonal_numbers
254
273
  Enumerator.new do |y|
255
274
  (1..Float::INFINITY).each do |delta|
256
- y << (m * delta**3 + delta * (6 - m)) / 6
275
+ y << (7 * delta**2 - 7 * delta + 2) / 2
257
276
  end
258
277
  end
259
278
  end
260
279
 
261
- def FigurateNumbers.hexagonal_prism_numbers
280
+ def centered_octagonal_numbers
262
281
  Enumerator.new do |y|
263
282
  (1..Float::INFINITY).each do |delta|
264
- y << delta * ( 3 * delta**2 - 3 * delta + 1)
283
+ y << 4 * delta**2 - 4 * delta + 1
265
284
  end
266
285
  end
267
286
  end
268
287
 
269
- def FigurateNumbers.generalized_mgonal_pyramidal_numbers(m, left_index = 0)
288
+ def centered_nonagonal_numbers
270
289
  Enumerator.new do |y|
271
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
272
- y << (delta * (delta + 1) * ((m - 2) * delta - m + 5 )) / 6
290
+ (1..Float::INFINITY).each do |delta|
291
+ y << (9 * delta**2 - 9 * delta + 2) / 2
273
292
  end
274
293
  end
275
294
  end
276
295
 
277
- def FigurateNumbers.generalized_icosahedral_numbers(left_index = 0)
296
+ def centered_decagonal_numbers
278
297
  Enumerator.new do |y|
279
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
280
- y << ( 5 * delta**2 - 5 * delta + 2 ) * delta / 2
298
+ (1..Float::INFINITY).each do |delta|
299
+ y << 5 * delta**2 - 5 * delta + 1
281
300
  end
282
301
  end
283
302
  end
284
303
 
285
- def FigurateNumbers.generalized_dodecahedral_numbers(left_index = 0)
304
+ def centered_hendecagonal_numbers
286
305
  Enumerator.new do |y|
287
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
288
- y << (9 * delta**2 - 9 * delta + 2) * delta / 2
306
+ (1..Float::INFINITY).each do |delta|
307
+ y << (11 * delta**2 - 11 * delta + 2) / 2
289
308
  end
290
309
  end
291
310
  end
292
311
 
293
- def FigurateNumbers.generalized_hexagonal_prism_numbers(left_index = 0)
312
+ def centered_dodecagonal_numbers
294
313
  Enumerator.new do |y|
295
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
296
- y << delta * (3 * delta**2 - 3 * delta + 1)
314
+ (1..Float::INFINITY).each do |delta|
315
+ y << 6 * delta**2 - 6 * delta + 1
297
316
  end
298
317
  end
299
318
  end
300
319
 
301
- def FigurateNumbers.factorial_iter(num)
302
- t = 1
303
- (1..num).each do |i|
304
- t = t * i
320
+ alias_method :star_numbers, :centered_dodecagonal_numbers
321
+
322
+ def centered_tridecagonal_numbers
323
+ Enumerator.new do |y|
324
+ (1..Float::INFINITY).each do |delta|
325
+ y << (13 * delta**2 - 13 * delta + 2) / 2
326
+ end
305
327
  end
306
- t
307
328
  end
308
329
 
309
- def FigurateNumbers.binomial_coefficient(n, k)
310
- factorial_iter(n) / (factorial_iter(k) * factorial_iter(n - k))
330
+ def centered_tetradecagonal_numbers
331
+ Enumerator.new do |y|
332
+ (1..Float::INFINITY).each do |delta|
333
+ y << 7 * delta**2 - 7 * delta + 1
334
+ end
335
+ end
311
336
  end
312
337
 
313
- private_class_method :factorial_iter
314
- private_class_method :binomial_coefficient
338
+ def centered_pentadecagonal_numbers
339
+ Enumerator.new do |y|
340
+ (1..Float::INFINITY).each do |delta|
341
+ y << (15 * delta**2 - 15 * delta + 2) / 2
342
+ end
343
+ end
344
+ end
315
345
 
316
- def FigurateNumbers.pentatope_numbers
346
+ def centered_hexadecagonal_numbers
317
347
  Enumerator.new do |y|
318
348
  (1..Float::INFINITY).each do |delta|
319
- y << (delta * (delta + 1) * (delta + 2) * (delta + 3)) / 24
349
+ y << 8 * delta**2 - 8 * delta + 1
320
350
  end
321
351
  end
322
352
  end
323
353
 
324
- def FigurateNumbers.k_dimensional_hypertetrahedron_numbers(k)
354
+ def centered_heptadecagonal_numbers
325
355
  Enumerator.new do |y|
326
356
  (1..Float::INFINITY).each do |delta|
327
- y << binomial_coefficient(delta + (k - 1), k)
357
+ y << (17 * delta**2 - 17 * delta + 2) / 2
328
358
  end
329
359
  end
330
360
  end
331
361
 
332
- def FigurateNumbers.biquadratic_numbers
362
+ def centered_octadecagonal_numbers
333
363
  Enumerator.new do |y|
334
364
  (1..Float::INFINITY).each do |delta|
335
- y << delta**4
365
+ y << 9 * delta**2 - 9 * delta + 1
336
366
  end
337
367
  end
338
368
  end
339
369
 
340
- def FigurateNumbers.k_dimensional_hypercube_numbers(k)
370
+ def centered_nonadecagonal_numbers
341
371
  Enumerator.new do |y|
342
372
  (1..Float::INFINITY).each do |delta|
343
- y << delta**k
373
+ y << (19 * delta**2 - 19 * delta + 2) / 2
344
374
  end
345
375
  end
346
376
  end
347
377
 
348
- def FigurateNumbers.hyperoctahedral_numbers
378
+ def centered_icosagonal_numbers
349
379
  Enumerator.new do |y|
350
380
  (1..Float::INFINITY).each do |delta|
351
- y << (delta**2 * (delta**2 + 2)) / 3
381
+ y << 10 * delta**2 - 10 * delta + 1
352
382
  end
353
383
  end
354
384
  end
355
385
 
356
- def FigurateNumbers.hypericosahedral_numbers
386
+ def centered_icosihenagonal_numbers
357
387
  Enumerator.new do |y|
358
388
  (1..Float::INFINITY).each do |delta|
359
- y << (delta * (145 * delta ** 3 - 280 * delta**2 + 179 * delta - 38)) / 6
389
+ y << (21 * delta**2 - 21 * delta + 2) / 2
360
390
  end
361
391
  end
362
392
  end
363
393
 
364
- def FigurateNumbers.hyperdodecahedral_numbers
394
+ def centered_icosidigonal_numbers
365
395
  Enumerator.new do |y|
366
396
  (1..Float::INFINITY).each do |delta|
367
- y << (delta * (261 * delta**3 - 504 * delta**2 + 283 * delta - 38)) / 2
397
+ y << 11 * delta**2 - 11 * delta + 1
368
398
  end
369
399
  end
370
400
  end
371
401
 
372
- def FigurateNumbers.polyoctahedral_numbers
402
+ def centered_icositrigonal_numbers
373
403
  Enumerator.new do |y|
374
404
  (1..Float::INFINITY).each do |delta|
375
- y << delta**2 * (3 * delta**2 - 4 * delta + 2)
405
+ y << (23 * delta**2 - 23 * delta + 2) / 2
376
406
  end
377
407
  end
378
408
  end
379
409
 
380
- def FigurateNumbers.four_dimensional_pyramidal_numbers(m)
410
+ def centered_icositetragonal_numbers
381
411
  Enumerator.new do |y|
382
412
  (1..Float::INFINITY).each do |delta|
383
- y << (delta * (delta + 1) * (delta + 2) * ((m - 2) * delta - m + 6)) / 24
413
+ y << 12 * delta**2 - 12 * delta + 1
384
414
  end
385
415
  end
386
416
  end
387
417
 
388
- def FigurateNumbers.five_dimensional_pyramidal_numbers(m)
418
+ def centered_icosipentagonal_numbers
389
419
  Enumerator.new do |y|
390
420
  (1..Float::INFINITY).each do |delta|
391
- y << (delta * (delta + 1) * (delta + 2) * (delta + 3) * ((m - 2) * delta - m + 7)) / 120
421
+ y << (25 * delta**2 - 25 * delta + 2) / 2
392
422
  end
393
423
  end
394
424
  end
395
425
 
396
- def FigurateNumbers.six_dimensional_pyramidal_numbers(m)
426
+ def centered_icosihexagonal_numbers
397
427
  Enumerator.new do |y|
398
428
  (1..Float::INFINITY).each do |delta|
399
- y << (delta * (delta + 1) * (delta + 2) * (delta + 3) * (delta + 4) * ((m - 2) * delta - m + 8)) / 720
429
+ y << (13 * delta**2 - 13 * delta + 1)
400
430
  end
401
431
  end
402
432
  end
403
433
 
404
- def FigurateNumbers.pseudo_rising_factorial(n, k)
405
- t = 1
406
- (n..(n + k - 2)).each do |i|
407
- t *= i
434
+ def centered_icosiheptagonal_numbers
435
+ Enumerator.new do |y|
436
+ (1..Float::INFINITY).each do |delta|
437
+ y << (27 * delta**2 - 27 * delta + 2) / 2
438
+ end
408
439
  end
409
- t
410
440
  end
411
441
 
412
- def FigurateNumbers.pseudo_pochhammer_function(n, k)
413
- (n..(n + k - 2)).reduce(:*)
442
+ def centered_icosioctagonal_numbers
443
+ Enumerator.new do |y|
444
+ (1..Float::INFINITY).each do |delta|
445
+ y << (14 * delta**2 - 14 * delta + 1)
446
+ end
447
+ end
414
448
  end
415
449
 
416
- private_class_method :pseudo_rising_factorial
417
- private_class_method :pseudo_pochhammer_function
450
+ def centered_icosinonagonal_numbers
451
+ Enumerator.new do |y|
452
+ (1..Float::INFINITY).each do |delta|
453
+ y << (29 * delta**2 - 29 * delta + 2) / 2
454
+ end
455
+ end
456
+ end
418
457
 
419
- def FigurateNumbers.k_dimensional_pyramidal_numbers(k, m)
458
+ def centered_triacontagonal_numbers
420
459
  Enumerator.new do |y|
421
- (1..Float::INFINITY).each do |n|
422
- y << (pseudo_pochhammer_function(n, k) * ((m - 2) * n - m + k + 2)) /
423
- factorial_iter(k)
460
+ (1..Float::INFINITY).each do |delta|
461
+ y << (15 * delta**2 - 15 * delta + 1)
424
462
  end
425
463
  end
426
464
  end
427
465
 
428
- def FigurateNumbers.k_dimensional_centered_hypercube_numbers(k)
466
+ def centered_mgonal_numbers(m)
429
467
  Enumerator.new do |y|
430
468
  (1..Float::INFINITY).each do |delta|
431
- y << delta**k + (delta - 1)**k
469
+ y << (m * delta**2 - m * delta + 2) / 2
432
470
  end
433
471
  end
434
472
  end
435
473
 
436
- def FigurateNumbers.centered_polytope_numbers
474
+ def pronic_numbers
475
+ (1..Float::INFINITY).lazy.collect { |delta| delta * (delta + 1) }
476
+ end
477
+
478
+ alias_method :heteromecic_numbers, :pronic_numbers
479
+ alias_method :oblong_numbers, :pronic_numbers
480
+
481
+ def polite_numbers
482
+ (1..Float::INFINITY).lazy.collect { |delta| delta + Math.log((delta + Math.log(delta, 2)), 2).floor }
483
+ end
484
+
485
+ def impolite_numbers
486
+ (0..Float::INFINITY).lazy.collect { |delta| 2**delta }
487
+ end
488
+
489
+ def cross_numbers
490
+ (1..Float::INFINITY).lazy.collect { |delta| 4 * delta - 3 }
491
+ end
492
+
493
+ def aztec_diamond_numbers
494
+ (1..Float::INFINITY).lazy.collect { |delta| (2 * delta) * (delta + 1) }
495
+ end
496
+
497
+ def polygram_numbers(m)
437
498
  Enumerator.new do |y|
438
499
  (1..Float::INFINITY).each do |delta|
439
- y << (5 * delta**4 - 10 * delta**3 + 55 * delta**2 - 50 * delta + 24) / 24
500
+ y << m * delta**2 - m * delta + 1
440
501
  end
441
502
  end
442
503
  end
443
504
 
444
- def FigurateNumbers.helper_centered_hypertetrahedron(k, n)
445
- return 1 if n == 1
446
- t = binomial_coefficient(k + 1, k)
447
- return t if n == 2
448
- tau = 0
449
- (0..k-1).each do |i|
450
- tau += binomial_coefficient(k + 1, k - i) * binomial_coefficient(n - 2, i)
505
+ alias_method :centered_star_polygonal_numbers, :polygram_numbers
506
+
507
+ def pentagram_numbers
508
+ Enumerator.new do |y|
509
+ (1..Float::INFINITY).each do |delta|
510
+ y << 5 * delta**2 - 5 * delta + 1
511
+ end
451
512
  end
452
- tau
453
513
  end
454
514
 
455
- def FigurateNumbers.acc_helper_centered_hypertetrahedron(k, n)
456
- a = 0
457
- (1..n).each do |j|
458
- a += helper_centered_hypertetrahedron(k, j)
515
+ def gnomic_numbers
516
+ (1..Float::INFINITY).lazy.collect { |delta| 2 * delta - 1 }
517
+ end
518
+
519
+ def truncated_triangular_numbers
520
+ Enumerator.new do |y|
521
+ (1..Float::INFINITY).each do |delta|
522
+ y << (3 * delta**2) - (3 * delta) + 1
523
+ end
459
524
  end
460
- a
461
525
  end
462
526
 
463
- private_class_method :helper_centered_hypertetrahedron
464
- private_class_method :acc_helper_centered_hypertetrahedron
527
+ def truncated_square_numbers
528
+ Enumerator.new do |y|
529
+ (1..Float::INFINITY).each do |delta|
530
+ y << (7 * delta**2) - (10 * delta) + 4
531
+ end
532
+ end
533
+ end
465
534
 
466
- def FigurateNumbers.k_dimensional_centered_hypertetrahedron_numbers(k)
535
+ def truncated_pronic_numbers
467
536
  Enumerator.new do |y|
468
- (1..Float::INFINITY).each do |n|
469
- y << acc_helper_centered_hypertetrahedron(k, n)
537
+ (1..Float::INFINITY).each do |delta|
538
+ y << (7 * delta**2) - (7 * delta) + 2
470
539
  end
471
540
  end
472
541
  end
473
542
 
474
- def FigurateNumbers.centered_hyperotahedral_numbers
543
+ def truncated_centered_pol_numbers(m)
475
544
  Enumerator.new do |y|
476
545
  (1..Float::INFINITY).each do |delta|
477
- y << (2 * delta**4 - 4 * delta**3 + 10 * delta**2 - 8 * delta + 3) / 3
546
+ y << 1 + (m * (7 * delta**2 - 11 * delta + 4)) / 2
547
+ end
548
+ end
549
+ end
550
+
551
+ alias_method :truncated_centered_mgonal_numbers, :truncated_centered_pol_numbers
552
+
553
+ def truncated_centered_triangular_numbers
554
+ Enumerator.new do |y|
555
+ (1..Float::INFINITY).each do |delta|
556
+ y << (21 * delta**2 - 33 * delta) / 2 + 7
478
557
  end
479
558
  end
480
559
  end
481
560
 
482
- def FigurateNumbers.nexus_numbers(k)
561
+ def truncated_centered_square_numbers
483
562
  Enumerator.new do |y|
484
- (0..Float::INFINITY).each do |n|
485
- y << (n + 1)**(k + 1) - (n**(k + 1))
563
+ (1..Float::INFINITY).each do |delta|
564
+ y << 14 * delta**2 - 22 * delta + 9
486
565
  end
487
566
  end
488
567
  end
489
568
 
490
- def FigurateNumbers.ext_int_double_summation(k, n)
491
- t = ((2**(1)) * binomial_coefficient(k, 1) * binomial_coefficient(1, 0))
492
- return (t + 1) if n == 1
493
- a = 0
494
- (1..(n - 1)).each do |j|
495
- (0..(k - 1)).each do |i|
496
- a += (2**(1 + i)) * binomial_coefficient(k, 1 + i) * binomial_coefficient(j, i)
569
+ def truncated_centered_pentagonal_numbers
570
+ Enumerator.new do |y|
571
+ (1..Float::INFINITY).each do |delta|
572
+ y << (35 * delta**2 - 55 * delta) / 2 + 11
497
573
  end
498
574
  end
499
- (1 + t + a)
500
575
  end
501
576
 
502
- private_class_method :ext_int_double_summation
577
+ def truncated_centered_hexagonal_numbers
578
+ Enumerator.new do |y|
579
+ (1..Float::INFINITY).each do |delta|
580
+ y << 21 * delta**2 - 33 * delta + 13
581
+ end
582
+ end
583
+ end
584
+
585
+ alias_method :truncated_hex_numbers, :truncated_centered_hexagonal_numbers
503
586
 
504
- def FigurateNumbers.k_dimensional_centered_hyperoctahedron_numbers(k)
587
+ def generalized_mgonal_numbers(m, left_index = 0)
505
588
  Enumerator.new do |y|
506
- y << 1
507
- (1..Float::INFINITY).each do |n|
508
- y << ext_int_double_summation(k, n)
589
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
590
+ y << (delta * ((m - 2) * delta - m + 4)) / 2
509
591
  end
510
592
  end
511
593
  end
512
- end
594
+
595
+ def generalized_pentagonal_numbers(left_index = 0)
596
+ m = 5
597
+ Enumerator.new do |y|
598
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
599
+ y << (delta * ((m - 2) * delta - m + 4)) / 2
600
+ end
601
+ end
602
+ end
603
+
604
+ def generalized_hexagonal_numbers(left_index = 0)
605
+ m = 6
606
+ Enumerator.new do |y|
607
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
608
+ y << (delta * ((m - 2) * delta - m + 4)) / 2
609
+ end
610
+ end
611
+ end
612
+
613
+ def generalized_centered_pol_numbers(m, left_index = 0)
614
+ Enumerator.new do |y|
615
+ ((-1 * left_index)..Float::INFINITY).each do |delta|
616
+ y << (m * delta**2 - m * delta + 2) / 2
617
+ end
618
+ end
619
+ end
620
+
621
+ def generalized_pronic_numbers(left_index = 0)
622
+ Enumerator.new do |y|
623
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
624
+ y << delta * (delta + 1)
625
+ end
626
+ end
627
+ end
628
+
629
+ def r_pyramidal_numbers(r = 3)
630
+ Enumerator.new do |y|
631
+ (1..Float::INFINITY).each do |delta|
632
+ y << (3 * delta**2 + delta**3 * (r - 2) - delta * (r - 5)) / 6
633
+ end
634
+ end
635
+ end
636
+
637
+ def cubic_numbers
638
+ Enumerator.new do |y|
639
+ (1..Float::INFINITY).each do |delta|
640
+ y << delta**3
641
+ end
642
+ end
643
+ end
644
+
645
+ def tetrahedral_numbers
646
+ Enumerator.new do |y|
647
+ (1..Float::INFINITY).each do |delta|
648
+ y << (delta * (delta + 1) * (delta + 2)) / 6
649
+ end
650
+ end
651
+ end
652
+
653
+ def octahedral_numbers
654
+ Enumerator.new do |y|
655
+ (1..Float::INFINITY).each do |delta|
656
+ y << (delta * (2 * delta**2 + 1)) / 3
657
+ end
658
+ end
659
+ end
660
+
661
+ def dodecahedral_numbers
662
+ Enumerator.new do |y|
663
+ (1..Float::INFINITY).each do |delta|
664
+ y << (delta * (3 * delta -1) * (3 * delta - 2)) / 2
665
+ end
666
+ end
667
+ end
668
+
669
+ def icosahedral_numbers
670
+ Enumerator.new do |y|
671
+ (1..Float::INFINITY).each do |delta|
672
+ y << (delta * (5 * delta**2 - 5 * delta + 2)) / 2
673
+ end
674
+ end
675
+ end
676
+
677
+ def truncated_tetrahedral_numbers
678
+ Enumerator.new do |y|
679
+ (1..Float::INFINITY).each do |delta|
680
+ y << (23 * delta**2 - 27 * delta + 10) * delta / 6
681
+ end
682
+ end
683
+ end
684
+
685
+ def truncated_cubic_numbers
686
+ Enumerator.new do |y|
687
+ (1..Float::INFINITY).each do |delta|
688
+ y << (3 * delta - 2)**3 - ((8 * (delta - 1) * delta * (delta + 1)) / 6)
689
+ end
690
+ end
691
+ end
692
+
693
+ def truncated_octahedral_numbers
694
+ Enumerator.new do |y|
695
+ (1..Float::INFINITY).each do |delta|
696
+ y << (16 * delta**3 - 33 * delta**2 + 24 * delta - 6)
697
+ end
698
+ end
699
+ end
700
+
701
+ def stella_octangula_numbers
702
+ Enumerator.new do |y|
703
+ (1..Float::INFINITY).each do |delta|
704
+ y << delta * (2 * delta**2 - 1)
705
+ end
706
+ end
707
+ end
708
+
709
+ def centered_cube_numbers
710
+ Enumerator.new do |y|
711
+ (1..Float::INFINITY).each do |delta|
712
+ y << (2 * delta - 1) * (delta**2 - delta + 1)
713
+ end
714
+ end
715
+ end
716
+
717
+ def rhombic_dodecahedral_numbers
718
+ Enumerator.new do |y|
719
+ (1..Float::INFINITY).each do |delta|
720
+ y << (2 * delta - 1) * (2 * delta**2 - 2 * delta + 1)
721
+ end
722
+ end
723
+ end
724
+
725
+ def hauy_rhombic_dodecahedral_numbers
726
+ Enumerator.new do |y|
727
+ (1..Float::INFINITY).each do |delta|
728
+ y << (2 * delta - 1) * (8 * delta**2 - 14 * delta + 7)
729
+ end
730
+ end
731
+ end
732
+
733
+ def centered_tetrahedron_numbers
734
+ Enumerator.new do |y|
735
+ (1..Float::INFINITY).each do |delta|
736
+ y << (2 * delta - 1) * ((delta**2 - delta + 3)) / 3
737
+ end
738
+ end
739
+ end
740
+
741
+ alias_method :centered_tetrahedral_numbers, :centered_tetrahedron_numbers
742
+
743
+ def centered_square_pyramid_numbers
744
+ Enumerator.new do |y|
745
+ (1..Float::INFINITY).each do |delta|
746
+ y << (2 * delta - 1) * ((delta**2 - delta + 2)) / 2
747
+ end
748
+ end
749
+ end
750
+
751
+ alias_method :centered_pyramid_numbers, :centered_square_pyramid_numbers
752
+
753
+ def centered_mgonal_pyramid_numbers(m)
754
+ Enumerator.new do |y|
755
+ (1..Float::INFINITY).each do |delta|
756
+ y << (m - 1) * ((delta - 1) * delta * (2 * delta - 1)) / 6 + (2 * delta - 1)
757
+ end
758
+ end
759
+ end
760
+
761
+ def centered_pentagonal_pyramid_numbers
762
+ Enumerator.new do |y|
763
+ (1..Float::INFINITY).each do |delta|
764
+ y << (2 * delta - 1) * ( 2 * delta**2 - 2 * delta + 3) / 3
765
+ end
766
+ end
767
+ end
768
+
769
+ def centered_hexagonal_pyramid_numbers
770
+ Enumerator.new do |y|
771
+ (1..Float::INFINITY).each do |delta|
772
+ y << (2 * delta - 1) * (5 * delta**2 - 5 * delta + 6) / 6
773
+ end
774
+ end
775
+ end
776
+
777
+ def centered_heptagonal_pyramid_numbers
778
+ Enumerator.new do |y|
779
+ (1..Float::INFINITY).each do |delta|
780
+ y << (2 * delta - 1) * (delta**2 - delta + 1)
781
+ end
782
+ end
783
+ end
784
+
785
+ def centered_octagonal_pyramid_numbers
786
+ Enumerator.new do |y|
787
+ (1..Float::INFINITY).each do |delta|
788
+ y << (2 * delta - 1) * (7 * delta**2 - 7 * delta + 6) / 6
789
+ end
790
+ end
791
+ end
792
+
793
+ def centered_octahedron_numbers
794
+ Enumerator.new do |y|
795
+ (1..Float::INFINITY).each do |delta|
796
+ y << (2 * delta - 1) * (2 * delta**2 - 2 * delta + 3) / 3
797
+ end
798
+ end
799
+ end
800
+
801
+ def centered_icosahedron_numbers
802
+ Enumerator.new do |y|
803
+ (1..Float::INFINITY).each do |delta|
804
+ y << (2 * delta - 1) * (5 * delta**2 - 5 * delta + 3) / 3
805
+ end
806
+ end
807
+ end
808
+
809
+ alias_method :centered_cuboctahedron_numbers, :centered_icosahedron_numbers
810
+
811
+ def centered_dodecahedron_numbers
812
+ Enumerator.new do |y|
813
+ (1..Float::INFINITY).each do |delta|
814
+ y << (2 * delta - 1) * (3 * delta**2 - 3 * delta + 1)
815
+ end
816
+ end
817
+ end
818
+
819
+ def centered_truncated_tetrahedron_numbers
820
+ Enumerator.new do |y|
821
+ (1..Float::INFINITY).each do |delta|
822
+ y << (2 * delta - 1) * (7 * delta**2 - 7 * delta + 3) / 3
823
+ end
824
+ end
825
+ end
826
+
827
+ def centered_truncated_cube_numbers
828
+ Enumerator.new do |y|
829
+ (1..Float::INFINITY).each do |delta|
830
+ y << (2 * delta - 1) * (23 * delta**2 - 23 * delta + 3) / 3
831
+ end
832
+ end
833
+ end
834
+
835
+ def centered_truncated_octahedron_numbers
836
+ Enumerator.new do |y|
837
+ (1..Float::INFINITY).each do |delta|
838
+ y << (2 * delta - 1) * (5 * delta**2 - 5 * delta + 1)
839
+ end
840
+ end
841
+ end
842
+
843
+ def centered_mgonal_pyramidal_numbers(m)
844
+ Enumerator.new do |y|
845
+ (1..Float::INFINITY).each do |delta|
846
+ y << (m * delta**3 + delta * (6 - m)) / 6
847
+ end
848
+ end
849
+ end
850
+
851
+ def centered_triangular_pyramidal_numbers
852
+ Enumerator.new do |y|
853
+ (1..Float::INFINITY).each do |delta|
854
+ y << delta * (delta**2 + 1) / 2
855
+ end
856
+ end
857
+ end
858
+
859
+ def centered_square_pyramidal_numbers
860
+ Enumerator.new do |y|
861
+ (1..Float::INFINITY).each do |delta|
862
+ y << (2 * delta**3 + delta) / 3
863
+ end
864
+ end
865
+ end
866
+
867
+ def centered_pentagonal_pyramidal_numbers
868
+ Enumerator.new do |y|
869
+ (1..Float::INFINITY).each do |delta|
870
+ y << (5 * delta**3 + delta) / 6
871
+ end
872
+ end
873
+ end
874
+
875
+ def centered_hexagonal_pyramidal_numbers
876
+ Enumerator.new do |y|
877
+ (1..Float::INFINITY).each do |delta|
878
+ y << delta**3
879
+ end
880
+ end
881
+ end
882
+
883
+ alias_method :hex_pyramidal_numbers, :centered_hexagonal_pyramidal_numbers
884
+
885
+ def centered_heptagonal_pyramidal_numbers
886
+ m = 7
887
+ Enumerator.new do |y|
888
+ (1..Float::INFINITY).each do |delta|
889
+ y << (m * delta**3 + delta * (6 - m)) / 6
890
+ end
891
+ end
892
+ end
893
+
894
+ def centered_octagonal_pyramidal_numbers
895
+ m = 8
896
+ Enumerator.new do |y|
897
+ (1..Float::INFINITY).each do |delta|
898
+ y << (m * delta**3 + delta * (6 - m)) / 6
899
+ end
900
+ end
901
+ end
902
+
903
+ def centered_nonagonal_pyramidal_numbers
904
+ m = 9
905
+ Enumerator.new do |y|
906
+ (1..Float::INFINITY).each do |delta|
907
+ y << (m * delta**3 + delta * (6 - m)) / 6
908
+ end
909
+ end
910
+ end
911
+
912
+ def centered_decagonal_pyramidal_numbers
913
+ m = 10
914
+ Enumerator.new do |y|
915
+ (1..Float::INFINITY).each do |delta|
916
+ y << (m * delta**3 + delta * (6 - m)) / 6
917
+ end
918
+ end
919
+ end
920
+
921
+ def centered_hendecagonal_pyramidal_numbers
922
+ m = 11
923
+ Enumerator.new do |y|
924
+ (1..Float::INFINITY).each do |delta|
925
+ y << (m * delta**3 + delta * (6 - m)) / 6
926
+ end
927
+ end
928
+ end
929
+
930
+ def centered_dodecagonal_pyramidal_numbers
931
+ m = 12
932
+ Enumerator.new do |y|
933
+ (1..Float::INFINITY).each do |delta|
934
+ y << (m * delta**3 + delta * (6 - m)) / 6
935
+ end
936
+ end
937
+ end
938
+
939
+ def hexagonal_prism_numbers
940
+ Enumerator.new do |y|
941
+ (1..Float::INFINITY).each do |delta|
942
+ y << delta * ( 3 * delta**2 - 3 * delta + 1)
943
+ end
944
+ end
945
+ end
946
+
947
+ def mgonal_prism_numbers(m)
948
+ Enumerator.new do |y|
949
+ (1..Float::INFINITY).each do |delta|
950
+ y << delta * (m * delta**2 - m * delta + 2) / 2
951
+ end
952
+ end
953
+ end
954
+
955
+ def generalized_mgonal_pyramidal_numbers(m, left_index = 0)
956
+ Enumerator.new do |y|
957
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
958
+ y << (delta * (delta + 1) * ((m - 2) * delta - m + 5 )) / 6
959
+ end
960
+ end
961
+ end
962
+
963
+ def generalized_pentagonal_pyramidal_numbers(left_index = 0)
964
+ m = 5
965
+ Enumerator.new do |y|
966
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
967
+ y << (delta * (delta + 1) * ((m - 2) * delta - m + 5 )) / 6
968
+ end
969
+ end
970
+ end
971
+
972
+ def generalized_hexagonal_pyramidal_numbers(left_index = 0)
973
+ m = 6
974
+ Enumerator.new do |y|
975
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
976
+ y << (delta * (delta + 1) * ((m - 2) * delta - m + 5 )) / 6
977
+ end
978
+ end
979
+ end
980
+
981
+ def generalized_cubic_numbers(left_index = 0)
982
+ Enumerator.new do |y|
983
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
984
+ y << delta**3
985
+ end
986
+ end
987
+ end
988
+
989
+ def generalized_octahedral_numbers(left_index = 0)
990
+ Enumerator.new do |y|
991
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
992
+ y << (2 * delta**2 + 1) * delta / 3
993
+ end
994
+ end
995
+ end
996
+
997
+ def generalized_icosahedral_numbers(left_index = 0)
998
+ Enumerator.new do |y|
999
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1000
+ y << ( 5 * delta**2 - 5 * delta + 2 ) * delta / 2
1001
+ end
1002
+ end
1003
+ end
1004
+
1005
+ def generalized_dodecahedral_numbers(left_index = 0)
1006
+ Enumerator.new do |y|
1007
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1008
+ y << (9 * delta**2 - 9 * delta + 2) * delta / 2
1009
+ end
1010
+ end
1011
+ end
1012
+
1013
+ def generalized_centered_cube_numbers(left_index = 0)
1014
+ Enumerator.new do |y|
1015
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1016
+ y << (2 * delta - 1) * (delta**2 - delta + 1)
1017
+ end
1018
+ end
1019
+ end
1020
+
1021
+ def generalized_centered_tetrahedron_numbers(left_index = 0)
1022
+ Enumerator.new do |y|
1023
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1024
+ y << (2 * delta - 1) * (delta**2 - delta + 3) / 3
1025
+ end
1026
+ end
1027
+ end
1028
+
1029
+ def generalized_centered_tetrahedron_numbers(left_index = 0)
1030
+ Enumerator.new do |y|
1031
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1032
+ y << (2 * delta - 1) * (delta**2 - delta + 3) / 3
1033
+ end
1034
+ end
1035
+ end
1036
+
1037
+ def generalized_centered_square_pyramid_numbers(left_index = 0)
1038
+ Enumerator.new do |y|
1039
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1040
+ y << ((2 * delta - 1) * (delta**2 - delta + 2)) / 2
1041
+ end
1042
+ end
1043
+ end
1044
+
1045
+ def generalized_rhombic_dodecahedral_numbers(left_index = 0)
1046
+ Enumerator.new do |y|
1047
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1048
+ y << delta**4 - (delta - 1)**4
1049
+ end
1050
+ end
1051
+ end
1052
+
1053
+ def generalized_centered_mgonal_pyramidal_numbers(m, left_index = 0)
1054
+ Enumerator.new do |y|
1055
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1056
+ y << (m * delta**3 + delta * (6 - m)) / 6
1057
+ end
1058
+ end
1059
+ end
1060
+
1061
+ def generalized_mgonal_prism_numbers(m, left_index = 0)
1062
+ Enumerator.new do |y|
1063
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1064
+ y << delta * (m * delta**2 - m * delta + 2) / 2
1065
+ end
1066
+ end
1067
+ end
1068
+
1069
+ def generalized_hexagonal_prism_numbers(left_index = 0)
1070
+ Enumerator.new do |y|
1071
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1072
+ y << delta * (3 * delta**2 - 3 * delta + 1)
1073
+ end
1074
+ end
1075
+ end
1076
+
1077
+ def factorial_iter(num)
1078
+ t = 1
1079
+ (1..num).each do |i|
1080
+ t = t * i
1081
+ end
1082
+ t
1083
+ end
1084
+
1085
+ def binomial_coefficient(n, k)
1086
+ factorial_iter(n) / (factorial_iter(k) * factorial_iter(n - k))
1087
+ end
1088
+
1089
+ private_class_method :factorial_iter
1090
+ private_class_method :binomial_coefficient
1091
+
1092
+ def pentatope_numbers
1093
+ Enumerator.new do |y|
1094
+ (1..Float::INFINITY).each do |delta|
1095
+ y << (delta * (delta + 1) * (delta + 2) * (delta + 3)) / 24
1096
+ end
1097
+ end
1098
+ end
1099
+
1100
+ alias_method :hypertetrahedral_number, :pentatope_numbers
1101
+ alias_method :triangulotriangular_number, :pentatope_numbers
1102
+
1103
+ def rising_factorial(n, k)
1104
+ t = 1
1105
+ (n..(n + k - 1)).each do |i|
1106
+ t *= i
1107
+ end
1108
+ t
1109
+ end
1110
+
1111
+ def k_dimensional_hypertetrahedron_numbers(k)
1112
+ Enumerator.new do |y|
1113
+ (1..Float::INFINITY).each do |delta|
1114
+ y << rising_factorial(delta, k) / factorial_iter(k)
1115
+ end
1116
+ end
1117
+ end
1118
+
1119
+ alias_method :k_hypertetrahedron_numbers, :k_dimensional_hypertetrahedron_numbers
1120
+ alias_method :regular_k_polytopic_numbers, :k_dimensional_hypertetrahedron_numbers
1121
+ alias_method :figurate_number_of_order_k, :k_dimensional_hypertetrahedron_numbers
1122
+
1123
+
1124
+ def five_dimensional_hypertetrahedron_numbers
1125
+ Enumerator.new do |y|
1126
+ (1..Float::INFINITY).each do |delta|
1127
+ y << rising_factorial(delta, 5) / factorial_iter(5)
1128
+ end
1129
+ end
1130
+ end
1131
+
1132
+ def six_dimensional_hypertetrahedron_numbers
1133
+ Enumerator.new do |y|
1134
+ (1..Float::INFINITY).each do |delta|
1135
+ y << rising_factorial(delta, 6) / factorial_iter(6)
1136
+ end
1137
+ end
1138
+ end
1139
+
1140
+ def binomial_coefficient_k_dimensional_hypertetrahedron_numbers(k)
1141
+ Enumerator.new do |y|
1142
+ (1..Float::INFINITY).each do |delta|
1143
+ y << binomial_coefficient(delta + (k - 1), k)
1144
+ end
1145
+ end
1146
+ end
1147
+
1148
+ def biquadratic_numbers
1149
+ Enumerator.new do |y|
1150
+ (1..Float::INFINITY).each do |delta|
1151
+ y << delta**4
1152
+ end
1153
+ end
1154
+ end
1155
+
1156
+ def k_dimensional_hypercube_numbers(k)
1157
+ Enumerator.new do |y|
1158
+ (1..Float::INFINITY).each do |delta|
1159
+ y << delta**k
1160
+ end
1161
+ end
1162
+ end
1163
+
1164
+ alias_method :k_hypercube_numbers, :k_dimensional_hypercube_numbers
1165
+
1166
+ def five_dimensional_hypercube_numbers
1167
+ Enumerator.new do |y|
1168
+ (1..Float::INFINITY).each do |delta|
1169
+ y << delta**5
1170
+ end
1171
+ end
1172
+ end
1173
+
1174
+ def six_dimensional_hypercube_numbers
1175
+ Enumerator.new do |y|
1176
+ (1..Float::INFINITY).each do |delta|
1177
+ y << delta**6
1178
+ end
1179
+ end
1180
+ end
1181
+
1182
+ def hyperoctahedral_numbers
1183
+ Enumerator.new do |y|
1184
+ (1..Float::INFINITY).each do |delta|
1185
+ y << (delta**2 * (delta**2 + 2)) / 3
1186
+ end
1187
+ end
1188
+ end
1189
+
1190
+ alias_method :hexadecachoron_numbers, :hyperoctahedral_numbers
1191
+ alias_method :four_cross_polytope_numbers, :hyperoctahedral_numbers
1192
+ alias_method :four_orthoplex_numbers, :hyperoctahedral_numbers
1193
+
1194
+ def hypericosahedral_numbers
1195
+ Enumerator.new do |y|
1196
+ (1..Float::INFINITY).each do |delta|
1197
+ y << (delta * (145 * delta ** 3 - 280 * delta**2 + 179 * delta - 38)) / 6
1198
+ end
1199
+ end
1200
+ end
1201
+
1202
+ alias_method :tetraplex_numbers, :hypericosahedral_numbers
1203
+ alias_method :polytetrahedron_numbers, :hypericosahedral_numbers
1204
+ alias_method :hexacosichoron_numbers, :hypericosahedral_numbers
1205
+
1206
+ def hyperdodecahedral_numbers
1207
+ Enumerator.new do |y|
1208
+ (1..Float::INFINITY).each do |delta|
1209
+ y << (delta * (261 * delta**3 - 504 * delta**2 + 283 * delta - 38)) / 2
1210
+ end
1211
+ end
1212
+ end
1213
+
1214
+ alias_method :hecatonicosachoron_numbers, :hyperdodecahedral_numbers
1215
+ alias_method :dodecaplex_numbers, :hyperdodecahedral_numbers
1216
+ alias_method :polydodecahedron_numbers, :hyperdodecahedral_numbers
1217
+
1218
+ def polyoctahedral_numbers
1219
+ Enumerator.new do |y|
1220
+ (1..Float::INFINITY).each do |delta|
1221
+ y << delta**2 * (3 * delta**2 - 4 * delta + 2)
1222
+ end
1223
+ end
1224
+ end
1225
+
1226
+ alias_method :icositetrachoron_numbers, :polyoctahedral_numbers
1227
+ alias_method :octaplex_numbers, :polyoctahedral_numbers
1228
+ alias_method :hyperdiamond_numbers, :polyoctahedral_numbers
1229
+
1230
+ def four_dimensional_hyperoctahedron_numbers
1231
+ Enumerator.new do |y|
1232
+ (1..Float::INFINITY).each do |delta|
1233
+ y << delta**2 * (delta**2 + 2) / 3
1234
+ end
1235
+ end
1236
+ end
1237
+
1238
+ def five_dimensional_hyperoctahedron_numbers
1239
+ Enumerator.new do |y|
1240
+ (1..Float::INFINITY).each do |delta|
1241
+ y << delta * (2 * delta**4 + 10 * delta**2 + 3) / 15
1242
+ end
1243
+ end
1244
+ end
1245
+
1246
+ def six_dimensional_hyperoctahedron_numbers
1247
+ Enumerator.new do |y|
1248
+ (1..Float::INFINITY).each do |delta|
1249
+ y << delta**2 * (2 * delta**4 + 20 * delta**2 + 23) / 45
1250
+ end
1251
+ end
1252
+ end
1253
+
1254
+ def seven_dimensional_hyperoctahedron_numbers
1255
+ Enumerator.new do |y|
1256
+ (1..Float::INFINITY).each do |delta|
1257
+ y << (4 * delta**6 + 70 * delta**4 + 196 * delta**2 + 45) * delta / 315
1258
+ end
1259
+ end
1260
+ end
1261
+
1262
+ def eight_dimensional_hyperoctahedron_numbers
1263
+ Enumerator.new do |y|
1264
+ (1..Float::INFINITY).each do |delta|
1265
+ y << (delta**6 + 28 * delta**4 + 154 * delta**2 + 132) * delta**2 / 315
1266
+ end
1267
+ end
1268
+ end
1269
+
1270
+ def nine_dimensional_hyperoctahedron_numbers
1271
+ Enumerator.new do |y|
1272
+ (1..Float::INFINITY).each do |delta|
1273
+ y << (2 * delta**8 + 84 * delta**6 + 798 * delta**4 + 1636 * delta**2 + 315) * delta / 2835
1274
+ end
1275
+ end
1276
+ end
1277
+
1278
+ def ten_dimensional_hyperoctahedron_numbers
1279
+ Enumerator.new do |y|
1280
+ (1..Float::INFINITY).each do |delta|
1281
+ y << (2 * delta**8 + 120 * delta**6 + 1806 * delta**4 + 7180 * delta**2 + 5067) * delta**2 / 14175
1282
+ end
1283
+ end
1284
+ end
1285
+
1286
+ def k_dimensional_hyperoctahedron_numbers(k)
1287
+ Enumerator.new do |y|
1288
+ (1..Float::INFINITY).each do |delta|
1289
+ a = 0
1290
+ (0..(k - 1)).each do |i|
1291
+ a += binomial_coefficient(k - 1, i) * (rising_factorial(delta - i, k) / factorial_iter(k))
1292
+ end
1293
+ y << a
1294
+ end
1295
+ end
1296
+ end
1297
+
1298
+ alias_method :k_cross_polytope_numbers, :k_dimensional_hyperoctahedron_numbers
1299
+
1300
+ def four_dimensional_mgonal_pyramidal_numbers(m)
1301
+ Enumerator.new do |y|
1302
+ (1..Float::INFINITY).each do |delta|
1303
+ y << (delta * (delta + 1) * (delta + 2) * ((m - 2) * delta - m + 6)) / 24
1304
+ end
1305
+ end
1306
+ end
1307
+
1308
+ alias_method :mgonal_pyramidal_number_of_the_second_order, :four_dimensional_mgonal_pyramidal_numbers
1309
+
1310
+ def four_dimensional_square_pyramidal_numbers
1311
+ Enumerator.new do |y|
1312
+ (1..Float::INFINITY).each do |delta|
1313
+ y << (delta * (delta + 1) * (delta + 2) * ((4 - 2) * delta - 4 + 6)) / 24
1314
+ end
1315
+ end
1316
+ end
1317
+
1318
+ def four_dimensional_pentagonal_pyramidal_numbers
1319
+ Enumerator.new do |y|
1320
+ (1..Float::INFINITY).each do |delta|
1321
+ y << (delta * (delta + 1) * (delta + 2) * ((5 - 2) * delta - 5 + 6)) / 24
1322
+ end
1323
+ end
1324
+ end
1325
+
1326
+ def four_dimensional_hexagonal_pyramidal_numbers
1327
+ Enumerator.new do |y|
1328
+ (1..Float::INFINITY).each do |delta|
1329
+ y << (delta * (delta + 1) * (delta + 2) * ((6 - 2) * delta - 6 + 6)) / 24
1330
+ end
1331
+ end
1332
+ end
1333
+
1334
+ def four_dimensional_heptagonal_pyramidal_numbers
1335
+ Enumerator.new do |y|
1336
+ (1..Float::INFINITY).each do |delta|
1337
+ y << (delta * (delta + 1) * (delta + 2) * ((7 - 2) * delta - 7 + 6)) / 24
1338
+ end
1339
+ end
1340
+ end
1341
+
1342
+ def four_dimensional_octagonal_pyramidal_numbers
1343
+ Enumerator.new do |y|
1344
+ (1..Float::INFINITY).each do |delta|
1345
+ y << (delta * (delta + 1) * (delta + 2) * ((8 - 2) * delta - 8 + 6)) / 24
1346
+ end
1347
+ end
1348
+ end
1349
+
1350
+ def four_dimensional_nonagonal_pyramidal_numbers
1351
+ Enumerator.new do |y|
1352
+ (1..Float::INFINITY).each do |delta|
1353
+ y << (delta * (delta + 1) * (delta + 2) * ((9 - 2) * delta - 9 + 6)) / 24
1354
+ end
1355
+ end
1356
+ end
1357
+
1358
+ def four_dimensional_decagonal_pyramidal_numbers
1359
+ Enumerator.new do |y|
1360
+ (1..Float::INFINITY).each do |delta|
1361
+ y << (delta * (delta + 1) * (delta + 2) * ((10 - 2) * delta - 10 + 6)) / 24
1362
+ end
1363
+ end
1364
+ end
1365
+
1366
+ def four_dimensional_hendecagonal_pyramidal_numbers
1367
+ Enumerator.new do |y|
1368
+ (1..Float::INFINITY).each do |delta|
1369
+ y << (delta * (delta + 1) * (delta + 2) * ((11 - 2) * delta - 11 + 6)) / 24
1370
+ end
1371
+ end
1372
+ end
1373
+
1374
+ def four_dimensional_dodecagonal_pyramidal_numbers
1375
+ Enumerator.new do |y|
1376
+ (1..Float::INFINITY).each do |delta|
1377
+ y << (delta * (delta + 1) * (delta + 2) * ((12 - 2) * delta - 12 + 6)) / 24
1378
+ end
1379
+ end
1380
+ end
1381
+
1382
+ def pseudo_rising_factorial(n, k)
1383
+ t = 1
1384
+ (n..(n + k - 2)).each do |i|
1385
+ t *= i
1386
+ end
1387
+ t
1388
+ end
1389
+
1390
+ def pseudo_pochhammer_function(n, k)
1391
+ (n..(n + k - 2)).reduce(:*)
1392
+ end
1393
+
1394
+ private_class_method :pseudo_rising_factorial
1395
+ private_class_method :pseudo_pochhammer_function
1396
+
1397
+ def k_dimensional_mgonal_pyramidal_numbers(k, m)
1398
+ Enumerator.new do |y|
1399
+ (1..Float::INFINITY).each do |n|
1400
+ y << (pseudo_pochhammer_function(n, k) * ((m - 2) * n - m + k + 2)) /
1401
+ factorial_iter(k)
1402
+ end
1403
+ end
1404
+ end
1405
+
1406
+ alias_method :mgonal_pyramidal_number_of_the_k_2_th_order, :k_dimensional_mgonal_pyramidal_numbers
1407
+
1408
+ def five_dimensional_mgonal_pyramidal_numbers(m)
1409
+ Enumerator.new do |y|
1410
+ (1..Float::INFINITY).each do |delta|
1411
+ y << (delta * (delta + 1) * (delta + 2) * (delta + 3) * ((m - 2) * delta - m + 7)) / 120
1412
+ end
1413
+ end
1414
+ end
1415
+
1416
+ def five_dimensional_square_pyramidal_numbers
1417
+ Enumerator.new do |y|
1418
+ k = 5
1419
+ m = 4
1420
+ (1..Float::INFINITY).each do |delta|
1421
+ y << (pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) /
1422
+ factorial_iter(k)
1423
+ end
1424
+ end
1425
+ end
1426
+
1427
+ def five_dimensional_pentagonal_pyramidal_numbers
1428
+ Enumerator.new do |y|
1429
+ k = 5
1430
+ m = 5
1431
+ (1..Float::INFINITY).each do |delta|
1432
+ y << (pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) /
1433
+ factorial_iter(k)
1434
+ end
1435
+ end
1436
+ end
1437
+
1438
+ def five_dimensional_hexagonal_pyramidal_numbers
1439
+ Enumerator.new do |y|
1440
+ k = 5
1441
+ m = 6
1442
+ (1..Float::INFINITY).each do |delta|
1443
+ y << (pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) /
1444
+ factorial_iter(k)
1445
+ end
1446
+ end
1447
+ end
1448
+
1449
+ def five_dimensional_heptagonal_pyramidal_numbers
1450
+ Enumerator.new do |y|
1451
+ k = 5
1452
+ m = 7
1453
+ (1..Float::INFINITY).each do |delta|
1454
+ y << (pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) /
1455
+ factorial_iter(k)
1456
+ end
1457
+ end
1458
+ end
1459
+
1460
+ def five_dimensional_octagonal_pyramidal_numbers
1461
+ Enumerator.new do |y|
1462
+ k = 5
1463
+ m = 8
1464
+ (1..Float::INFINITY).each do |delta|
1465
+ y << (pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) /
1466
+ factorial_iter(k)
1467
+ end
1468
+ end
1469
+ end
1470
+
1471
+ def six_dimensional_mgonal_pyramidal_numbers(m)
1472
+ Enumerator.new do |y|
1473
+ (1..Float::INFINITY).each do |delta|
1474
+ y << (delta * (delta + 1) * (delta + 2) * (delta + 3) * (delta + 4) * ((m - 2) * delta - m + 8)) / 720
1475
+ end
1476
+ end
1477
+ end
1478
+
1479
+ def six_dimensional_square_pyramidal_numbers
1480
+ Enumerator.new do |y|
1481
+ k = 6
1482
+ m = 4
1483
+ (1..Float::INFINITY).each do |delta|
1484
+ y << (pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) /
1485
+ factorial_iter(k)
1486
+ end
1487
+ end
1488
+ end
1489
+
1490
+ def six_dimensional_pentagonal_pyramidal_numbers
1491
+ Enumerator.new do |y|
1492
+ k = 6
1493
+ m = 5
1494
+ (1..Float::INFINITY).each do |delta|
1495
+ y << (pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) /
1496
+ factorial_iter(k)
1497
+ end
1498
+ end
1499
+ end
1500
+
1501
+ def six_dimensional_hexagonal_pyramidal_numbers
1502
+ Enumerator.new do |y|
1503
+ k = 6
1504
+ m = 6
1505
+ (1..Float::INFINITY).each do |delta|
1506
+ y << (pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) /
1507
+ factorial_iter(k)
1508
+ end
1509
+ end
1510
+ end
1511
+
1512
+ def six_dimensional_heptagonal_pyramidal_numbers
1513
+ Enumerator.new do |y|
1514
+ k = 6
1515
+ m = 7
1516
+ (1..Float::INFINITY).each do |delta|
1517
+ y << (pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) /
1518
+ factorial_iter(k)
1519
+ end
1520
+ end
1521
+ end
1522
+
1523
+ def six_dimensional_octagonal_pyramidal_numbers
1524
+ Enumerator.new do |y|
1525
+ k = 6
1526
+ m = 8
1527
+ (1..Float::INFINITY).each do |delta|
1528
+ y << (pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) /
1529
+ factorial_iter(k)
1530
+ end
1531
+ end
1532
+ end
1533
+
1534
+ def centered_biquadratic_numbers
1535
+ Enumerator.new do |y|
1536
+ a = 0
1537
+ (1..Float::INFINITY).each do |delta|
1538
+ a += delta**4 - (delta - 2)**4
1539
+ y << a + 1
1540
+ end
1541
+ end
1542
+ end
1543
+
1544
+ def k_dimensional_centered_hypercube_numbers(k)
1545
+ Enumerator.new do |y|
1546
+ (1..Float::INFINITY).each do |delta|
1547
+ y << delta**k + (delta - 1)**k
1548
+ end
1549
+ end
1550
+ end
1551
+
1552
+ def five_dimensional_centered_hypercube_numbers
1553
+ Enumerator.new do |y|
1554
+ (1..Float::INFINITY).each do |delta|
1555
+ y << delta**5 + (delta - 1)**5
1556
+ end
1557
+ end
1558
+ end
1559
+
1560
+ def six_dimensional_centered_hypercube_numbers
1561
+ Enumerator.new do |y|
1562
+ (1..Float::INFINITY).each do |delta|
1563
+ y << delta**6 + (delta - 1)**6
1564
+ end
1565
+ end
1566
+ end
1567
+
1568
+ def centered_polytope_numbers
1569
+ Enumerator.new do |y|
1570
+ (1..Float::INFINITY).each do |delta|
1571
+ y << (5 * delta**4 - 10 * delta**3 + 55 * delta**2 - 50 * delta + 24) / 24
1572
+ end
1573
+ end
1574
+ end
1575
+
1576
+ def helper_centered_hypertetrahedron(k, n)
1577
+ return 1 if n == 1
1578
+ t = binomial_coefficient(k + 1, k)
1579
+ return t if n == 2
1580
+ tau = 0
1581
+ (0..k-1).each do |i|
1582
+ tau += binomial_coefficient(k + 1, k - i) * binomial_coefficient(n - 2, i)
1583
+ end
1584
+ tau
1585
+ end
1586
+
1587
+ def acc_helper_centered_hypertetrahedron(k, n)
1588
+ a = 0
1589
+ (1..n).each do |j|
1590
+ a += helper_centered_hypertetrahedron(k, j)
1591
+ end
1592
+ a
1593
+ end
1594
+
1595
+ private_class_method :helper_centered_hypertetrahedron
1596
+ private_class_method :acc_helper_centered_hypertetrahedron
1597
+
1598
+ def k_dimensional_centered_hypertetrahedron_numbers(k)
1599
+ Enumerator.new do |y|
1600
+ (1..Float::INFINITY).each do |n|
1601
+ y << acc_helper_centered_hypertetrahedron(k, n)
1602
+ end
1603
+ end
1604
+ end
1605
+
1606
+ def five_dimensional_centered_hypertetrahedron_numbers
1607
+ Enumerator.new do |y|
1608
+ (1..Float::INFINITY).each do |n|
1609
+ y << acc_helper_centered_hypertetrahedron(5, n)
1610
+ end
1611
+ end
1612
+ end
1613
+
1614
+ def six_dimensional_centered_hypertetrahedron_numbers
1615
+ Enumerator.new do |y|
1616
+ (1..Float::INFINITY).each do |n|
1617
+ y << acc_helper_centered_hypertetrahedron(6, n)
1618
+ end
1619
+ end
1620
+ end
1621
+
1622
+ def centered_hyperoctahedral_numbers
1623
+ Enumerator.new do |y|
1624
+ (1..Float::INFINITY).each do |delta|
1625
+ y << (2 * delta**4 - 4 * delta**3 + 10 * delta**2 - 8 * delta + 3) / 3
1626
+ end
1627
+ end
1628
+ end
1629
+
1630
+ alias_method :orthoplex_numbers, :centered_hyperoctahedral_numbers
1631
+
1632
+ def nexus_numbers(k)
1633
+ Enumerator.new do |y|
1634
+ (0..Float::INFINITY).each do |delta|
1635
+ y << (delta + 1)**(k + 1) - delta**(k + 1)
1636
+ end
1637
+ end
1638
+ end
1639
+
1640
+ def ext_int_double_summation(k, n)
1641
+ t = ((2**(1)) * binomial_coefficient(k, 1) * binomial_coefficient(1, 0))
1642
+ return (t + 1) if n == 1
1643
+ a = 0
1644
+ (1..(n - 1)).each do |j|
1645
+ (0..(k - 1)).each do |i|
1646
+ a += (2**(1 + i)) * binomial_coefficient(k, 1 + i) * binomial_coefficient(j, i)
1647
+ end
1648
+ end
1649
+ (1 + t + a)
1650
+ end
1651
+
1652
+ private_class_method :ext_int_double_summation
1653
+
1654
+ def k_dimensional_centered_hyperoctahedron_numbers(k)
1655
+ Enumerator.new do |y|
1656
+ y << 1
1657
+ (1..Float::INFINITY).each do |n|
1658
+ y << ext_int_double_summation(k, n)
1659
+ end
1660
+ end
1661
+ end
1662
+
1663
+ def five_dimensional_centered_hyperoctahedron_numbers
1664
+ Enumerator.new do |y|
1665
+ y << 1
1666
+ (1..Float::INFINITY).each do |n|
1667
+ y << ext_int_double_summation(5, n)
1668
+ end
1669
+ end
1670
+ end
1671
+
1672
+ def six_dimensional_centered_hyperoctahedron_numbers
1673
+ Enumerator.new do |y|
1674
+ y << 1
1675
+ (1..Float::INFINITY).each do |n|
1676
+ y << ext_int_double_summation(6, n)
1677
+ end
1678
+ end
1679
+ end
1680
+
1681
+ def generalized_pentatope_numbers(left_index = 0)
1682
+ Enumerator.new do |y|
1683
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1684
+ y << delta * (delta + 1) * (delta + 2) * (delta + 3) / 24
1685
+ end
1686
+ end
1687
+ end
1688
+
1689
+ def generalized_k_dimensional_hypertetrahedron_numbers(k, left_index = 0)
1690
+ Enumerator.new do |y|
1691
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1692
+ y << rising_factorial(delta, k) / factorial_iter(k)
1693
+ end
1694
+ end
1695
+ end
1696
+
1697
+ def generalized_biquadratic_numbers(left_index = 0)
1698
+ Enumerator.new do |y|
1699
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1700
+ y << delta**4
1701
+ end
1702
+ end
1703
+ end
1704
+
1705
+ def generalized_k_dimensional_hypercube_numbers(k = 5, left_index = 0)
1706
+ Enumerator.new do |y|
1707
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1708
+ y << delta**k
1709
+ end
1710
+ end
1711
+ end
1712
+
1713
+ def generalized_hyperoctahedral_numbers(left_index = 0)
1714
+ Enumerator.new do |y|
1715
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1716
+ y << (delta**2 * (delta**2 + 2)) / 3
1717
+ end
1718
+ end
1719
+ end
1720
+
1721
+ def generalized_k_dimensional_hyperoctahedron_numbers(k = 5, left_index = 0)
1722
+ Enumerator.new do |y|
1723
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1724
+ a = 0
1725
+ (0..(k - 1)).each do |i|
1726
+ a += binomial_coefficient(k - 1, i) * (rising_factorial(delta - i, k) / factorial_iter(k))
1727
+ end
1728
+ y << a
1729
+ end
1730
+ end
1731
+ end
1732
+
1733
+ def generalized_hyperdodecahedral_numbers(left_index = 0)
1734
+ Enumerator.new do |y|
1735
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1736
+ y << (delta * (261 * delta**3 - 504 * delta**2 + 283 * delta - 38)) / 2
1737
+ end
1738
+ end
1739
+ end
1740
+
1741
+ def generalized_hypericosahedral_numbers(left_index = 0)
1742
+ Enumerator.new do |y|
1743
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1744
+ y << (delta * (145 * delta ** 3 - 280 * delta**2 + 179 * delta - 38)) / 6
1745
+ end
1746
+ end
1747
+ end
1748
+
1749
+ def generalized_polyoctahedral_numbers(left_index = 0)
1750
+ Enumerator.new do |y|
1751
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1752
+ y << delta**2 * (3 * delta**2 - 4 * delta + 2)
1753
+ end
1754
+ end
1755
+ end
1756
+
1757
+ def generalized_k_dimensional_mgonal_pyramidal_numbers(k, m, left_index = 0)
1758
+ Enumerator.new do |y|
1759
+ ((-1 * left_index.abs)..Float::INFINITY).each do |n|
1760
+ y << (pseudo_pochhammer_function(n, k) * ((m - 2) * n - m + k + 2)) /
1761
+ factorial_iter(k)
1762
+ end
1763
+ end
1764
+ end
1765
+
1766
+ def generalized_k_dimensional_centered_hypercube_numbers(k, left_index = 0)
1767
+ Enumerator.new do |y|
1768
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1769
+ y << delta**k + (delta - 1)**k
1770
+ end
1771
+ end
1772
+ end
1773
+
1774
+ def generalized_nexus_numbers(k, left_index = 0)
1775
+ Enumerator.new do |y|
1776
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1777
+ y << (delta + 1)**(k + 1) - delta**(k + 1)
1778
+ end
1779
+ end
1780
+ end
1781
+
1782
+ require 'prime'
1783
+
1784
+ def cuban_numbers
1785
+ Enumerator.new do |y|
1786
+ (1..Float::INFINITY).each do |delta|
1787
+ y << (delta + 1)**3 - delta**3
1788
+ end
1789
+ end
1790
+ end
1791
+
1792
+ alias_method :cuban_prime_numbers, :cuban_numbers
1793
+
1794
+ def helper_quartan_numbers(delta)
1795
+ seq = [2]
1796
+ (1..delta).each do |x|
1797
+ (x + 1..delta).each do |y|
1798
+ q = x**4 + y**4
1799
+ seq << q if Prime.prime?(q)
1800
+ end
1801
+ end
1802
+ seq.sort
1803
+ end
1804
+
1805
+ private_class_method :helper_quartan_numbers
1806
+
1807
+ def quartan_numbers
1808
+ Enumerator.new do |y|
1809
+ (1..Float::INFINITY).each do |delta|
1810
+ y << helper_quartan_numbers(delta)[delta - 1]
1811
+ end
1812
+ end
1813
+ end
1814
+
1815
+ def pell_numbers
1816
+ pell_numbers = [0, 1]
1817
+ Enumerator.new do |y|
1818
+ y << 0
1819
+ y << 1
1820
+ (2..Float::INFINITY).each do |delta|
1821
+ y << pell_numbers[delta] = 2 * pell_numbers[delta - 1] + pell_numbers[delta - 2]
1822
+ end
1823
+ end
1824
+ end
1825
+
1826
+ def is_prime_number(p)
1827
+ (2..Math.sqrt(p)).none? do |delta|
1828
+ p % delta == 0
1829
+ end
1830
+ end
1831
+
1832
+ def helper_carmichael_number_math_def(n)
1833
+ if !is_prime_number(n)
1834
+ (2..(n - 1)).each do |a|
1835
+ if n.gcd(a) == 1
1836
+ if (a.pow(n - 1, n)) != 1
1837
+ return nil
1838
+ end
1839
+ end
1840
+ end
1841
+ n
1842
+ end
1843
+ end
1844
+
1845
+ def helper_carmichael_number(n)
1846
+ if !Prime.prime?(n)
1847
+ (2..(Math.sqrt(n))).each do |a|
1848
+ if (n).gcd(a) == 1
1849
+ return if (a.pow(n - 1, n)) != 1
1850
+ end
1851
+ end
1852
+ n
1853
+ end
1854
+ end
1855
+
1856
+ private_class_method :is_prime_number
1857
+ private_class_method :helper_carmichael_number_math_def
1858
+ private_class_method :helper_carmichael_number
1859
+
1860
+ def carmichael_numbers
1861
+ Enumerator.new do |y|
1862
+ (561..Float::INFINITY).each do |delta|
1863
+ num_seq = helper_carmichael_number(delta)
1864
+ if num_seq != nil
1865
+ y << num_seq
1866
+ end
1867
+ end
1868
+ end
1869
+ end
1870
+
1871
+ def helper_stern_prime_numbers(delta)
1872
+ prime_list = Prime.first(delta)
1873
+ q = prime_list[-1]
1874
+ b = 1
1875
+ while (2 * b**2) < q
1876
+ prime_list[0..-2].each do |p|
1877
+ if q == p + (2 * b**2)
1878
+ return nil
1879
+ end
1880
+ end
1881
+ b += 1
1882
+ end
1883
+ q
1884
+ end
1885
+
1886
+ private_class_method :helper_stern_prime_numbers
1887
+
1888
+ def stern_prime_numbers(infty = false)
1889
+ Enumerator.new do |y|
1890
+ max_term = infty == false ? 238 : float::INFINITY
1891
+ (1..max_term).each do |delta|
1892
+ num_seq = helper_stern_prime_numbers(delta)
1893
+ if num_seq != nil
1894
+ y << num_seq
1895
+ end
1896
+ end
1897
+ end
1898
+ end
1899
+
1900
+ def helper_apocalyptic_numbers(delta)
1901
+ search_666 = (2**delta).to_s
1902
+ len_666 = search_666.length - 1
1903
+ (0..len_666).each do |index|
1904
+ if search_666[index, 3] == '666' && search_666[index + 1] == '6' && search_666[index + 2] == '6'
1905
+ return delta
1906
+ end
1907
+ end
1908
+ nil
1909
+ end
1910
+
1911
+ private_class_method :helper_apocalyptic_numbers
1912
+
1913
+ def apocalyptic_numbers
1914
+ Enumerator.new do |y|
1915
+ (157..Float::INFINITY).each do |delta|
1916
+ y << helper_apocalyptic_numbers(delta) if helper_apocalyptic_numbers(delta) != nil
1917
+ end
1918
+ end
1919
+ end
1920
+
1921
+ end
1922
+