figurate_numbers 0.9.7 → 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 +1187 -285
  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,7 +11,7 @@ module FigurateNumbers
10
11
  end
11
12
  end
12
13
 
13
- def FigurateNumbers.triangular_numbers
14
+ def triangular_numbers
14
15
  Enumerator.new do |y|
15
16
  (1..Float::INFINITY).each do |delta|
16
17
  y << (delta**2 + delta) / 2
@@ -18,7 +19,7 @@ module FigurateNumbers
18
19
  end
19
20
  end
20
21
 
21
- def FigurateNumbers.square_numbers
22
+ def square_numbers
22
23
  Enumerator.new do |y|
23
24
  (1..Float::INFINITY).each do |delta|
24
25
  y << (2 * delta**2) / 2
@@ -26,7 +27,7 @@ module FigurateNumbers
26
27
  end
27
28
  end
28
29
 
29
- def FigurateNumbers.pentagonal_numbers
30
+ def pentagonal_numbers
30
31
  Enumerator.new do |y|
31
32
  (1..Float::INFINITY).each do |delta|
32
33
  y << (3 * delta**2 - delta) / 2
@@ -34,7 +35,7 @@ module FigurateNumbers
34
35
  end
35
36
  end
36
37
 
37
- def FigurateNumbers.hexagonal_numbers
38
+ def hexagonal_numbers
38
39
  Enumerator.new do |y|
39
40
  (1..Float::INFINITY).each do |delta|
40
41
  y << (4 * delta**2 - 2 * delta) / 2
@@ -42,7 +43,7 @@ module FigurateNumbers
42
43
  end
43
44
  end
44
45
 
45
- def FigurateNumbers.heptagonal_numbers
46
+ def heptagonal_numbers
46
47
  Enumerator.new do |y|
47
48
  (1..Float::INFINITY).each do |delta|
48
49
  y << (5 * delta**2 - 3 * delta) / 2
@@ -50,7 +51,7 @@ module FigurateNumbers
50
51
  end
51
52
  end
52
53
 
53
- def FigurateNumbers.octagonal_numbers
54
+ def octagonal_numbers
54
55
  Enumerator.new do |y|
55
56
  (1..Float::INFINITY).each do |delta|
56
57
  y << (6 * delta**2 - 4 * delta) / 2
@@ -58,7 +59,7 @@ module FigurateNumbers
58
59
  end
59
60
  end
60
61
 
61
- def FigurateNumbers.nonagonal_numbers
62
+ def nonagonal_numbers
62
63
  Enumerator.new do |y|
63
64
  (1..Float::INFINITY).each do |delta|
64
65
  y << (7 * delta**2 - 5 * delta) / 2
@@ -66,7 +67,7 @@ module FigurateNumbers
66
67
  end
67
68
  end
68
69
 
69
- def FigurateNumbers.decagonal_numbers
70
+ def decagonal_numbers
70
71
  Enumerator.new do |y|
71
72
  (1..Float::INFINITY).each do |delta|
72
73
  y << (8 * delta**2 - 6 * delta) / 2
@@ -74,7 +75,7 @@ module FigurateNumbers
74
75
  end
75
76
  end
76
77
 
77
- def FigurateNumbers.hendecagonal_numbers
78
+ def hendecagonal_numbers
78
79
  Enumerator.new do |y|
79
80
  (1..Float::INFINITY).each do |delta|
80
81
  y << (9 * delta**2 - 7 * delta) / 2
@@ -82,7 +83,7 @@ module FigurateNumbers
82
83
  end
83
84
  end
84
85
 
85
- def FigurateNumbers.dodecagonal_numbers
86
+ def dodecagonal_numbers
86
87
  Enumerator.new do |y|
87
88
  (1..Float::INFINITY).each do |delta|
88
89
  y << (10 * delta**2 - 8 * delta) / 2
@@ -90,821 +91,1489 @@ module FigurateNumbers
90
91
  end
91
92
  end
92
93
 
93
- def FigurateNumbers.icosipentagonal_numbers
94
+ def tridecagonal_numbers
94
95
  Enumerator.new do |y|
95
96
  (1..Float::INFINITY).each do |delta|
96
- y << (23 * delta**2 - 21 * delta) / 2
97
+ y << (11 * delta**2 - 9 * delta) / 2
97
98
  end
98
99
  end
99
100
  end
100
101
 
101
- def FigurateNumbers.icosihexagonal_numbers
102
+ def tetradecagonal_numbers
102
103
  Enumerator.new do |y|
103
104
  (1..Float::INFINITY).each do |delta|
104
- y << (24 * delta**2 - 22 * delta) / 2
105
+ y << (12 * delta**2 - 10 * delta) / 2
105
106
  end
106
107
  end
107
108
  end
108
109
 
109
- def FigurateNumbers.icosiheptagonal_numbers
110
+ def pentadecagonal_numbers
110
111
  Enumerator.new do |y|
111
112
  (1..Float::INFINITY).each do |delta|
112
- y << (25 * delta**2 - 23 * delta) / 2
113
+ y << (13 * delta**2 - 11 * delta) / 2
113
114
  end
114
115
  end
115
116
  end
116
117
 
117
- def FigurateNumbers.icosioctagonal_numbers
118
+ def hexadecagonal_numbers
118
119
  Enumerator.new do |y|
119
120
  (1..Float::INFINITY).each do |delta|
120
- y << (26 * delta**2 - 24 * delta) / 2
121
+ y << (14 * delta**2 - 12 * delta) / 2
121
122
  end
122
123
  end
123
124
  end
124
125
 
125
- def FigurateNumbers.icosinonagonal_numbers
126
+ def heptadecagonal_numbers
126
127
  Enumerator.new do |y|
127
128
  (1..Float::INFINITY).each do |delta|
128
- y << (27 * delta**2 - 25 * delta) / 2
129
+ y << (15 * delta**2 - 13 * delta) / 2
129
130
  end
130
131
  end
131
132
  end
132
133
 
133
- def FigurateNumbers.triacontagonal_numbers
134
+ def octadecagonal_numbers
134
135
  Enumerator.new do |y|
135
136
  (1..Float::INFINITY).each do |delta|
136
- y << (28 * delta**2 - 26 * delta) / 2
137
+ y << (16 * delta**2 - 14 * delta) / 2
137
138
  end
138
139
  end
139
140
  end
140
141
 
141
- def FigurateNumbers.centered_triangular_numbers
142
+ def nonadecagonal_numbers
142
143
  Enumerator.new do |y|
143
144
  (1..Float::INFINITY).each do |delta|
144
- y << (3 * delta**2 - 3 * delta + 2) / 2
145
+ y << (17 * delta**2 - 15 * delta) / 2
145
146
  end
146
147
  end
147
148
  end
