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