figurate_numbers 0.9.5 → 0.9.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/figurate_numbers.rb +519 -11
  3. metadata +8 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6df9b3ff13396556252f3a009e3c858ffaeb55ee161308fe517875e441e2346c
4
- data.tar.gz: 5227d20c0e4729fe49085a6d8ad4fcdadf8252f82043ca7ef036122d944c717d
3
+ metadata.gz: 9b0f3e60892d81b990ede97fcc7798789140ceb234b2151ebe6727f95ae257f8
4
+ data.tar.gz: d4ec6a7f04c47c0d66fe4f6e78037beac4a03e5357abc9a9ad57558fe220136d
5
5
  SHA512:
6
- metadata.gz: 66b18934a2c4a02a87e1177b1aced4814a516def7656ba4e763727c527e6e88391383c8fabfae8a16be8e8b94c80afb34731a021ebc56ff0861b12187458e2d4
7
- data.tar.gz: d8b55ec7631adbe5aa687a3076ffa74c09bb44c77dbe5e15e30fcc100985eced8017db05f4040fe480d17edcf4920ccc43c3495b4febdfcb4dead271b2594a7f
6
+ metadata.gz: ee9da5e161c7d528076750c33dcd218c1ee89619219ac67a2dec5e1e9ea839e48908a454ca4b7606b076359220921711dfd3cb2d2073716439adc9d6f3890185
7
+ data.tar.gz: de9ab8b893842cbf8286eaf3326b0e69a8ff2ab512f12fb7e0647b66d981deda835a7bc55086dd3473fe6b450f93a2afbcbf94196d32ee85df1aa4c417d5c5b9
@@ -1,4 +1,4 @@
1
- # Infinite sequences of plane, space, and multidimensional figurate numbers are implemented using the Enumerator class. Based on the book ‘Figurate Numbers’ (2012) by Elena Deza & Michel Deza, it is intended for use in Sonic Pi.
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
4
 
@@ -10,10 +10,218 @@ module FigurateNumbers
10
10
  end
11
11
  end
12
12
 
13
- def FigurateNumbers.centered_pol_numbers(k)
13
+ def FigurateNumbers.triangular_numbers
14
14
  Enumerator.new do |y|
15
15
  (1..Float::INFINITY).each do |delta|