148
149
 
149
- def FigurateNumbers.centered_square_numbers
150
+ def icosagonal_numbers
150
151
  Enumerator.new do |y|
151
152
  (1..Float::INFINITY).each do |delta|
152
- y << 2 * delta**2 - 2 * delta + 1
153
+ y << (18 * delta**2 - 16 * delta) / 2
153
154
  end
154
155
  end
155
156
  end
156
157
 
157
- def FigurateNumbers.centered_pentagonal_numbers
158
+ def icosihenagonal_numbers
158
159
  Enumerator.new do |y|
159
160
  (1..Float::INFINITY).each do |delta|
160
- y << (5 * delta**2 - 5 * delta + 2) / 2
161
+ y << (19 * delta**2 - 17 * delta) / 2
161
162
  end
162
163
  end
163
164
  end
164
165
 
165
- def FigurateNumbers.centered_dodecagonal_numbers
166
+ def icosidigonal_numbers
166
167
  Enumerator.new do |y|
167
168
  (1..Float::INFINITY).each do |delta|
168
- y << 6 * delta**2 - 6 * delta + 1
169
+ y << (20 * delta**2 - 18 * delta) / 2
169
170
  end
170
171
  end
171
172
  end
172
173
 
173
- def FigurateNumbers.centered_icosipentagonal_numbers
174
+ def icositrigonal_numbers
174
175
  Enumerator.new do |y|
175
176
  (1..Float::INFINITY).each do |delta|
176
- y << (25 * delta**2 - 25 * delta + 2) / 2
177
+ y << (21 * delta**2 - 19 * delta) / 2
177
178
  end
178
179
  end
179
180
  end
180
181
 
181
- def FigurateNumbers.centered_icosihexagonal_numbers
182
+ def icositetragonal_numbers
182
183
  Enumerator.new do |y|
183
184
  (1..Float::INFINITY).each do |delta|
184
- y << (13 * delta**2 - 13 * delta + 1)
185
+ y << (22 * delta**2 - 20 * delta) / 2
185
186
  end
186
187
  end
187
188
  end
188
189
 
189
- def FigurateNumbers.centered_icosiheptagonal_numbers
190
+ def icosipentagonal_numbers
190
191
  Enumerator.new do |y|
191
192
  (1..Float::INFINITY).each do |delta|
192
- y << (27 * delta**2 - 27 * delta + 2) / 2
193
+ y << (23 * delta**2 - 21 * delta) / 2
193
194
  end
194
195
  end
195
196
  end
196
197
 
197
- def FigurateNumbers.centered_icosioctagonal_numbers
198
+ def icosihexagonal_numbers
198
199
  Enumerator.new do |y|
199
200
  (1..Float::INFINITY).each do |delta|
200
- y << (14 * delta**2 - 14 * delta + 1)
201
+ y << (24 * delta**2 - 22 * delta) / 2
201
202
  end
202
203
  end
203
204
  end
204
205
 
205
- def FigurateNumbers.centered_icosinonagonal_numbers
206
+ def icosiheptagonal_numbers
206
207
  Enumerator.new do |y|
207
208
  (1..Float::INFINITY).each do |delta|
208
- y << (29 * delta**2 - 29 * delta + 2) / 2
209
+ y << (25 * delta**2 - 23 * delta) / 2
209
210
  end
210
211
  end
211
212
  end
212
213
 
213
- def FigurateNumbers.centered_triacontagonal_numbers
214
+ def icosioctagonal_numbers
214
215
  Enumerator.new do |y|
215
216
  (1..Float::INFINITY).each do |delta|
216
- y << (15 * delta**2 - 15 * delta + 1)
217
+ y << (26 * delta**2 - 24 * delta) / 2
217
218
  end
218
219
  end
219
220
  end
220
221
 
221
- def FigurateNumbers.centered_mgonal_numbers(m)
222
+ def icosinonagonal_numbers
222
223
  Enumerator.new do |y|
223
224
  (1..Float::INFINITY).each do |delta|
224
- y << (m * delta**2 - m * delta + 2) / 2
225
+ y << (27 * delta**2 - 25 * delta) / 2
225
226
  end
226
227
  end
227
228
  end
228
229
 
229
- def FigurateNumbers.pronic_numbers
230
- (1..Float::INFINITY).lazy.collect { |delta| delta * (delta + 1)}
231
- end
232
-
233
- def FigurateNumbers.cross_numbers
234
- (1..Float::INFINITY).lazy.collect { |delta| 4 * delta - 3}
235
- end
236
-
237
- def FigurateNumbers.aztec_diamond_numbers
238
- (1..Float::INFINITY).lazy.collect { |delta| (2 * delta) * (delta + 1)}
239
- end
240
-
241
- def FigurateNumbers.polygram_numbers(m)
230
+ def triacontagonal_numbers
242
231
  Enumerator.new do |y|
243
232
  (1..Float::INFINITY).each do |delta|
244
- y << m * delta**2 - m * delta + 1
233
+ y << (28 * delta**2 - 26 * delta) / 2
245
234
  end
246
235
  end
247
236
  end
248
237
 
249
- def FigurateNumbers.gnomic_numbers
250
- (1..Float::INFINITY).lazy.collect { |delta| 2 * delta - 1}
251
- end
252
-
253
- def FigurateNumbers.truncated_triangular_numbers
238
+ def centered_triangular_numbers
254
239
  Enumerator.new do |y|
255
240
  (1..Float::INFINITY).each do |delta|
256
- y << (3 * delta**2) - (3 * delta) + 1
241
+ y << (3 * delta**2 - 3 * delta + 2) / 2
257
242
  end
258
243
  end
259
244
  end
260
245
 
261
- def FigurateNumbers.truncated_square_numbers
246
+ def centered_square_numbers
262
247
  Enumerator.new do |y|
263
248
  (1..Float::INFINITY).each do |delta|
264
- y << (7 * delta**2) - (10 * delta) + 4
249
+ y << 2 * delta**2 - 2 * delta + 1
265
250
  end
266
251
  end
267
252
  end
268
253
 
269
- def FigurateNumbers.truncated_pronic_numbers
270
- Enumerator.new do |y|
271
- (1..Float::INFINITY).each do |delta|
272
- y << (7 * delta**2) - (7 * delta) + 2
273
- end
274
- end
275
- end
254
+ alias_method :diamond_numbers, :centered_square_numbers
276
255
 
277
- def FigurateNumbers.truncated_centered_pol_numbers(k)
256
+ def centered_pentagonal_numbers
278
257
  Enumerator.new do |y|
279
258
  (1..Float::INFINITY).each do |delta|
280
- y << 1 + (k * (7 * delta**2 - 11 * delta + 4)) / 2
259
+ y << (5 * delta**2 - 5 * delta + 2) / 2
281
260
  end
