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