16
- y << (k * delta**2 - k * delta + 2) / 2
16
+ y << (delta**2 + delta) / 2
17
+ end
18
+ end
19
+ end
20
+
21
+ def FigurateNumbers.square_numbers
22
+ Enumerator.new do |y|
23
+ (1..Float::INFINITY).each do |delta|
24
+ y << (2 * delta**2) / 2
25
+ end
26
+ end
27
+ end
28
+
29
+ def FigurateNumbers.pentagonal_numbers
30
+ Enumerator.new do |y|
31
+ (1..Float::INFINITY).each do |delta|
32
+ y << (3 * delta**2 - delta) / 2
33
+ end
34
+ end
35
+ end
36
+
37
+ def FigurateNumbers.hexagonal_numbers
38
+ Enumerator.new do |y|
39
+ (1..Float::INFINITY).each do |delta|
40
+ y << (4 * delta**2 - 2 * delta) / 2
41
+ end
42
+ end
43
+ end
44
+
45
+ def FigurateNumbers.heptagonal_numbers
46
+ Enumerator.new do |y|
47
+ (1..Float::INFINITY).each do |delta|
48
+ y << (5 * delta**2 - 3 * delta) / 2
49
+ end
50
+ end
51
+ end
52
+
53
+ def FigurateNumbers.octagonal_numbers
54
+ Enumerator.new do |y|
55
+ (1..Float::INFINITY).each do |delta|
56
+ y << (6 * delta**2 - 4 * delta) / 2
57
+ end
58
+ end
59
+ end
60
+
61
+ def FigurateNumbers.nonagonal_numbers
62
+ Enumerator.new do |y|
63
+ (1..Float::INFINITY).each do |delta|
64
+ y << (7 * delta**2 - 5 * delta) / 2
65
+ end
66
+ end
67
+ end
68
+
69
+ def FigurateNumbers.decagonal_numbers
70
+ Enumerator.new do |y|
71
+ (1..Float::INFINITY).each do |delta|
72
+ y << (8 * delta**2 - 6 * delta) / 2
73
+ end
74
+ end
75
+ end
76
+
77
+ def FigurateNumbers.hendecagonal_numbers
78
+ Enumerator.new do |y|
79
+ (1..Float::INFINITY).each do |delta|
80
+ y << (9 * delta**2 - 7 * delta) / 2
81
+ end
82
+ end
83
+ end
84
+
85
+ def FigurateNumbers.dodecagonal_numbers
86
+ Enumerator.new do |y|
87
+ (1..Float::INFINITY).each do |delta|
88
+ y << (10 * delta**2 - 8 * delta) / 2
89
+ end
90
+ end
91
+ end
92
+
93
+ def FigurateNumbers.icosipentagonal_numbers
94
+ Enumerator.new do |y|
95
+ (1..Float::INFINITY).each do |delta|
96
+ y << (23 * delta**2 - 21 * delta) / 2
97
+ end
98
+ end
99
+ end
100
+
101
+ def FigurateNumbers.icosihexagonal_numbers
102
+ Enumerator.new do |y|
103
+ (1..Float::INFINITY).each do |delta|
104
+ y << (24 * delta**2 - 22 * delta) / 2
105
+ end
106
+ end
107
+ end
108
+
109
+ def FigurateNumbers.icosiheptagonal_numbers
110
+ Enumerator.new do |y|
111
+ (1..Float::INFINITY).each do |delta|
112
+ y << (25 * delta**2 - 23 * delta) / 2
113
+ end
114
+ end
115
+ end
116
+
117
+ def FigurateNumbers.icosioctagonal_numbers
118
+ Enumerator.new do |y|
119
+ (1..Float::INFINITY).each do |delta|
120
+ y << (26 * delta**2 - 24 * delta) / 2
121
+ end
122
+ end
123
+ end
124
+
125
+ def FigurateNumbers.icosinonagonal_numbers
126
+ Enumerator.new do |y|
127
+ (1..Float::INFINITY).each do |delta|
128
+ y << (27 * delta**2 - 25 * delta) / 2
129
+ end
130
+ end
131
+ end
132
+
133
+ def FigurateNumbers.triacontagonal_numbers
134
+ Enumerator.new do |y|
135
+ (1..Float::INFINITY).each do |delta|
136
+ y << (28 * delta**2 - 26 * delta) / 2
137
+ end
138
+ end
139
+ end
140
+
141
+ def FigurateNumbers.centered_triangular_numbers
142
+ Enumerator.new do |y|
143
+ (1..Float::INFINITY).each do |delta|
144
+ y << (3 * delta**2 - 3 * delta + 2) / 2
145
+ end
146
+ end
147
+ end
148
+
149
+ def FigurateNumbers.centered_square_numbers
150
+ Enumerator.new do |y|
151
+ (1..Float::INFINITY).each do |delta|
152
+ y << 2 * delta**2 - 2 * delta + 1
153
+ end
154
+ end
155
+ end
156
+
157
+ def FigurateNumbers.centered_pentagonal_numbers
158
+ Enumerator.new do |y|
159
+ (1..Float::INFINITY).each do |delta|
160
+ y << (5 * delta**2 - 5 * delta + 2) / 2
161
+ end
162
+ end
163
+ end
164
+
165
+ def FigurateNumbers.centered_dodecagonal_numbers
166
+ Enumerator.new do |y|
167
+ (1..Float::INFINITY).each do |delta|
168
+ y << 6 * delta**2 - 6 * delta + 1
169
+ end
170
+ end
171
+ end
172
+
173
+ def FigurateNumbers.centered_icosipentagonal_numbers
174
+ Enumerator.new do |y|
175
+ (1..Float::INFINITY).each do |delta|
176
+ y << (25 * delta**2 - 25 * delta + 2) / 2
177
+ end
178
+ end
179
+ end
180
+
181
+ def FigurateNumbers.centered_icosihexagonal_numbers
182
+ Enumerator.new do |y|
183
+ (1..Float::INFINITY).each do |delta|
184
+ y << (13 * delta**2 - 13 * delta + 1)
185
+ end
186
+ end
187
+ end
188
+
189
+ def FigurateNumbers.centered_icosiheptagonal_numbers
190
+ Enumerator.new do |y|
191
+ (1..Float::INFINITY).each do |delta|
192
+ y << (27 * delta**2 - 27 * delta + 2) / 2
193
+ end
194
+ end
195
+ end
196
+
197
+ def FigurateNumbers.centered_icosioctagonal_numbers
198
+ Enumerator.new do |y|
199
+ (1..Float::INFINITY).each do |delta|
200
+ y << (14 * delta**2 - 14 * delta + 1)
201
+ end
202
+ end
203
+ end
204
+
205
+ def FigurateNumbers.centered_icosinonagonal_numbers
206
+ Enumerator.new do |y|
207
+ (1..Float::INFINITY).each do |delta|
208
+ y << (29 * delta**2 - 29 * delta + 2) / 2
209
+ end
210
+ end
211
+ end
212
+
213
+ def FigurateNumbers.centered_triacontagonal_numbers
214
+ Enumerator.new do |y|
215
+ (1..Float::INFINITY).each do |delta|
216
+ y << (15 * delta**2 - 15 * delta + 1)
217
+ end
218
+ end
219
+ end
220
+
221
+ def FigurateNumbers.centered_mgonal_numbers(m)
222
+ Enumerator.new do |y|
223
+ (1..Float::INFINITY).each do |delta|
224
+ y << (m * delta**2 - m * delta + 2) / 2
17
225
  end