282
261
  end
283
262
  end
284
263
 
285
- def FigurateNumbers.truncated_centered_triangular_numbers
264
+ def centered_hexagonal_numbers
286
265
  Enumerator.new do |y|
287
266
  (1..Float::INFINITY).each do |delta|
288
- y << (21 * delta**2 - 33 * delta) / 2 + 7
267
+ y << 3 * delta**2 - 3 * delta + 1
289
268
  end
290
269
  end
291
270
  end
292
271
 
293
- def FigurateNumbers.truncated_centered_square_numbers
272
+ def centered_heptagonal_numbers
294
273
  Enumerator.new do |y|
295
274
  (1..Float::INFINITY).each do |delta|
296
- y << 14 * delta**2 - 22 * delta + 9
275
+ y << (7 * delta**2 - 7 * delta + 2) / 2
297
276
  end
298
277
  end
299
278
  end
300
279
 
301
- def FigurateNumbers.truncated_centered_pentagonal_numbers
280
+ def centered_octagonal_numbers
302
281
  Enumerator.new do |y|
303
282
  (1..Float::INFINITY).each do |delta|
304
- y << (35 * delta**2 - 55 * delta) / 2 + 11
283
+ y << 4 * delta**2 - 4 * delta + 1
305
284
  end
306
285
  end
307
286
  end
308
287
 
309
- def FigurateNumbers.truncated_centered_hexagonal_numbers
288
+ def centered_nonagonal_numbers
310
289
  Enumerator.new do |y|
311
290
  (1..Float::INFINITY).each do |delta|
312
- y << 21 * delta**2 - 33 * delta + 13
291
+ y << (9 * delta**2 - 9 * delta + 2) / 2
313
292
  end
314
293
  end
315
294
  end
316
295
 
317
- def FigurateNumbers.generalized_mgonal_numbers(m, left_index = 0)
296
+ def centered_decagonal_numbers
318
297
  Enumerator.new do |y|
319
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
320
- y << (delta * ((m - 2) * delta - m + 4)) / 2
298
+ (1..Float::INFINITY).each do |delta|
299
+ y << 5 * delta**2 - 5 * delta + 1
321
300
  end
322
301
  end
323
302
  end
324
303
 
325
- def FigurateNumbers.generalized_centered_pol_numbers(m, left_index = 0)
304
+ def centered_hendecagonal_numbers
326
305
  Enumerator.new do |y|
327
- ((-1 * left_index)..Float::INFINITY).each do |delta|
328
- y << (m * delta**2 - m * delta + 2) / 2
306
+ (1..Float::INFINITY).each do |delta|
307
+ y << (11 * delta**2 - 11 * delta + 2) / 2
329
308
  end
330
309
  end
331
310
  end
332
311
 
333
- def FigurateNumbers.generalized_pronic_numbers(left_index = 0)
312
+ def centered_dodecagonal_numbers
334
313
  Enumerator.new do |y|
335
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
336
- y << delta * (delta + 1)
314
+ (1..Float::INFINITY).each do |delta|
315
+ y << 6 * delta**2 - 6 * delta + 1
337
316
  end
338
317
  end
339
318
  end
340
319
 
320
+ alias_method :star_numbers, :centered_dodecagonal_numbers
341
321
 
342
- def FigurateNumbers.r_pyramidal_numbers(r = 3)
322
+ def centered_tridecagonal_numbers
343
323
  Enumerator.new do |y|
344
324
  (1..Float::INFINITY).each do |delta|
345
- y << (3 * delta**2 + delta**3 * (r - 2) - delta * (r - 5)) / 6
325
+ y << (13 * delta**2 - 13 * delta + 2) / 2
346
326
  end
347
327
  end
348
328
  end
349
329
 
350
- def FigurateNumbers.cubic_numbers
330
+ def centered_tetradecagonal_numbers
351
331
  Enumerator.new do |y|
352
332
  (1..Float::INFINITY).each do |delta|
353
- y << delta**3
333
+ y << 7 * delta**2 - 7 * delta + 1
354
334
  end
355
335
  end
356
336
  end
357
337
 
358
- def FigurateNumbers.tetrahedral_numbers
338
+ def centered_pentadecagonal_numbers
359
339
  Enumerator.new do |y|
360
340
  (1..Float::INFINITY).each do |delta|
361
- y << (delta * (delta + 1) * (delta + 2)) / 6
341
+ y << (15 * delta**2 - 15 * delta + 2) / 2
362
342
  end
363
343
  end
364
344
  end
365
345
 
366
- def FigurateNumbers.octahedral_numbers
346
+ def centered_hexadecagonal_numbers
367
347
  Enumerator.new do |y|
368
348
  (1..Float::INFINITY).each do |delta|
369
- y << (delta * (2 * delta**2 + 1)) / 3
349
+ y << 8 * delta**2 - 8 * delta + 1
370
350
  end
371
351
  end
372
352
  end
373
353
 
374
- def FigurateNumbers.dodecahedral_numbers
354
+ def centered_heptadecagonal_numbers
375
355
  Enumerator.new do |y|
376
356
  (1..Float::INFINITY).each do |delta|
377
- y << (delta * (3 * delta -1) * (3 * delta - 2)) / 2
357
+ y << (17 * delta**2 - 17 * delta + 2) / 2
378
358
  end
379
359
  end
380
360
  end
381
361
 
382
- def FigurateNumbers.icosahedral_numbers
362
+ def centered_octadecagonal_numbers
383
363
  Enumerator.new do |y|
384
364
  (1..Float::INFINITY).each do |delta|
385
- y << (delta * (5 * delta**2 - 5 * delta + 2)) / 2
365
+ y << 9 * delta**2 - 9 * delta + 1
386
366
  end
387
367
  end
388
368
  end
389
369
 
390
- def FigurateNumbers.truncated_tetrahedral_numbers
370
+ def centered_nonadecagonal_numbers
391
371
  Enumerator.new do |y|
392
372
  (1..Float::INFINITY).each do |delta|
393
- y << (23 * delta**2 - 27 * delta + 10) * delta / 6
373
+ y << (19 * delta**2 - 19 * delta + 2) / 2
394
374
  end
395
375
  end
396
376
  end
397
377
 
398
- def FigurateNumbers.truncated_cubic_numbers
378
+ def centered_icosagonal_numbers
399
379
  Enumerator.new do |y|
400
380
  (1..Float::INFINITY).each do |delta|
401
- y << (3 * delta - 2)**3 - ((8 * (delta - 1) * delta * (delta + 1)) / 6)
381
+ y << 10 * delta**2 - 10 * delta + 1
402
382
  end
403
383
  end
404
384
  end
405
385
 
