figurate_numbers 1.3.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.
@@ -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