18
226
  end
19
227
  end
@@ -66,7 +274,7 @@ module FigurateNumbers
66
274
  end
67
275
  end
68
276
 
69
- def FigurateNumbers.truncated_center_pol_numbers(k)
277
+ def FigurateNumbers.truncated_centered_pol_numbers(k)
70
278
  Enumerator.new do |y|
71
279
  (1..Float::INFINITY).each do |delta|
72
280
  y << 1 + (k * (7 * delta**2 - 11 * delta + 4)) / 2
@@ -74,6 +282,63 @@ module FigurateNumbers
74
282
  end
75
283
  end
76
284
 
285
+ def FigurateNumbers.truncated_centered_triangular_numbers
286
+ Enumerator.new do |y|
287
+ (1..Float::INFINITY).each do |delta|
288
+ y << (21 * delta**2 - 33 * delta) / 2 + 7
289
+ end
290
+ end
291
+ end
292
+
293
+ def FigurateNumbers.truncated_centered_square_numbers
294
+ Enumerator.new do |y|
295
+ (1..Float::INFINITY).each do |delta|
296
+ y << 14 * delta**2 - 22 * delta + 9
297
+ end
298
+ end
299
+ end
300
+
301
+ def FigurateNumbers.truncated_centered_pentagonal_numbers
302
+ Enumerator.new do |y|
303
+ (1..Float::INFINITY).each do |delta|
304
+ y << (35 * delta**2 - 55 * delta) / 2 + 11
305
+ end
306
+ end
307
+ end
308
+
309
+ def FigurateNumbers.truncated_centered_hexagonal_numbers
310
+ Enumerator.new do |y|
311
+ (1..Float::INFINITY).each do |delta|
312
+ y << 21 * delta**2 - 33 * delta + 13
313
+ end
314
+ end
315
+ end
316
+
317
+ def FigurateNumbers.generalized_mgonal_numbers(m, left_index = 0)
318
+ Enumerator.new do |y|
319
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
320
+ y << (delta * ((m - 2) * delta - m + 4)) / 2
321
+ end
322
+ end
323
+ end
324
+
325
+ def FigurateNumbers.generalized_centered_pol_numbers(m, left_index = 0)
326
+ Enumerator.new do |y|
327
+ ((-1 * left_index)..Float::INFINITY).each do |delta|
328
+ y << (m * delta**2 - m * delta + 2) / 2
329
+ end
330
+ end
331
+ end
332
+
333
+ def FigurateNumbers.generalized_pronic_numbers(left_index = 0)
334
+ Enumerator.new do |y|
335
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
336
+ y << delta * (delta + 1)
337
+ end
338
+ end
339
+ end
340
+
341
+
77
342
  def FigurateNumbers.r_pyramidal_numbers(r = 3)