406
- def FigurateNumbers.truncated_octahedral_numbers
386
+ def centered_icosihenagonal_numbers
407
387
  Enumerator.new do |y|
408
388
  (1..Float::INFINITY).each do |delta|
409
- y << (16 * delta**3 - 33 * delta**2 + 24 * delta - 6)
389
+ y << (21 * delta**2 - 21 * delta + 2) / 2
410
390
  end
411
391
  end
412
392
  end
413
393
 
414
- def FigurateNumbers.stella_octangula_numbers
394
+ def centered_icosidigonal_numbers
415
395
  Enumerator.new do |y|
416
396
  (1..Float::INFINITY).each do |delta|
417
- y << delta * (2 * delta**2 - 1)
397
+ y << 11 * delta**2 - 11 * delta + 1
418
398
  end
419
399
  end
420
400
  end
421
401
 
422
- def FigurateNumbers.centered_cube_numbers
402
+ def centered_icositrigonal_numbers
423
403
  Enumerator.new do |y|
424
404
  (1..Float::INFINITY).each do |delta|
425
- y << (2 * delta - 1) * (delta**2 - delta + 1)
405
+ y << (23 * delta**2 - 23 * delta + 2) / 2
426
406
  end
427
407
  end
428
408
  end
429
409
 
430
- def FigurateNumbers.rhombic_dodecahedral_numbers
410
+ def centered_icositetragonal_numbers
431
411
  Enumerator.new do |y|
432
412
  (1..Float::INFINITY).each do |delta|
433
- y << (2 * delta - 1) * (2 * delta**2 - 2 * delta + 1)
413
+ y << 12 * delta**2 - 12 * delta + 1
434
414
  end
435
415
  end
436
416
  end
437
417
 
438
- def FigurateNumbers.hauy_rhombic_dodecahedral_numbers
418
+ def centered_icosipentagonal_numbers
439
419
  Enumerator.new do |y|
440
420
  (1..Float::INFINITY).each do |delta|
441
- y << (2 * delta - 1) * (8 * delta**2 - 14 * delta + 7)
421
+ y << (25 * delta**2 - 25 * delta + 2) / 2
442
422
  end
443
423
  end
444
424
  end
445
425
 
446
- def FigurateNumbers.centered_tetrahedral_numbers
426
+ def centered_icosihexagonal_numbers
447
427
  Enumerator.new do |y|
448
428
  (1..Float::INFINITY).each do |delta|
449
- y << (2 * delta - 1) * ((delta**2 - delta + 3)) / 3
429
+ y << (13 * delta**2 - 13 * delta + 1)
450
430
  end
451
431
  end
452
432
  end
453
433
 
454
- def FigurateNumbers.centered_square_pyramid_numbers
434
+ def centered_icosiheptagonal_numbers
455
435
  Enumerator.new do |y|
456
436
  (1..Float::INFINITY).each do |delta|
457
- y << (2 * delta - 1) * ((delta**2 - delta + 2)) / 2
437
+ y << (27 * delta**2 - 27 * delta + 2) / 2
458
438
  end
459
439
  end
460
440
  end
461
441
 
462
- def FigurateNumbers.centered_pentagonal_pyramid_numbers
442
+ def centered_icosioctagonal_numbers
463
443
  Enumerator.new do |y|
464
444
  (1..Float::INFINITY).each do |delta|
465
- y << (2 * delta - 1) * ( 2 * delta**2 - 2 * delta + 3) / 3
445
+ y << (14 * delta**2 - 14 * delta + 1)
466
446
  end
467
447
  end
468
448
  end
469
449
 
470
- def FigurateNumbers.centered_hexagonal_pyramid_numbers
450
+ def centered_icosinonagonal_numbers
471
451
  Enumerator.new do |y|
472
452
  (1..Float::INFINITY).each do |delta|
473
- y << (2 * delta - 1) * (5 * delta**2 - 5 * delta + 6) / 6
453
+ y << (29 * delta**2 - 29 * delta + 2) / 2
474
454
  end
475
455
  end
476
456
  end
477
457
 
478
- def FigurateNumbers.centered_heptagonal_pyramid_numbers
458
+ def centered_triacontagonal_numbers
479
459
  Enumerator.new do |y|
480
460
  (1..Float::INFINITY).each do |delta|
481
- y << (2 * delta - 1) * (delta**2 - delta + 1)
461
+ y << (15 * delta**2 - 15 * delta + 1)
482
462
  end
483
463
  end
484
464
  end
485
465
 
486
- def FigurateNumbers.centered_octagonal_pyramid_numbers
466
+ def centered_mgonal_numbers(m)
487
467
  Enumerator.new do |y|
488
468
  (1..Float::INFINITY).each do |delta|
489
- y << (2 * delta - 1) * (7 * delta**2 - 7 * delta + 6) / 6
469
+ y << (m * delta**2 - m * delta + 2) / 2
490
470
  end
491
471
  end
492
472
  end
493
473
 
494
- def FigurateNumbers.centered_icosahedron_numbers
495
- Enumerator.new do |y|
496
- (1..Float::INFINITY).each do |delta|
497
- y << (2 * delta - 1) * (5 * delta**2 - 5 * delta + 3) / 3
498
- end
499
- end
474
+ def pronic_numbers
475
+ (1..Float::INFINITY).lazy.collect { |delta| delta * (delta + 1) }
500
476
  end
501
477
 
502
- def FigurateNumbers.centered_dodecahedron_numbers
503
- Enumerator.new do |y|
504
- (1..Float::INFINITY).each do |delta|
505
- y << (2 * delta - 1) * (3 * delta**2 - 3 * delta + 1)
506
- end
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 }
507
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 }
508
491
  end
509
492
 
510
- def FigurateNumbers.centered_truncated_tetrahedron_numbers
493
+ def aztec_diamond_numbers
494
+ (1..Float::INFINITY).lazy.collect { |delta| (2 * delta) * (delta + 1) }
495
+ end
496
+
497
+ def polygram_numbers(m)
511
498
  Enumerator.new do |y|
512
499
  (1..Float::INFINITY).each do |delta|
513
- y << (2 * delta - 1) * (7 * delta**2 - 7 * delta + 3) / 3
500
+ y << m * delta**2 - m * delta + 1
514
501
  end
515
502
  end
516
503
  end
517
504
 
518
- def FigurateNumbers.centered_truncated_cube_numbers
505
+ alias_method :centered_star_polygonal_numbers, :polygram_numbers
506
+
507
+ def pentagram_numbers
519
508
  Enumerator.new do |y|
520
509
  (1..Float::INFINITY).each do |delta|
521
- y << (2 * delta - 1) * (23 * delta**2 - 23 * delta + 3) / 3
510
+ y << 5 * delta**2 - 5 * delta + 1
522
511
  end
523
512
  end
