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.
- checksums.yaml +4 -4
- data/lib/figurate_numbers.rb +519 -11
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b0f3e60892d81b990ede97fcc7798789140ceb234b2151ebe6727f95ae257f8
|
4
|
+
data.tar.gz: d4ec6a7f04c47c0d66fe4f6e78037beac4a03e5357abc9a9ad57558fe220136d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ee9da5e161c7d528076750c33dcd218c1ee89619219ac67a2dec5e1e9ea839e48908a454ca4b7606b076359220921711dfd3cb2d2073716439adc9d6f3890185
|
7
|
+
data.tar.gz: de9ab8b893842cbf8286eaf3326b0e69a8ff2ab512f12fb7e0647b66d981deda835a7bc55086dd3473fe6b450f93a2afbcbf94196d32ee85df1aa4c417d5c5b9
|
data/lib/figurate_numbers.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
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
4
|
|
@@ -10,10 +10,218 @@ module FigurateNumbers
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
def FigurateNumbers.
|
13
|
+
def FigurateNumbers.triangular_numbers
|
14
14
|
Enumerator.new do |y|
|
15
15
|
(1..Float::INFINITY).each do |delta|
|
16
|
-
y << (
|
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.
|
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 <<
|
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.
|
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.
|
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.
|
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.
|
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 |
|
485
|
-
y << (
|
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.
|
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-
|
11
|
+
date: 2024-06-17 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
|
-
description:
|
14
|
-
|
15
|
-
|
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: []
|