78
343
  Enumerator.new do |y|
79
344
  (1..Float::INFINITY).each do |delta|
@@ -242,6 +507,30 @@ module FigurateNumbers
242
507
  end
243
508
  end
244
509
 
510
+ def FigurateNumbers.centered_truncated_tetrahedron_numbers
511
+ Enumerator.new do |y|
512
+ (1..Float::INFINITY).each do |delta|
513
+ y << (2 * delta - 1) * (7 * delta**2 - 7 * delta + 3) / 3
514
+ end
515
+ end
516
+ end
517
+
518
+ def FigurateNumbers.centered_truncated_cube_numbers
519
+ Enumerator.new do |y|
520
+ (1..Float::INFINITY).each do |delta|
521
+ y << (2 * delta - 1) * (23 * delta**2 - 23 * delta + 3) / 3
522
+ end
523
+ end
524
+ end
525
+
526
+ def FigurateNumbers.centered_truncated_octahedron_numbers
527
+ Enumerator.new do |y|
528
+ (1..Float::INFINITY).each do |delta|
529
+ y << (2 * delta - 1) * (5 * delta**2 - 5 * delta + 1)
530
+ end
531
+ end
532
+ end
533
+
245
534
  def FigurateNumbers.centered_mgonal_pyramid_numbers(m)
246
535
  Enumerator.new do |y|
247
536
  (1..Float::INFINITY).each do |delta|
@@ -250,6 +539,30 @@ module FigurateNumbers
250
539
  end
251
540
  end
252
541
 
542
+ def FigurateNumbers.centered_triangular_pyramidal_numbers
543
+ Enumerator.new do |y|
544
+ (1..Float::INFINITY).each do |delta|
545
+ y << delta * (delta**2 + 1) / 2
546
+ end
547
+ end
548
+ end
549
+
550
+ def FigurateNumbers.centered_square_pyramidal_numbers
551
+ Enumerator.new do |y|
552
+ (1..Float::INFINITY).each do |delta|
553
+ y << (2 * delta**3 + delta) / 3
554
+ end
555
+ end
556
+ end
557
+
558
+ def FigurateNumbers.centered_pentagonal_pyramidal_numbers
559
+ Enumerator.new do |y|
560
+ (1..Float::INFINITY).each do |delta|
561
+ y << (5 * delta**3 + delta) / 6
562
+ end
563
+ end
564
+ end
565
+
253
566
  def FigurateNumbers.centered_mgonal_pyramidal_numbers(m)
254
567
  Enumerator.new do |y|
255
568
  (1..Float::INFINITY).each do |delta|
@@ -261,7 +574,15 @@ module FigurateNumbers
261
574
  def FigurateNumbers.hexagonal_prism_numbers
262
575
  Enumerator.new do |y|
263
576
  (1..Float::INFINITY).each do |delta|
264
- y << delta * ( 3 * delta**2 - 3 * delta + 1)
577
+ y << delta * ( 3 * delta**2 - 3 * delta + 1)
578
+ end
579
+ end
580
+ end
581
+
582
+ def FigurateNumbers.mgonal_prism_numbers(m)
583
+ Enumerator.new do |y|
584
+ (1..Float::INFINITY).each do |delta|
585
+ y << delta * (m * delta**2 - m * delta + 2) / 2
265
586
  end
266
587
  end
267
588
  end
@@ -274,6 +595,22 @@ module FigurateNumbers
274
595
  end
275
596
  end
276
597
 