524
513
  end
525
514
 
526
- def FigurateNumbers.centered_truncated_octahedron_numbers
515
+ def gnomic_numbers
516
+ (1..Float::INFINITY).lazy.collect { |delta| 2 * delta - 1 }
517
+ end
518
+
519
+ def truncated_triangular_numbers
527
520
  Enumerator.new do |y|
528
521
  (1..Float::INFINITY).each do |delta|
529
- y << (2 * delta - 1) * (5 * delta**2 - 5 * delta + 1)
522
+ y << (3 * delta**2) - (3 * delta) + 1
530
523
  end
531
524
  end
532
525
  end
533
526
 
534
- def FigurateNumbers.centered_mgonal_pyramid_numbers(m)
527
+ def truncated_square_numbers
535
528
  Enumerator.new do |y|
536
529
  (1..Float::INFINITY).each do |delta|
537
- y << (m - 1) * ((delta - 1) * delta * (2 * delta - 1)) / 6 + (2 * delta - 1)
530
+ y << (7 * delta**2) - (10 * delta) + 4
538
531
  end
539
532
  end
540
533
  end
541
534
 
542
- def FigurateNumbers.centered_triangular_pyramidal_numbers
535
+ def truncated_pronic_numbers
543
536
  Enumerator.new do |y|
544
537
  (1..Float::INFINITY).each do |delta|
545
- y << delta * (delta**2 + 1) / 2
538
+ y << (7 * delta**2) - (7 * delta) + 2
546
539
  end
547
540
  end
548
541
  end
549
542
 
550
- def FigurateNumbers.centered_square_pyramidal_numbers
543
+ def truncated_centered_pol_numbers(m)
551
544
  Enumerator.new do |y|
552
545
  (1..Float::INFINITY).each do |delta|
553
- y << (2 * delta**3 + delta) / 3
546
+ y << 1 + (m * (7 * delta**2 - 11 * delta + 4)) / 2
554
547
  end
555
548
  end
556
549
  end
557
550
 
558
- def FigurateNumbers.centered_pentagonal_pyramidal_numbers
551
+ alias_method :truncated_centered_mgonal_numbers, :truncated_centered_pol_numbers
552
+
553
+ def truncated_centered_triangular_numbers
559
554
  Enumerator.new do |y|
560
555
  (1..Float::INFINITY).each do |delta|
561
- y << (5 * delta**3 + delta) / 6
556
+ y << (21 * delta**2 - 33 * delta) / 2 + 7
562
557
  end
563
558
  end
564
559
  end
565
560
 
566
- def FigurateNumbers.centered_mgonal_pyramidal_numbers(m)
561
+ def truncated_centered_square_numbers
567
562
  Enumerator.new do |y|
568
563
  (1..Float::INFINITY).each do |delta|
569
- y << (m * delta**3 + delta * (6 - m)) / 6
564
+ y << 14 * delta**2 - 22 * delta + 9
570
565
  end
571
566
  end
572
567
  end
573
568
 
574
- def FigurateNumbers.hexagonal_prism_numbers
569
+ def truncated_centered_pentagonal_numbers
575
570
  Enumerator.new do |y|
576
571
  (1..Float::INFINITY).each do |delta|
577
- y << delta * ( 3 * delta**2 - 3 * delta + 1)
572
+ y << (35 * delta**2 - 55 * delta) / 2 + 11
578
573
  end
579
574
  end
580
575
  end
581
576
 
582
- def FigurateNumbers.mgonal_prism_numbers(m)
577
+ def truncated_centered_hexagonal_numbers
583
578
  Enumerator.new do |y|
584
579
  (1..Float::INFINITY).each do |delta|
585
- y << delta * (m * delta**2 - m * delta + 2) / 2
580
+ y << 21 * delta**2 - 33 * delta + 13
586
581
  end
587
582
  end
588
583
  end
589
584
 
590
- def FigurateNumbers.generalized_mgonal_pyramidal_numbers(m, left_index = 0)
585
+ alias_method :truncated_hex_numbers, :truncated_centered_hexagonal_numbers
586
+
587
+ def generalized_mgonal_numbers(m, left_index = 0)
591
588
  Enumerator.new do |y|
592
589
  ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
593
- y << (delta * (delta + 1) * ((m - 2) * delta - m + 5 )) / 6
590
+ y << (delta * ((m - 2) * delta - m + 4)) / 2
594
591
  end
595
592
  end
596
593
  end
597
594
 
598
- def FigurateNumbers.generalized_cubic_numbers(left_index = 0)
595
+ def generalized_pentagonal_numbers(left_index = 0)
596
+ m = 5
599
597
  Enumerator.new do |y|
600
598
  ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
601
- y << delta**3
599
+ y << (delta * ((m - 2) * delta - m + 4)) / 2
602
600
  end
603
601
  end
604
602
  end
605
603
 
606
- def FigurateNumbers.generalized_octahedral_numbers(left_index = 0)
604
+ def generalized_hexagonal_numbers(left_index = 0)
605
+ m = 6
607
606
  Enumerator.new do |y|
608
607
  ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
609
- y << (2 * delta**2 + 1) * delta / 3
608
+ y << (delta * ((m - 2) * delta - m + 4)) / 2
610
609
  end
611
610
  end
612
611
  end
613
612
 
614
- def FigurateNumbers.generalized_icosahedral_numbers(left_index = 0)
613
+ def generalized_centered_pol_numbers(m, left_index = 0)
615
614
  Enumerator.new do |y|
616
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
617
- y << ( 5 * delta**2 - 5 * delta + 2 ) * delta / 2
615
+ ((-1 * left_index)..Float::INFINITY).each do |delta|
616
+ y << (m * delta**2 - m * delta + 2) / 2
618
617
  end
619
618
  end
620
619
  end
621
620
 
622
- def FigurateNumbers.generalized_dodecahedral_numbers(left_index = 0)
621
+ def generalized_pronic_numbers(left_index = 0)
623
622
  Enumerator.new do |y|
624
623
  ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
625
- y << (9 * delta**2 - 9 * delta + 2) * delta / 2
624
+ y << delta * (delta + 1)
626
625
  end
627
626
  end
628
627
  end
629
628
 
630
- def FigurateNumbers.generalized_centered_cube_numbers(left_index = 0)
629
+ def r_pyramidal_numbers(r = 3)
631
630
  Enumerator.new do |y|
632
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
633
- y << (2 * delta - 1) * (delta**2 - delta + 1)
631
+ (1..Float::INFINITY).each do |delta|
632
+ y << (3 * delta**2 + delta**3 * (r - 2) - delta * (r - 5)) / 6
634
633
  end
635
634
  end
636
635
  end
637
636
 
