figurate_numbers 1.3.0 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +54 -395
- data/lib/figurate_numbers/multidimensional_figurate_numbers.rb +831 -0
- data/lib/figurate_numbers/p_adic_utils/p_adic_utils.rb +27 -0
- data/lib/figurate_numbers/plane_figurate_numbers.rb +653 -0
- data/lib/figurate_numbers/space_figurate_numbers.rb +712 -0
- data/lib/figurate_numbers/utils/utils.rb +38 -0
- data/lib/figurate_numbers/version.rb +5 -0
- data/lib/figurate_numbers.rb +11 -2229
- metadata +10 -7
@@ -0,0 +1,712 @@
|
|
1
|
+
module FigurateNumbers
|
2
|
+
# Module containing methods for generating 3D figurate number sequences.
|
3
|
+
module SpaceFigurateNumbers # rubocop:disable Metrics/ModuleLength
|
4
|
+
extend self
|
5
|
+
|
6
|
+
def r_pyramidal(r = 3)
|
7
|
+
Enumerator.new do |y|
|
8
|
+
(1..Float::INFINITY).each do |delta|
|
9
|
+
y << (3 * delta**2 + delta**3 * (r - 2) - delta * (r - 5)) / 6
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def square_pyramidal
|
15
|
+
Enumerator.new do |y|
|
16
|
+
(1..Float::INFINITY).each do |delta|
|
17
|
+
y << (delta * (delta + 1) * (2 * delta + 1)) / 6
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
alias pyramidal square_pyramidal
|
23
|
+
|
24
|
+
def pentagonal_pyramidal
|
25
|
+
Enumerator.new do |y|
|
26
|
+
(1..Float::INFINITY).each do |delta|
|
27
|
+
y << delta**2 * (delta + 1) / 2
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def hexagonal_pyramidal
|
33
|
+
Enumerator.new do |y|
|
34
|
+
(1..Float::INFINITY).each do |delta|
|
35
|
+
y << delta * (delta + 1) * (4 * delta - 1) / 6
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def heptagonal_pyramidal
|
41
|
+
Enumerator.new do |y|
|
42
|
+
(1..Float::INFINITY).each do |delta|
|
43
|
+
y << delta * (delta + 1) * (5 * delta - 2) / 6
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def octagonal_pyramidal
|
49
|
+
Enumerator.new do |y|
|
50
|
+
(1..Float::INFINITY).each do |delta|
|
51
|
+
y << delta * (delta + 1) * (6 * delta - 3) / 6
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def nonagonal_pyramidal
|
57
|
+
Enumerator.new do |y|
|
58
|
+
(1..Float::INFINITY).each do |delta|
|
59
|
+
y << delta * (delta + 1) * (7 * delta - 4) / 6
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def decagonal_pyramidal
|
65
|
+
Enumerator.new do |y|
|
66
|
+
(1..Float::INFINITY).each do |delta|
|
67
|
+
y << delta * (delta + 1) * (8 * delta - 5) / 6
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def hendecagonal_pyramidal
|
73
|
+
Enumerator.new do |y|
|
74
|
+
(1..Float::INFINITY).each do |delta|
|
75
|
+
y << delta * (delta + 1) * (9 * delta - 6) / 6
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def dodecagonal_pyramidal
|
81
|
+
Enumerator.new do |y|
|
82
|
+
(1..Float::INFINITY).each do |delta|
|
83
|
+
y << delta * (delta + 1) * (10 * delta - 7) / 6
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def tridecagonal_pyramidal
|
89
|
+
Enumerator.new do |y|
|
90
|
+
(1..Float::INFINITY).each do |delta|
|
91
|
+
y << delta * (delta + 1) * (11 * delta - 8) / 6
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def tetradecagonal_pyramidal
|
97
|
+
Enumerator.new do |y|
|
98
|
+
(1..Float::INFINITY).each do |delta|
|
99
|
+
y << delta * (delta + 1) * (12 * delta - 9) / 6
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def pentadecagonal_pyramidal
|
105
|
+
Enumerator.new do |y|
|
106
|
+
(1..Float::INFINITY).each do |delta|
|
107
|
+
y << delta * (delta + 1) * (13 * delta - 10) / 6
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def hexadecagonal_pyramidal
|
113
|
+
Enumerator.new do |y|
|
114
|
+
(1..Float::INFINITY).each do |delta|
|
115
|
+
y << delta * (delta + 1) * (14 * delta - 11) / 6
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def heptadecagonal_pyramidal
|
121
|
+
Enumerator.new do |y|
|
122
|
+
(1..Float::INFINITY).each do |delta|
|
123
|
+
y << delta * (delta + 1) * (15 * delta - 12) / 6
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def octadecagonal_pyramidal
|
129
|
+
Enumerator.new do |y|
|
130
|
+
(1..Float::INFINITY).each do |delta|
|
131
|
+
y << delta * (delta + 1) * (16 * delta - 13) / 6
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
def nonadecagonal_pyramidal
|
137
|
+
Enumerator.new do |y|
|
138
|
+
(1..Float::INFINITY).each do |delta|
|
139
|
+
y << delta * (delta + 1) * (17 * delta - 14) / 6
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def icosagonal_pyramidal
|
145
|
+
Enumerator.new do |y|
|
146
|
+
(1..Float::INFINITY).each do |delta|
|
147
|
+
y << delta * (delta + 1) * (18 * delta - 15) / 6
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
def icosihenagonal_pyramidal
|
153
|
+
Enumerator.new do |y|
|
154
|
+
(1..Float::INFINITY).each do |delta|
|
155
|
+
y << delta * (delta + 1) * (19 * delta - 16) / 6
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
def icosidigonal_pyramidal
|
161
|
+
Enumerator.new do |y|
|
162
|
+
(1..Float::INFINITY).each do |delta|
|
163
|
+
y << delta * (delta + 1) * (20 * delta - 17) / 6
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
def icositrigonal_pyramidal
|
169
|
+
Enumerator.new do |y|
|
170
|
+
(1..Float::INFINITY).each do |delta|
|
171
|
+
y << delta * (delta + 1) * (21 * delta - 18) / 6
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
def icositetragonal_pyramidal
|
177
|
+
Enumerator.new do |y|
|
178
|
+
(1..Float::INFINITY).each do |delta|
|
179
|
+
y << delta * (delta + 1) * (22 * delta - 19) / 6
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
def icosipentagonal_pyramidal
|
185
|
+
Enumerator.new do |y|
|
186
|
+
(1..Float::INFINITY).each do |delta|
|
187
|
+
y << delta * (delta + 1) * (23 * delta - 20) / 6
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
def icosihexagonal_pyramidal
|
193
|
+
Enumerator.new do |y|
|
194
|
+
(1..Float::INFINITY).each do |delta|
|
195
|
+
y << delta * (delta + 1) * (24 * delta - 21) / 6
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
def icosiheptagonal_pyramidal
|
201
|
+
Enumerator.new do |y|
|
202
|
+
(1..Float::INFINITY).each do |delta|
|
203
|
+
y << delta * (delta + 1) * (25 * delta - 22) / 6
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
def icosioctagonal_pyramidal
|
209
|
+
Enumerator.new do |y|
|
210
|
+
(1..Float::INFINITY).each do |delta|
|
211
|
+
y << delta * (delta + 1) * (26 * delta - 23) / 6
|
212
|
+
end
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
def icosinonagonal_pyramidal
|
217
|
+
Enumerator.new do |y|
|
218
|
+
(1..Float::INFINITY).each do |delta|
|
219
|
+
y << delta * (delta + 1) * (27 * delta - 24) / 6
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
def triacontagonal_pyramidal
|
225
|
+
Enumerator.new do |y|
|
226
|
+
(1..Float::INFINITY).each do |delta|
|
227
|
+
y << delta * (delta + 1) * (28 * delta - 25) / 6
|
228
|
+
end
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
def triangular_tetrahedral
|
233
|
+
Enumerator.new do |y|
|
234
|
+
finite_set = [1, 10, 120, 1540, 7140]
|
235
|
+
(0..Float::INFINITY).each do |delta|
|
236
|
+
y << finite_set[delta % 5]
|
237
|
+
end
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
def triangular_square_pyramidal
|
242
|
+
Enumerator.new do |y|
|
243
|
+
finite_set = [1, 55, 91, 208_335]
|
244
|
+
(0..Float::INFINITY).each do |delta|
|
245
|
+
y << finite_set[delta % 4]
|
246
|
+
end
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
def square_tetrahedral
|
251
|
+
Enumerator.new do |y|
|
252
|
+
finite_set = [1, 4, 19_600]
|
253
|
+
(0..Float::INFINITY).each do |delta|
|
254
|
+
y << finite_set[delta % 3]
|
255
|
+
end
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
def square_square_pyramidal
|
260
|
+
Enumerator.new do |y|
|
261
|
+
finite_set = [1, 4900]
|
262
|
+
(0..Float::INFINITY).each do |delta|
|
263
|
+
y << finite_set[delta % 2]
|
264
|
+
end
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
def tetrahedral_square_pyramidal_number
|
269
|
+
Enumerator.new do |y|
|
270
|
+
(1..Float::INFINITY).each do
|
271
|
+
y << 1
|
272
|
+
end
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
def cubic
|
277
|
+
Enumerator.new do |y|
|
278
|
+
(1..Float::INFINITY).each do |delta|
|
279
|
+
y << delta**3
|
280
|
+
end
|
281
|
+
end
|
282
|
+
end
|
283
|
+
|
284
|
+
alias perfect_cube cubic
|
285
|
+
|
286
|
+
def tetrahedral
|
287
|
+
Enumerator.new do |y|
|
288
|
+
(1..Float::INFINITY).each do |delta|
|
289
|
+
y << (delta * (delta + 1) * (delta + 2)) / 6
|
290
|
+
end
|
291
|
+
end
|
292
|
+
end
|
293
|
+
|
294
|
+
alias triangular_pyramidal tetrahedral
|
295
|
+
|
296
|
+
def octahedral
|
297
|
+
Enumerator.new do |y|
|
298
|
+
(1..Float::INFINITY).each do |delta|
|
299
|
+
y << (delta * (2 * delta**2 + 1)) / 3
|
300
|
+
end
|
301
|
+
end
|
302
|
+
end
|
303
|
+
|
304
|
+
def dodecahedral
|
305
|
+
Enumerator.new do |y|
|
306
|
+
(1..Float::INFINITY).each do |delta|
|
307
|
+
y << (delta * (3 * delta - 1) * (3 * delta - 2)) / 2
|
308
|
+
end
|
309
|
+
end
|
310
|
+
end
|
311
|
+
|
312
|
+
def icosahedral
|
313
|
+
Enumerator.new do |y|
|
314
|
+
(1..Float::INFINITY).each do |delta|
|
315
|
+
y << (delta * (5 * delta**2 - 5 * delta + 2)) / 2
|
316
|
+
end
|
317
|
+
end
|
318
|
+
end
|
319
|
+
|
320
|
+
def truncated_tetrahedral
|
321
|
+
Enumerator.new do |y|
|
322
|
+
(1..Float::INFINITY).each do |delta|
|
323
|
+
y << (23 * delta**2 - 27 * delta + 10) * delta / 6
|
324
|
+
end
|
325
|
+
end
|
326
|
+
end
|
327
|
+
|
328
|
+
def truncated_cubic
|
329
|
+
Enumerator.new do |y|
|
330
|
+
(1..Float::INFINITY).each do |delta|
|
331
|
+
y << (3 * delta - 2)**3 - ((8 * (delta - 1) * delta * (delta + 1)) / 6)
|
332
|
+
end
|
333
|
+
end
|
334
|
+
end
|
335
|
+
|
336
|
+
def truncated_octahedral
|
337
|
+
Enumerator.new do |y|
|
338
|
+
(1..Float::INFINITY).each do |delta|
|
339
|
+
y << (16 * delta**3 - 33 * delta**2 + 24 * delta - 6)
|
340
|
+
end
|
341
|
+
end
|
342
|
+
end
|
343
|
+
|
344
|
+
def stella_octangula
|
345
|
+
Enumerator.new do |y|
|
346
|
+
(1..Float::INFINITY).each do |delta|
|
347
|
+
y << delta * (2 * delta**2 - 1)
|
348
|
+
end
|
349
|
+
end
|
350
|
+
end
|
351
|
+
|
352
|
+
def centered_cube
|
353
|
+
Enumerator.new do |y|
|
354
|
+
(1..Float::INFINITY).each do |delta|
|
355
|
+
y << (2 * delta - 1) * (delta**2 - delta + 1)
|
356
|
+
end
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
360
|
+
def rhombic_dodecahedral
|
361
|
+
Enumerator.new do |y|
|
362
|
+
(1..Float::INFINITY).each do |delta|
|
363
|
+
y << (2 * delta - 1) * (2 * delta**2 - 2 * delta + 1)
|
364
|
+
end
|
365
|
+
end
|
366
|
+
end
|
367
|
+
|
368
|
+
def hauy_rhombic_dodecahedral
|
369
|
+
Enumerator.new do |y|
|
370
|
+
(1..Float::INFINITY).each do |delta|
|
371
|
+
y << (2 * delta - 1) * (8 * delta**2 - 14 * delta + 7)
|
372
|
+
end
|
373
|
+
end
|
374
|
+
end
|
375
|
+
|
376
|
+
def centered_tetrahedron
|
377
|
+
Enumerator.new do |y|
|
378
|
+
(1..Float::INFINITY).each do |delta|
|
379
|
+
y << (2 * delta - 1) * ((delta**2 - delta + 3)) / 3
|
380
|
+
end
|
381
|
+
end
|
382
|
+
end
|
383
|
+
|
384
|
+
alias centered_tetrahedral centered_tetrahedron
|
385
|
+
|
386
|
+
def centered_square_pyramid
|
387
|
+
Enumerator.new do |y|
|
388
|
+
(1..Float::INFINITY).each do |delta|
|
389
|
+
y << (2 * delta - 1) * ((delta**2 - delta + 2)) / 2
|
390
|
+
end
|
391
|
+
end
|
392
|
+
end
|
393
|
+
|
394
|
+
alias centered_pyramid centered_square_pyramid
|
395
|
+
|
396
|
+
def centered_mgonal_pyramid(m)
|
397
|
+
Enumerator.new do |y|
|
398
|
+
(1..Float::INFINITY).each do |delta|
|
399
|
+
y << (m - 1) * ((delta - 1) * delta * (2 * delta - 1)) / 6 + (2 * delta - 1)
|
400
|
+
end
|
401
|
+
end
|
402
|
+
end
|
403
|
+
|
404
|
+
def centered_pentagonal_pyramid
|
405
|
+
Enumerator.new do |y|
|
406
|
+
(1..Float::INFINITY).each do |delta|
|
407
|
+
y << (2 * delta - 1) * (2 * delta**2 - 2 * delta + 3) / 3
|
408
|
+
end
|
409
|
+
end
|
410
|
+
end
|
411
|
+
|
412
|
+
def centered_hexagonal_pyramid
|
413
|
+
Enumerator.new do |y|
|
414
|
+
(1..Float::INFINITY).each do |delta|
|
415
|
+
y << (2 * delta - 1) * (5 * delta**2 - 5 * delta + 6) / 6
|
416
|
+
end
|
417
|
+
end
|
418
|
+
end
|
419
|
+
|
420
|
+
def centered_heptagonal_pyramid
|
421
|
+
Enumerator.new do |y|
|
422
|
+
(1..Float::INFINITY).each do |delta|
|
423
|
+
y << (2 * delta - 1) * (delta**2 - delta + 1)
|
424
|
+
end
|
425
|
+
end
|
426
|
+
end
|
427
|
+
|
428
|
+
def centered_octagonal_pyramid
|
429
|
+
Enumerator.new do |y|
|
430
|
+
(1..Float::INFINITY).each do |delta|
|
431
|
+
y << (2 * delta - 1) * (7 * delta**2 - 7 * delta + 6) / 6
|
432
|
+
end
|
433
|
+
end
|
434
|
+
end
|
435
|
+
|
436
|
+
def centered_octahedron
|
437
|
+
Enumerator.new do |y|
|
438
|
+
(1..Float::INFINITY).each do |delta|
|
439
|
+
y << (2 * delta - 1) * (2 * delta**2 - 2 * delta + 3) / 3
|
440
|
+
end
|
441
|
+
end
|
442
|
+
end
|
443
|
+
|
444
|
+
def centered_icosahedron
|
445
|
+
Enumerator.new do |y|
|
446
|
+
(1..Float::INFINITY).each do |delta|
|
447
|
+
y << (2 * delta - 1) * (5 * delta**2 - 5 * delta + 3) / 3
|
448
|
+
end
|
449
|
+
end
|
450
|
+
end
|
451
|
+
|
452
|
+
alias centered_cuboctahedron centered_icosahedron
|
453
|
+
|
454
|
+
def centered_dodecahedron
|
455
|
+
Enumerator.new do |y|
|
456
|
+
(1..Float::INFINITY).each do |delta|
|
457
|
+
y << (2 * delta - 1) * (3 * delta**2 - 3 * delta + 1)
|
458
|
+
end
|
459
|
+
end
|
460
|
+
end
|
461
|
+
|
462
|
+
def centered_truncated_tetrahedron
|
463
|
+
Enumerator.new do |y|
|
464
|
+
(1..Float::INFINITY).each do |delta|
|
465
|
+
y << (2 * delta - 1) * (7 * delta**2 - 7 * delta + 3) / 3
|
466
|
+
end
|
467
|
+
end
|
468
|
+
end
|
469
|
+
|
470
|
+
def centered_truncated_cube
|
471
|
+
Enumerator.new do |y|
|
472
|
+
(1..Float::INFINITY).each do |delta|
|
473
|
+
y << (2 * delta - 1) * (23 * delta**2 - 23 * delta + 3) / 3
|
474
|
+
end
|
475
|
+
end
|
476
|
+
end
|
477
|
+
|
478
|
+
def centered_truncated_octahedron
|
479
|
+
Enumerator.new do |y|
|
480
|
+
(1..Float::INFINITY).each do |delta|
|
481
|
+
y << (2 * delta - 1) * (5 * delta**2 - 5 * delta + 1)
|
482
|
+
end
|
483
|
+
end
|
484
|
+
end
|
485
|
+
|
486
|
+
def centered_mgonal_pyramidal(m)
|
487
|
+
Enumerator.new do |y|
|
488
|
+
(1..Float::INFINITY).each do |delta|
|
489
|
+
y << (m * delta**3 + delta * (6 - m)) / 6
|
490
|
+
end
|
491
|
+
end
|
492
|
+
end
|
493
|
+
|
494
|
+
def centered_triangular_pyramidal
|
495
|
+
Enumerator.new do |y|
|
496
|
+
(1..Float::INFINITY).each do |delta|
|
497
|
+
y << delta * (delta**2 + 1) / 2
|
498
|
+
end
|
499
|
+
end
|
500
|
+
end
|
501
|
+
|
502
|
+
def centered_square_pyramidal
|
503
|
+
Enumerator.new do |y|
|
504
|
+
(1..Float::INFINITY).each do |delta|
|
505
|
+
y << (2 * delta**3 + delta) / 3
|
506
|
+
end
|
507
|
+
end
|
508
|
+
end
|
509
|
+
|
510
|
+
def centered_pentagonal_pyramidal
|
511
|
+
Enumerator.new do |y|
|
512
|
+
(1..Float::INFINITY).each do |delta|
|
513
|
+
y << (5 * delta**3 + delta) / 6
|
514
|
+
end
|
515
|
+
end
|
516
|
+
end
|
517
|
+
|
518
|
+
def centered_hexagonal_pyramidal
|
519
|
+
Enumerator.new do |y|
|
520
|
+
(1..Float::INFINITY).each do |delta|
|
521
|
+
y << delta**3
|
522
|
+
end
|
523
|
+
end
|
524
|
+
end
|
525
|
+
|
526
|
+
alias hex_pyramidal centered_hexagonal_pyramidal
|
527
|
+
|
528
|
+
def centered_heptagonal_pyramidal
|
529
|
+
m = 7
|
530
|
+
Enumerator.new do |y|
|
531
|
+
(1..Float::INFINITY).each do |delta|
|
532
|
+
y << (m * delta**3 + delta * (6 - m)) / 6
|
533
|
+
end
|
534
|
+
end
|
535
|
+
end
|
536
|
+
|
537
|
+
def centered_octagonal_pyramidal
|
538
|
+
m = 8
|
539
|
+
Enumerator.new do |y|
|
540
|
+
(1..Float::INFINITY).each do |delta|
|
541
|
+
y << (m * delta**3 + delta * (6 - m)) / 6
|
542
|
+
end
|
543
|
+
end
|
544
|
+
end
|
545
|
+
|
546
|
+
def centered_nonagonal_pyramidal
|
547
|
+
m = 9
|
548
|
+
Enumerator.new do |y|
|
549
|
+
(1..Float::INFINITY).each do |delta|
|
550
|
+
y << (m * delta**3 + delta * (6 - m)) / 6
|
551
|
+
end
|
552
|
+
end
|
553
|
+
end
|
554
|
+
|
555
|
+
def centered_decagonal_pyramidal
|
556
|
+
m = 10
|
557
|
+
Enumerator.new do |y|
|
558
|
+
(1..Float::INFINITY).each do |delta|
|
559
|
+
y << (m * delta**3 + delta * (6 - m)) / 6
|
560
|
+
end
|
561
|
+
end
|
562
|
+
end
|
563
|
+
|
564
|
+
def centered_hendecagonal_pyramidal
|
565
|
+
m = 11
|
566
|
+
Enumerator.new do |y|
|
567
|
+
(1..Float::INFINITY).each do |delta|
|
568
|
+
y << (m * delta**3 + delta * (6 - m)) / 6
|
569
|
+
end
|
570
|
+
end
|
571
|
+
end
|
572
|
+
|
573
|
+
def centered_dodecagonal_pyramidal
|
574
|
+
m = 12
|
575
|
+
Enumerator.new do |y|
|
576
|
+
(1..Float::INFINITY).each do |delta|
|
577
|
+
y << (m * delta**3 + delta * (6 - m)) / 6
|
578
|
+
end
|
579
|
+
end
|
580
|
+
end
|
581
|
+
|
582
|
+
def hexagonal_prism
|
583
|
+
Enumerator.new do |y|
|
584
|
+
(1..Float::INFINITY).each do |delta|
|
585
|
+
y << delta * (3 * delta**2 - 3 * delta + 1)
|
586
|
+
end
|
587
|
+
end
|
588
|
+
end
|
589
|
+
|
590
|
+
def mgonal_prism(m)
|
591
|
+
Enumerator.new do |y|
|
592
|
+
(1..Float::INFINITY).each do |delta|
|
593
|
+
y << delta * (m * delta**2 - m * delta + 2) / 2
|
594
|
+
end
|
595
|
+
end
|
596
|
+
end
|
597
|
+
|
598
|
+
def generalized_mgonal_pyramidal(m, left_index = 0)
|
599
|
+
Enumerator.new do |y|
|
600
|
+
((-1 * left_index.abs)..Float::INFINITY).each do |delta|
|
601
|
+
y << (delta * (delta + 1) * ((m - 2) * delta - m + 5)) / 6
|
602
|
+
end
|
603
|
+
end
|
604
|
+
end
|
605
|
+
|
606
|
+
def generalized_pentagonal_pyramidal(left_index = 0)
|
607
|
+
m = 5
|
608
|
+
Enumerator.new do |y|
|
609
|
+
((-1 * left_index.abs)..Float::INFINITY).each do |delta|
|
610
|
+
y << (delta * (delta + 1) * ((m - 2) * delta - m + 5)) / 6
|
611
|
+
end
|
612
|
+
end
|
613
|
+
end
|
614
|
+
|
615
|
+
def generalized_hexagonal_pyramidal(left_index = 0)
|
616
|
+
m = 6
|
617
|
+
Enumerator.new do |y|
|
618
|
+
((-1 * left_index.abs)..Float::INFINITY).each do |delta|
|
619
|
+
y << (delta * (delta + 1) * ((m - 2) * delta - m + 5)) / 6
|
620
|
+
end
|
621
|
+
end
|
622
|
+
end
|
623
|
+
|
624
|
+
def generalized_cubic(left_index = 0)
|
625
|
+
Enumerator.new do |y|
|
626
|
+
((-1 * left_index.abs)..Float::INFINITY).each do |delta|
|
627
|
+
y << delta**3
|
628
|
+
end
|
629
|
+
end
|
630
|
+
end
|
631
|
+
|
632
|
+
def generalized_octahedral(left_index = 0)
|
633
|
+
Enumerator.new do |y|
|
634
|
+
((-1 * left_index.abs)..Float::INFINITY).each do |delta|
|
635
|
+
y << (2 * delta**2 + 1) * delta / 3
|
636
|
+
end
|
637
|
+
end
|
638
|
+
end
|
639
|
+
|
640
|
+
def generalized_icosahedral(left_index = 0)
|
641
|
+
Enumerator.new do |y|
|
642
|
+
((-1 * left_index.abs)..Float::INFINITY).each do |delta|
|
643
|
+
y << (5 * delta**2 - 5 * delta + 2) * delta / 2
|
644
|
+
end
|
645
|
+
end
|
646
|
+
end
|
647
|
+
|
648
|
+
def generalized_dodecahedral(left_index = 0)
|
649
|
+
Enumerator.new do |y|
|
650
|
+
((-1 * left_index.abs)..Float::INFINITY).each do |delta|
|
651
|
+
y << (9 * delta**2 - 9 * delta + 2) * delta / 2
|
652
|
+
end
|
653
|
+
end
|
654
|
+
end
|
655
|
+
|
656
|
+
def generalized_centered_cube(left_index = 0)
|
657
|
+
Enumerator.new do |y|
|
658
|
+
((-1 * left_index.abs)..Float::INFINITY).each do |delta|
|
659
|
+
y << (2 * delta - 1) * (delta**2 - delta + 1)
|
660
|
+
end
|
661
|
+
end
|
662
|
+
end
|
663
|
+
|
664
|
+
def generalized_centered_tetrahedron(left_index = 0)
|
665
|
+
Enumerator.new do |y|
|
666
|
+
((-1 * left_index.abs)..Float::INFINITY).each do |delta|
|
667
|
+
y << (2 * delta - 1) * (delta**2 - delta + 3) / 3
|
668
|
+
end
|
669
|
+
end
|
670
|
+
end
|
671
|
+
|
672
|
+
def generalized_centered_square_pyramid(left_index = 0)
|
673
|
+
Enumerator.new do |y|
|
674
|
+
((-1 * left_index.abs)..Float::INFINITY).each do |delta|
|
675
|
+
y << ((2 * delta - 1) * (delta**2 - delta + 2)) / 2
|
676
|
+
end
|
677
|
+
end
|
678
|
+
end
|
679
|
+
|
680
|
+
def generalized_rhombic_dodecahedral(left_index = 0)
|
681
|
+
Enumerator.new do |y|
|
682
|
+
((-1 * left_index.abs)..Float::INFINITY).each do |delta|
|
683
|
+
y << delta**4 - (delta - 1)**4
|
684
|
+
end
|
685
|
+
end
|
686
|
+
end
|
687
|
+
|
688
|
+
def generalized_centered_mgonal_pyramidal(m, left_index = 0)
|
689
|
+
Enumerator.new do |y|
|
690
|
+
((-1 * left_index.abs)..Float::INFINITY).each do |delta|
|
691
|
+
y << (m * delta**3 + delta * (6 - m)) / 6
|
692
|
+
end
|
693
|
+
end
|
694
|
+
end
|
695
|
+
|
696
|
+
def generalized_mgonal_prism(m, left_index = 0)
|
697
|
+
Enumerator.new do |y|
|
698
|
+
((-1 * left_index.abs)..Float::INFINITY).each do |delta|
|
699
|
+
y << delta * (m * delta**2 - m * delta + 2) / 2
|
700
|
+
end
|
701
|
+
end
|
702
|
+
end
|
703
|
+
|
704
|
+
def generalized_hexagonal_prism(left_index = 0)
|
705
|
+
Enumerator.new do |y|
|
706
|
+
((-1 * left_index.abs)..Float::INFINITY).each do |delta|
|
707
|
+
y << delta * (3 * delta**2 - 3 * delta + 1)
|
708
|
+
end
|
709
|
+
end
|
710
|
+
end
|
711
|
+
end
|
712
|
+
end
|