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