638
- def FigurateNumbers.generalized_centered_tetrahedron_numbers(left_index = 0)
637
+ def cubic_numbers
639
638
  Enumerator.new do |y|
640
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
641
- y << (2 * delta - 1) * (delta**2 - delta + 3) / 3
639
+ (1..Float::INFINITY).each do |delta|
640
+ y << delta**3
642
641
  end
643
642
  end
644
643
  end
645
644
 
646
- def FigurateNumbers.generalized_centered_tetrahedron_numbers(left_index = 0)
645
+ def tetrahedral_numbers
647
646
  Enumerator.new do |y|
648
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
649
- y << (2 * delta - 1) * (delta**2 - delta + 3) / 3
647
+ (1..Float::INFINITY).each do |delta|
648
+ y << (delta * (delta + 1) * (delta + 2)) / 6
650
649
  end
651
650
  end
652
651
  end
653
652
 
654
- def FigurateNumbers.generalized_centered_square_pyramid_numbers(left_index = 0)
653
+ def octahedral_numbers
655
654
  Enumerator.new do |y|
656
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
657
- y << ((2 * delta - 1) * (delta**2 - delta + 2)) / 2
655
+ (1..Float::INFINITY).each do |delta|
656
+ y << (delta * (2 * delta**2 + 1)) / 3
658
657
  end
659
658
  end
660
659
  end
661
660
 
662
- def FigurateNumbers.generalized_rhombic_dodecahedral_numbers(left_index = 0)
661
+ def dodecahedral_numbers
663
662
  Enumerator.new do |y|
664
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
665
- y << delta**4 - (delta - 1)**4
663
+ (1..Float::INFINITY).each do |delta|
664
+ y << (delta * (3 * delta -1) * (3 * delta - 2)) / 2
666
665
  end
667
666
  end
668
667
  end
669
668
 
670
- def FigurateNumbers.generalized_centered_mgonal_pyramidal_numbers(m, left_index = 0)
669
+ def icosahedral_numbers
671
670
  Enumerator.new do |y|
672
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
673
- y << (m * delta**3 + delta * (6 - m)) / 6
671
+ (1..Float::INFINITY).each do |delta|
672
+ y << (delta * (5 * delta**2 - 5 * delta + 2)) / 2
674
673
  end
675
674
  end
676
675
  end
677
676
 
678
- def FigurateNumbers.generalized_hexagonal_prism_numbers(left_index = 0)
677
+ def truncated_tetrahedral_numbers
679
678
  Enumerator.new do |y|
680
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
681
- y << delta * (3 * delta**2 - 3 * delta + 1)
679
+ (1..Float::INFINITY).each do |delta|
680
+ y << (23 * delta**2 - 27 * delta + 10) * delta / 6
682
681
  end
683
682
  end
684
683
  end
685
684
 
686
- def FigurateNumbers.factorial_iter(num)
687
- t = 1
688
- (1..num).each do |i|
689
- t = t * i
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
690
  end
691
- t
692
- end
693
-
694
- def FigurateNumbers.binomial_coefficient(n, k)
695
- factorial_iter(n) / (factorial_iter(k) * factorial_iter(n - k))
696
691
  end
697
692
 
698
- private_class_method :factorial_iter
699
- private_class_method :binomial_coefficient
700
-
701
- def FigurateNumbers.pentatope_numbers
693
+ def truncated_octahedral_numbers
702
694
  Enumerator.new do |y|
703
695
  (1..Float::INFINITY).each do |delta|
704
- y << (delta * (delta + 1) * (delta + 2) * (delta + 3)) / 24
696
+ y << (16 * delta**3 - 33 * delta**2 + 24 * delta - 6)
705
697
  end
706
698
  end
707
699
  end
708
700
 
709
- def FigurateNumbers.rising_factorial(n, k)
710
- t = 1
711
- (n..(n + k - 1)).each do |i|
712
- t *= i
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
713
706
  end
714
- t
715
707
  end
716
708
 
717
- def FigurateNumbers.k_dimensional_hypertetrahedron_numbers(k)
709
+ def centered_cube_numbers
718
710
  Enumerator.new do |y|
719
711
  (1..Float::INFINITY).each do |delta|
720
- y << rising_factorial(delta, k) / factorial_iter(k)
712
+ y << (2 * delta - 1) * (delta**2 - delta + 1)
721
713
  end
722
714
  end
723
715
  end
724
716
 
725
- def FigurateNumbers.binomial_coefficient_k_dimensional_hypertetrahedron_numbers(k)
717
+ def rhombic_dodecahedral_numbers
726
718
  Enumerator.new do |y|
727
719
  (1..Float::INFINITY).each do |delta|
728
- y << binomial_coefficient(delta + (k - 1), k)
720
+ y << (2 * delta - 1) * (2 * delta**2 - 2 * delta + 1)
729
721
  end
730
722
  end
731
723
  end
732
724
 
733
- def FigurateNumbers.biquadratic_numbers
725
+ def hauy_rhombic_dodecahedral_numbers
734
726
  Enumerator.new do |y|
735
727
  (1..Float::INFINITY).each do |delta|
736
- y << delta**4
728
+ y << (2 * delta - 1) * (8 * delta**2 - 14 * delta + 7)
737
729
  end
738
730
  end
739
731
  end
740
732
 
741
- def FigurateNumbers.k_dimensional_hypercube_numbers(k)
733
+ def centered_tetrahedron_numbers
742
734
  Enumerator.new do |y|
743
735
  (1..Float::INFINITY).each do |delta|
744
- y << delta**k
736
+ y << (2 * delta - 1) * ((delta**2 - delta + 3)) / 3
745
737
  end
746
738
  end
747
739
  end
748
740
 
749
- def FigurateNumbers.hyperoctahedral_numbers
741
+ alias_method :centered_tetrahedral_numbers, :centered_tetrahedron_numbers
742
+
743
+ def centered_square_pyramid_numbers
750
744
  Enumerator.new do |y|
751
745
  (1..Float::INFINITY).each do |delta|
752
- y << (delta**2 * (delta**2 + 2)) / 3
746
+ y << (2 * delta - 1) * ((delta**2 - delta + 2)) / 2
753
747
  end
754
748
  end
755
749
  end
756
750
 
757
- def FigurateNumbers.hypericosahedral_numbers
751
+ alias_method :centered_pyramid_numbers, :centered_square_pyramid_numbers
752
+
753
+ def centered_mgonal_pyramid_numbers(m)
758
754
  Enumerator.new do |y|
759
755
  (1..Float::INFINITY).each do |delta|
760
- y << (delta * (145 * delta ** 3 - 280 * delta**2 + 179 * delta - 38)) / 6
756
+ y << (m - 1) * ((delta - 1) * delta * (2 * delta - 1)) / 6 + (2 * delta - 1)
761
757
  end