598
+ def FigurateNumbers.generalized_cubic_numbers(left_index = 0)
599
+ Enumerator.new do |y|
600
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
601
+ y << delta**3
602
+ end
603
+ end
604
+ end
605
+
606
+ def FigurateNumbers.generalized_octahedral_numbers(left_index = 0)
607
+ Enumerator.new do |y|
608
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
609
+ y << (2 * delta**2 + 1) * delta / 3
610
+ end
611
+ end
612
+ end
613
+
277
614
  def FigurateNumbers.generalized_icosahedral_numbers(left_index = 0)
278
615
  Enumerator.new do |y|
279
616
  ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
@@ -290,6 +627,54 @@ module FigurateNumbers
290
627
  end
291
628
  end
292
629
 
630
+ def FigurateNumbers.generalized_centered_cube_numbers(left_index = 0)
631
+ Enumerator.new do |y|
632
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
633
+ y << (2 * delta - 1) * (delta**2 - delta + 1)
634
+ end
635
+ end
636
+ end
637
+
638
+ def FigurateNumbers.generalized_centered_tetrahedron_numbers(left_index = 0)
639
+ Enumerator.new do |y|
640
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
641
+ y << (2 * delta - 1) * (delta**2 - delta + 3) / 3
642
+ end
643
+ end
644
+ end
645
+
646
+ def FigurateNumbers.generalized_centered_tetrahedron_numbers(left_index = 0)
647
+ Enumerator.new do |y|
648
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
649
+ y << (2 * delta - 1) * (delta**2 - delta + 3) / 3
650
+ end
651
+ end
652
+ end
653
+
654
+ def FigurateNumbers.generalized_centered_square_pyramid_numbers(left_index = 0)
655
+ Enumerator.new do |y|
656
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
657
+ y << ((2 * delta - 1) * (delta**2 - delta + 2)) / 2
658
+ end
659
+ end
660
+ end
661
+
662
+ def FigurateNumbers.generalized_rhombic_dodecahedral_numbers(left_index = 0)
663
+ Enumerator.new do |y|
664
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
665
+ y << delta**4 - (delta - 1)**4
666
+ end
667
+ end
668
+ end
669
+
670
+ def FigurateNumbers.generalized_centered_mgonal_pyramidal_numbers(m, left_index = 0)
671
+ Enumerator.new do |y|
672
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
673
+ y << (m * delta**3 + delta * (6 - m)) / 6
674
+ end
675
+ end
676
+ end
677
+
293
678
  def FigurateNumbers.generalized_hexagonal_prism_numbers(left_index = 0)
294
679
  Enumerator.new do |y|
295
680
  ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
@@ -321,7 +706,23 @@ module FigurateNumbers
321
706
  end
322
707
  end
323
708
 
709
+ def FigurateNumbers.rising_factorial(n, k)
710
+ t = 1
711
+ (n..(n + k - 1)).each do |i|
712
+ t *= i
713
+ end
714
+ t
715
+ end
716
+
324
717
  def FigurateNumbers.k_dimensional_hypertetrahedron_numbers(k)
718
+ Enumerator.new do |y|
719
+ (1..Float::INFINITY).each do |delta|
720
+ y << rising_factorial(delta, k) / factorial_iter(k)
721
+ end
722
+ end
723
+ end
724
+
725
+ def FigurateNumbers.binomial_coefficient_k_dimensional_hypertetrahedron_numbers(k)
325
726
  Enumerator.new do |y|
326
727
  (1..Float::INFINITY).each do |delta|
327
728
  y << binomial_coefficient(delta + (k - 1), k)
@@ -377,7 +778,43 @@ module FigurateNumbers
377
778
  end
378
779
  end
379
780
 
