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.
- checksums.yaml +4 -4
- data/lib/figurate_numbers.rb +1187 -285
- metadata +7 -7
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,821 +91,1489 @@ 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 cubic_numbers
|
639
638
|
Enumerator.new do |y|
|
640
|
-
(
|
641
|
-
y <<
|
639
|
+
(1..Float::INFINITY).each do |delta|
|
640
|
+
y << delta**3
|
642
641
|
end
|
643
642
|
end
|
644
643
|
end
|
645
644
|
|
646
|
-
def
|
645
|
+
def tetrahedral_numbers
|
647
646
|
Enumerator.new do |y|
|
648
|
-
(
|
649
|
-
y <<
|
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
|
653
|
+
def octahedral_numbers
|
655
654
|
Enumerator.new do |y|
|
656
|
-
(
|
657
|
-
y <<
|
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
|
661
|
+
def dodecahedral_numbers
|
663
662
|
Enumerator.new do |y|
|
664
|
-
(
|
665
|
-
y <<
|
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
|
669
|
+
def icosahedral_numbers
|
671
670
|
Enumerator.new do |y|
|
672
|
-
(
|
673
|
-
y <<
|
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
|
677
|
+
def truncated_tetrahedral_numbers
|
679
678
|
Enumerator.new do |y|
|
680
|
-
(
|
681
|
-
y <<
|
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
|
687
|
-
|
688
|
-
|
689
|
-
|
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
|
-
|
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 << (
|
696
|
+
y << (16 * delta**3 - 33 * delta**2 + 24 * delta - 6)
|
705
697
|
end
|
706
698
|
end
|
707
699
|
end
|
708
700
|
|
709
|
-
def
|
710
|
-
|
711
|
-
|
712
|
-
|
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
|
709
|
+
def centered_cube_numbers
|
718
710
|
Enumerator.new do |y|
|
719
711
|
(1..Float::INFINITY).each do |delta|
|
720
|
-
y <<
|
712
|
+
y << (2 * delta - 1) * (delta**2 - delta + 1)
|
721
713
|
end
|
722
714
|
end
|
723
715
|
end
|
724
716
|
|
725
|
-
def
|
717
|
+
def rhombic_dodecahedral_numbers
|
726
718
|
Enumerator.new do |y|
|
727
719
|
(1..Float::INFINITY).each do |delta|
|
728
|
-
y <<
|
720
|
+
y << (2 * delta - 1) * (2 * delta**2 - 2 * delta + 1)
|
729
721
|
end
|
730
722
|
end
|
731
723
|
end
|
732
724
|
|
733
|
-
def
|
725
|
+
def hauy_rhombic_dodecahedral_numbers
|
734
726
|
Enumerator.new do |y|
|
735
727
|
(1..Float::INFINITY).each do |delta|
|
736
|
-
y << delta**
|
728
|
+
y << (2 * delta - 1) * (8 * delta**2 - 14 * delta + 7)
|
737
729
|
end
|
738
730
|
end
|
739
731
|
end
|
740
732
|
|
741
|
-
def
|
733
|
+
def centered_tetrahedron_numbers
|
742
734
|
Enumerator.new do |y|
|
743
735
|
(1..Float::INFINITY).each do |delta|
|
744
|
-
y << delta**
|
736
|
+
y << (2 * delta - 1) * ((delta**2 - delta + 3)) / 3
|
745
737
|
end
|
746
738
|
end
|
747
739
|
end
|
748
740
|
|
749
|
-
|
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 << (
|
746
|
+
y << (2 * delta - 1) * ((delta**2 - delta + 2)) / 2
|
753
747
|
end
|
754
748
|
end
|
755
749
|
end
|
756
750
|
|
757
|
-
|
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 << (
|
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
|
761
|
+
def centered_pentagonal_pyramid_numbers
|
766
762
|
Enumerator.new do |y|
|
767
763
|
(1..Float::INFINITY).each do |delta|
|
768
|
-
y << (
|
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
|
769
|
+
def centered_hexagonal_pyramid_numbers
|
774
770
|
Enumerator.new do |y|
|
775
771
|
(1..Float::INFINITY).each do |delta|
|
776
|
-
y <<
|
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
|
777
|
+
def centered_heptagonal_pyramid_numbers
|
782
778
|
Enumerator.new do |y|
|
783
779
|
(1..Float::INFINITY).each do |delta|
|
784
|
-
y <<
|
780
|
+
y << (2 * delta - 1) * (delta**2 - delta + 1)
|
785
781
|
end
|
786
782
|
end
|
787
783
|
end
|
788
784
|
|
789
|
-
def
|
785
|
+
def centered_octagonal_pyramid_numbers
|
790
786
|
Enumerator.new do |y|
|
791
787
|
(1..Float::INFINITY).each do |delta|
|
792
|
-
y << delta * (
|
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
|
793
|
+
def centered_octahedron_numbers
|
798
794
|
Enumerator.new do |y|
|
799
795
|
(1..Float::INFINITY).each do |delta|
|
800
|
-
y <<
|
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
|
801
|
+
def centered_icosahedron_numbers
|
806
802
|
Enumerator.new do |y|
|
807
803
|
(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
|
804
|
+
y << (2 * delta - 1) * (5 * delta**2 - 5 * delta + 3) / 3
|
813
805
|
end
|
814
806
|
end
|
815
807
|
end
|
816
808
|
|
817
|
-
|
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 << (
|
814
|
+
y << (2 * delta - 1) * (3 * delta**2 - 3 * delta + 1)
|
821
815
|
end
|
822
816
|
end
|
823
817
|
end
|
824
818
|
|
825
|
-
def
|
819
|
+
def centered_truncated_tetrahedron_numbers
|
826
820
|
Enumerator.new do |y|
|
827
821
|
(1..Float::INFINITY).each do |delta|
|
828
|
-
y << (
|
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
|
827
|
+
def centered_truncated_cube_numbers
|
834
828
|
Enumerator.new do |y|
|
835
829
|
(1..Float::INFINITY).each do |delta|
|
836
|
-
y << (
|
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
|
842
|
-
|
843
|
-
|
844
|
-
|
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
|
850
|
-
|
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
|
-
|
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 |
|
859
|
-
y <<
|
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
|
859
|
+
def centered_square_pyramidal_numbers
|
866
860
|
Enumerator.new do |y|
|
867
|
-
a = 0
|
868
861
|
(1..Float::INFINITY).each do |delta|
|
869
|
-
|
870
|
-
y << a + 1
|
862
|
+
y << (2 * delta**3 + delta) / 3
|
871
863
|
end
|
872
864
|
end
|
873
865
|
end
|
874
866
|
|
875
|
-
def
|
867
|
+
def centered_pentagonal_pyramidal_numbers
|
876
868
|
Enumerator.new do |y|
|
877
869
|
(1..Float::INFINITY).each do |delta|
|
878
|
-
y << delta**
|
870
|
+
y << (5 * delta**3 + delta) / 6
|
879
871
|
end
|
880
872
|
end
|
881
873
|
end
|
882
874
|
|
883
|
-
def
|
875
|
+
def centered_hexagonal_pyramidal_numbers
|
884
876
|
Enumerator.new do |y|
|
885
877
|
(1..Float::INFINITY).each do |delta|
|
886
|
-
y << delta**
|
878
|
+
y << delta**3
|
887
879
|
end
|
888
880
|
end
|
889
881
|
end
|
890
882
|
|
891
|
-
|
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**
|
889
|
+
y << (m * delta**3 + delta * (6 - m)) / 6
|
895
890
|
end
|
896
891
|
end
|
897
892
|
end
|
898
893
|
|
899
|
-
def
|
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 << (
|
898
|
+
y << (m * delta**3 + delta * (6 - m)) / 6
|
903
899
|
end
|
904
900
|
end
|
905
901
|
end
|
906
902
|
|
907
|
-
def
|
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
|
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
|
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
|
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
|
-
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
+
|