762
758
  end
763
759
  end
764
760
 
765
- def FigurateNumbers.hyperdodecahedral_numbers
761
+ def centered_pentagonal_pyramid_numbers
766
762
  Enumerator.new do |y|
767
763
  (1..Float::INFINITY).each do |delta|
768
- y << (delta * (261 * delta**3 - 504 * delta**2 + 283 * delta - 38)) / 2
764
+ y << (2 * delta - 1) * ( 2 * delta**2 - 2 * delta + 3) / 3
769
765
  end
770
766
  end
771
767
  end
772
768
 
773
- def FigurateNumbers.polyoctahedral_numbers
769
+ def centered_hexagonal_pyramid_numbers
774
770
  Enumerator.new do |y|
775
771
  (1..Float::INFINITY).each do |delta|
776
- y << delta**2 * (3 * delta**2 - 4 * delta + 2)
772
+ y << (2 * delta - 1) * (5 * delta**2 - 5 * delta + 6) / 6
777
773
  end
778
774
  end
779
775
  end
780
776
 
781
- def FigurateNumbers.four_dimensional_hyperoctahedron_numbers
777
+ def centered_heptagonal_pyramid_numbers
782
778
  Enumerator.new do |y|
783
779
  (1..Float::INFINITY).each do |delta|
784
- y << delta**2 * (delta**2 + 2) / 3
780
+ y << (2 * delta - 1) * (delta**2 - delta + 1)
785
781
  end
786
782
  end
787
783
  end
788
784
 
789
- def FigurateNumbers.five_dimensional_hyperoctahedron_numbers
785
+ def centered_octagonal_pyramid_numbers
790
786
  Enumerator.new do |y|
791
787
  (1..Float::INFINITY).each do |delta|
792
- y << delta * (2 * delta**4 + 10 * delta**2 + 3) / 15
788
+ y << (2 * delta - 1) * (7 * delta**2 - 7 * delta + 6) / 6
793
789
  end
794
790
  end
795
791
  end
796
792
 
797
- def FigurateNumbers.six_dimensional_hyperoctahedron_numbers
793
+ def centered_octahedron_numbers
798
794
  Enumerator.new do |y|
799
795
  (1..Float::INFINITY).each do |delta|
800
- y << delta**2 * (2 * delta**4 + 20 * delta**2 + 23) / 45
796
+ y << (2 * delta - 1) * (2 * delta**2 - 2 * delta + 3) / 3
801
797
  end
802
798
  end
803
799
  end
804
800
 
805
- def FigurateNumbers.k_dimensional_hyperoctahedron_numbers(k)
801
+ def centered_icosahedron_numbers
806
802
  Enumerator.new do |y|
807
803
  (1..Float::INFINITY).each do |delta|
808
- a = 0
809
- (0..(k - 1)).each do |i|
810
- a += binomial_coefficient(k - 1, i) * (rising_factorial(delta - i, k) / factorial_iter(k))
811
- end
812
- y << a
804
+ y << (2 * delta - 1) * (5 * delta**2 - 5 * delta + 3) / 3
813
805
  end
814
806
  end
815
807
  end
816
808
 
817
- def FigurateNumbers.four_dimensional_mgonal_pyramidal_numbers(m)
809
+ alias_method :centered_cuboctahedron_numbers, :centered_icosahedron_numbers
810
+
811
+ def centered_dodecahedron_numbers
818
812
  Enumerator.new do |y|
819
813
  (1..Float::INFINITY).each do |delta|
820
- y << (delta * (delta + 1) * (delta + 2) * ((m - 2) * delta - m + 6)) / 24
814
+ y << (2 * delta - 1) * (3 * delta**2 - 3 * delta + 1)
821
815
  end
822
816
  end
823
817
  end
824
818
 
825
- def FigurateNumbers.five_dimensional_mgonal_pyramidal_numbers(m)
819
+ def centered_truncated_tetrahedron_numbers
826
820
  Enumerator.new do |y|
827
821
  (1..Float::INFINITY).each do |delta|
828
- y << (delta * (delta + 1) * (delta + 2) * (delta + 3) * ((m - 2) * delta - m + 7)) / 120
822
+ y << (2 * delta - 1) * (7 * delta**2 - 7 * delta + 3) / 3
829
823
  end
830
824
  end
831
825
  end
832
826
 
833
- def FigurateNumbers.six_dimensional_mgonal_pyramidal_numbers(m)
827
+ def centered_truncated_cube_numbers
834
828
  Enumerator.new do |y|
835
829
  (1..Float::INFINITY).each do |delta|
836
- y << (delta * (delta + 1) * (delta + 2) * (delta + 3) * (delta + 4) * ((m - 2) * delta - m + 8)) / 720
830
+ y << (2 * delta - 1) * (23 * delta**2 - 23 * delta + 3) / 3
837
831
  end
838
832
  end
839
833
  end
840
834
 
841
- def FigurateNumbers.pseudo_rising_factorial(n, k)
842
- t = 1
843
- (n..(n + k - 2)).each do |i|
844
- t *= i
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
845
840
  end
846
- t
847
841
  end
848
842
 
849
- def FigurateNumbers.pseudo_pochhammer_function(n, k)
850
- (n..(n + k - 2)).reduce(:*)
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
851
849
  end
852
850
 
853
- private_class_method :pseudo_rising_factorial
854
- private_class_method :pseudo_pochhammer_function
855
-
856
- def FigurateNumbers.k_dimensional_mgonal_pyramidal_numbers(k, m)
851
+ def centered_triangular_pyramidal_numbers
857
852
  Enumerator.new do |y|
858
- (1..Float::INFINITY).each do |n|
859
- y << (pseudo_pochhammer_function(n, k) * ((m - 2) * n - m + k + 2)) /
860
- factorial_iter(k)
853
+ (1..Float::INFINITY).each do |delta|
854
+ y << delta * (delta**2 + 1) / 2
861
855
  end
862
856
  end
863
857
  end
864
858
 
865
- def FigurateNumbers.centered_biquadratic_numbers
859
+ def centered_square_pyramidal_numbers
866
860
  Enumerator.new do |y|
867
- a = 0
868
861
  (1..Float::INFINITY).each do |delta|
869
- a += delta**4 - (delta - 2)**4
870
- y << a + 1
862
+ y << (2 * delta**3 + delta) / 3
871
863
  end
872
864
  end
873
865
  end
874
866
 
875
- def FigurateNumbers.k_dimensional_centered_hypercube_numbers(k)
867
+ def centered_pentagonal_pyramidal_numbers
876
868
  Enumerator.new do |y|
877
869
  (1..Float::INFINITY).each do |delta|
878
- y << delta**k + (delta - 1)**k
870
+ y << (5 * delta**3 + delta) / 6
879
871
  end