380
- def FigurateNumbers.four_dimensional_pyramidal_numbers(m)
781
+ def FigurateNumbers.four_dimensional_hyperoctahedron_numbers
782
+ Enumerator.new do |y|
783
+ (1..Float::INFINITY).each do |delta|
784
+ y << delta**2 * (delta**2 + 2) / 3
785
+ end
786
+ end
787
+ end
788
+
789
+ def FigurateNumbers.five_dimensional_hyperoctahedron_numbers
790
+ Enumerator.new do |y|
791
+ (1..Float::INFINITY).each do |delta|
792
+ y << delta * (2 * delta**4 + 10 * delta**2 + 3) / 15
793
+ end
794
+ end
795
+ end
796
+
797
+ def FigurateNumbers.six_dimensional_hyperoctahedron_numbers
798
+ Enumerator.new do |y|
799
+ (1..Float::INFINITY).each do |delta|
800
+ y << delta**2 * (2 * delta**4 + 20 * delta**2 + 23) / 45
801
+ end
802
+ end
803
+ end
804
+
805
+ def FigurateNumbers.k_dimensional_hyperoctahedron_numbers(k)
806
+ Enumerator.new do |y|
807
+ (1..Float::INFINITY).each do |delta|
808
+ a = 0
809
+ (0..(k - 1)).each do |i|
810
+ a += binomial_coefficient(k - 1, i) * (rising_factorial(delta - i, k) / factorial_iter(k))
811
+ end
812
+ y << a
813
+ end
814
+ end
815
+ end
816
+
817
+ def FigurateNumbers.four_dimensional_mgonal_pyramidal_numbers(m)
381
818
  Enumerator.new do |y|
382
819
  (1..Float::INFINITY).each do |delta|
383
820
  y << (delta * (delta + 1) * (delta + 2) * ((m - 2) * delta - m + 6)) / 24
@@ -385,7 +822,7 @@ module FigurateNumbers
385
822
  end
386
823
  end
387
824
 
388
- def FigurateNumbers.five_dimensional_pyramidal_numbers(m)
825
+ def FigurateNumbers.five_dimensional_mgonal_pyramidal_numbers(m)
389
826
  Enumerator.new do |y|
390
827
  (1..Float::INFINITY).each do |delta|
391
828
  y << (delta * (delta + 1) * (delta + 2) * (delta + 3) * ((m - 2) * delta - m + 7)) / 120
@@ -393,7 +830,7 @@ module FigurateNumbers
393
830
  end
394
831
  end
395
832
 
396
- def FigurateNumbers.six_dimensional_pyramidal_numbers(m)
833
+ def FigurateNumbers.six_dimensional_mgonal_pyramidal_numbers(m)
397
834
  Enumerator.new do |y|
398
835
  (1..Float::INFINITY).each do |delta|
399
836
  y << (delta * (delta + 1) * (delta + 2) * (delta + 3) * (delta + 4) * ((m - 2) * delta - m + 8)) / 720
@@ -416,7 +853,7 @@ module FigurateNumbers
416
853
  private_class_method :pseudo_rising_factorial
417
854
  private_class_method :pseudo_pochhammer_function
418
855
 
419
- def FigurateNumbers.k_dimensional_pyramidal_numbers(k, m)
856
+ def FigurateNumbers.k_dimensional_mgonal_pyramidal_numbers(k, m)
420
857
  Enumerator.new do |y|
421
858
  (1..Float::INFINITY).each do |n|
422
859
  y << (pseudo_pochhammer_function(n, k) * ((m - 2) * n - m + k + 2)) /
@@ -425,6 +862,16 @@ module FigurateNumbers
425
862
  end
426
863
  end
427
864
 
865
+ def FigurateNumbers.centered_biquadratic_numbers
866
+ Enumerator.new do |y|
867
+ a = 0
868
+ (1..Float::INFINITY).each do |delta|
869
+ a += delta**4 - (delta - 2)**4
870
+ y << a + 1
871
+ end
872
+ end
873
+ end
874
+
428
875
  def FigurateNumbers.k_dimensional_centered_hypercube_numbers(k)
429
876
  Enumerator.new do |y|
430
877
  (1..Float::INFINITY).each do |delta|
@@ -433,6 +880,22 @@ module FigurateNumbers
433
880
  end
434
881
  end
435
882
 
883
+ def FigurateNumbers.five_dimensional_centered_hypercube_numbers
884
+ Enumerator.new do |y|
885
+ (1..Float::INFINITY).each do |delta|
886
+ y << delta**5 + (delta - 1)**5
887
+ end
888
+ end
889
+ end
890
+
891
+ def FigurateNumbers.six_dimensional_centered_hypercube_numbers
892
+ Enumerator.new do |y|
893
+ (1..Float::INFINITY).each do |delta|
894
+ y << delta**6 + (delta - 1)**6
895
+ end
896
+ end
897
+ end
898
+
436
899
  def FigurateNumbers.centered_polytope_numbers