880
872
  end
881
873
  end
882
874
 
883
- def FigurateNumbers.five_dimensional_centered_hypercube_numbers
875
+ def centered_hexagonal_pyramidal_numbers
884
876
  Enumerator.new do |y|
885
877
  (1..Float::INFINITY).each do |delta|
886
- y << delta**5 + (delta - 1)**5
878
+ y << delta**3
887
879
  end
888
880
  end
889
881
  end
890
882
 
891
- def FigurateNumbers.six_dimensional_centered_hypercube_numbers
883
+ alias_method :hex_pyramidal_numbers, :centered_hexagonal_pyramidal_numbers
884
+
885
+ def centered_heptagonal_pyramidal_numbers
886
+ m = 7
892
887
  Enumerator.new do |y|
893
888
  (1..Float::INFINITY).each do |delta|
894
- y << delta**6 + (delta - 1)**6
889
+ y << (m * delta**3 + delta * (6 - m)) / 6
895
890
  end
896
891
  end
897
892
  end
898
893
 
899
- def FigurateNumbers.centered_polytope_numbers
894
+ def centered_octagonal_pyramidal_numbers
895
+ m = 8
900
896
  Enumerator.new do |y|
901
897
  (1..Float::INFINITY).each do |delta|
902
- y << (5 * delta**4 - 10 * delta**3 + 55 * delta**2 - 50 * delta + 24) / 24
898
+ y << (m * delta**3 + delta * (6 - m)) / 6
903
899
  end
904
900
  end
905
901
  end
906
902
 
907
- def FigurateNumbers.helper_centered_hypertetrahedron(k, n)
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)
908
1577
  return 1 if n == 1
909
1578
  t = binomial_coefficient(k + 1, k)
910
1579
  return t if n == 2
@@ -915,7 +1584,7 @@ module FigurateNumbers
915
1584
  tau
916
1585
  end
917
1586
 
918
- def FigurateNumbers.acc_helper_centered_hypertetrahedron(k, n)
1587
+ def acc_helper_centered_hypertetrahedron(k, n)
919
1588
  a = 0
920
1589
  (1..n).each do |j|
921
1590
  a += helper_centered_hypertetrahedron(k, j)
@@ -926,7 +1595,7 @@ module FigurateNumbers
926
1595
  private_class_method :helper_centered_hypertetrahedron
927
1596
  private_class_method :acc_helper_centered_hypertetrahedron
928
1597
 
929
- def FigurateNumbers.k_dimensional_centered_hypertetrahedron_numbers(k)
1598
+ def k_dimensional_centered_hypertetrahedron_numbers(k)
930
1599
  Enumerator.new do |y|
931
1600
  (1..Float::INFINITY).each do |n|
932
1601
  y << acc_helper_centered_hypertetrahedron(k, n)
@@ -934,7 +1603,23 @@ module FigurateNumbers
934
1603
  end
935
1604
  end
936
1605
 
937
- def FigurateNumbers.centered_hyperotahedral_numbers
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
938
1623
  Enumerator.new do |y|
939
1624
  (1..Float::INFINITY).each do |delta|
940
1625
  y << (2 * delta**4 - 4 * delta**3 + 10 * delta**2 - 8 * delta + 3) / 3
@@ -942,7 +1627,9 @@ module FigurateNumbers
942
1627
  end
943
1628
  end
944
1629
 
945
- def FigurateNumbers.nexus_numbers(k)
1630
+ alias_method :orthoplex_numbers, :centered_hyperoctahedral_numbers
1631
+
1632
+ def nexus_numbers(k)
946
1633
  Enumerator.new do |y|
947
1634
  (0..Float::INFINITY).each do |delta|
948
1635
  y << (delta + 1)**(k + 1) - delta**(k + 1)
@@ -950,7 +1637,7 @@ module FigurateNumbers
950
1637
  end
951
1638
  end
952
1639
 
953
- def FigurateNumbers.ext_int_double_summation(k, n)
1640
+ def ext_int_double_summation(k, n)
954
1641
  t = ((2**(1)) * binomial_coefficient(k, 1) * binomial_coefficient(1, 0))
955
1642
  return (t + 1) if n == 1
956
1643
  a = 0
@@ -964,7 +1651,7 @@ module FigurateNumbers
964
1651
 
965
1652
  private_class_method :ext_int_double_summation
966
1653
 
967
- def FigurateNumbers.k_dimensional_centered_hyperoctahedron_numbers(k)
1654
+ def k_dimensional_centered_hyperoctahedron_numbers(k)
968
1655
  Enumerator.new do |y|
969
1656
  y << 1
970
1657
  (1..Float::INFINITY).each do |n|
@@ -973,7 +1660,25 @@ module FigurateNumbers
973
1660
  end
974
1661
  end
975
1662
 
976
- def FigurateNumbers.generalized_pentatope_numbers(left_index = 0)
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)
977
1682
  Enumerator.new do |y|
978
1683
  ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
979
1684
  y << delta * (delta + 1) * (delta + 2) * (delta + 3) / 24
@@ -981,7 +1686,7 @@ module FigurateNumbers
981
1686
  end
982
1687
  end
983
1688
 
984
- def FigurateNumbers.generalized_k_dimensional_hypertetrahedron_numbers(k, left_index = 0)
1689
+ def generalized_k_dimensional_hypertetrahedron_numbers(k, left_index = 0)
985
1690
  Enumerator.new do |y|
986
1691
  ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
987
1692
  y << rising_factorial(delta, k) / factorial_iter(k)
@@ -989,7 +1694,15 @@ module FigurateNumbers
989
1694
  end
990
1695
  end
991
1696
 
992
- def FigurateNumbers.generalized_k_dimensional_hypercube_numbers(k = 5, left_index = 0)
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)
993
1706
  Enumerator.new do |y|
994
1707
  ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
995
1708
  y << delta**k
@@ -997,7 +1710,15 @@ module FigurateNumbers
997
1710
  end
998
1711
  end
999
1712
 
1000
- def FigurateNumbers.generalized_k_dimensional_hyperoctahedron_numbers(k = 5, left_index = 0)
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)
1001
1722
  Enumerator.new do |y|
1002
1723
  ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1003
1724
  a = 0
@@ -1009,7 +1730,48 @@ module FigurateNumbers
1009
1730
  end
1010
1731
  end
1011
1732
 
1012
- def FigurateNumbers.generalized_nexus_numbers(k, left_index = 0)
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)
1013
1775
  Enumerator.new do |y|
1014
1776
  ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1015
1777
  y << (delta + 1)**(k + 1) - delta**(k + 1)
@@ -1017,4 +1779,144 @@ module FigurateNumbers
1017
1779
  end
1018
1780
  end
1019
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
+
1020
1921
  end
1922
+