437
900
  Enumerator.new do |y|
438
901
  (1..Float::INFINITY).each do |delta|
@@ -481,8 +944,8 @@ module FigurateNumbers
481
944
 
482
945
  def FigurateNumbers.nexus_numbers(k)
483
946
  Enumerator.new do |y|
484
- (0..Float::INFINITY).each do |n|
485
- y << (n + 1)**(k + 1) - (n**(k + 1))
947
+ (0..Float::INFINITY).each do |delta|
948
+ y << (delta + 1)**(k + 1) - delta**(k + 1)
486
949
  end
487
950
  end
488
951
  end
@@ -509,4 +972,49 @@ module FigurateNumbers
509
972
  end
510
973
  end
511
974
  end
975
+
976
+ def FigurateNumbers.generalized_pentatope_numbers(left_index = 0)
977
+ Enumerator.new do |y|
978
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
979
+ y << delta * (delta + 1) * (delta + 2) * (delta + 3) / 24
980
+ end
981
+ end
982
+ end
983
+
984
+ def FigurateNumbers.generalized_k_dimensional_hypertetrahedron_numbers(k, left_index = 0)
985
+ Enumerator.new do |y|
986
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
987
+ y << rising_factorial(delta, k) / factorial_iter(k)
988
+ end
989
+ end
990
+ end
991
+
992
+ def FigurateNumbers.generalized_k_dimensional_hypercube_numbers(k = 5, left_index = 0)
993
+ Enumerator.new do |y|
994
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
995
+ y << delta**k
996
+ end
997
+ end
998
+ end
999
+
1000
+ def FigurateNumbers.generalized_k_dimensional_hyperoctahedron_numbers(k = 5, left_index = 0)
1001
+ Enumerator.new do |y|
1002
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1003
+ a = 0
1004
+ (0..(k - 1)).each do |i|
1005
+ a += binomial_coefficient(k - 1, i) * (rising_factorial(delta - i, k) / factorial_iter(k))
1006
+ end
1007
+ y << a
1008
+ end
1009
+ end
1010
+ end
1011
+
1012
+ def FigurateNumbers.generalized_nexus_numbers(k, left_index = 0)
1013
+ Enumerator.new do |y|
1014
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1015
+ y << (delta + 1)**(k + 1) - delta**(k + 1)
1016
+ end
1017
+ end
1018
+ end
1019
+
512
1020
  end
metadata CHANGED
@@ -1,18 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: figurate_numbers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.5
4
+ version: 0.9.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Edgar Armando Delgado Vega
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-15 00:00:00.000000000 Z
11
+ date: 2024-06-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: Infinite sequences of plane, space, and multidimensional figurate numbers
14
- are implemented using the Enumerator class. Based on the book 'Figurate Numbers'
15
- (2012) by Elena Deza & Michel Deza, it is intended for use in Sonic Pi.
13
+ description: Generates infinite sequences of plane, space, and multidimensional figurate
14
+ numbers based on the book ‘Figurate Numbers’ (2012) by Elena Deza and Michel Deza.
15
+ The methods are implemented using the Enumerator class and are designed for use
16
+ in Sonic Pi.
16
17
  email: edelve91@gmail.com
17
18
  executables: []
18
19
  extensions: []
@@ -43,6 +44,6 @@ requirements: []
43
44
  rubygems_version: 3.3.7
44
45
  signing_key:
45
46
  specification_version: 4
46
- summary: Generates infinite sequences of plane, space and multidimensional figurate
47
- numbers based on the book Figurate Numbers (2012) by Elena Deza and Michel Deza.
47
+ summary: Generates infinite sequences of plane, space, and multidimensional figurate
48
+ numbers based on the book Figurate Numbers (2012) by Elena Deza and Michel Deza.
48
49
  test_files: []