figurate_numbers 1.1.0 → 1.3.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 +22 -15
- data/lib/figurate_numbers.rb +93 -6
- metadata +14 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3ce2e9677b127bf7f73fb6776128e8691fa53353495f6ed7fc61e60961f39abb
|
4
|
+
data.tar.gz: d0596c55e684e9716c32c6e495c5feef10a4d0d25e91daac7914f49af652561b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a6b1da7cb33f30eed0179311888195fc837c06e8a419984d38c352e892a71d46724297930810a302edaf3fd699052cd7b8c7e737e5b17e327c81105f28658c92
|
7
|
+
data.tar.gz: e3fc3b4415f2576c7222c029d9a030bfa44bf86270700e4022c24ce82fa6e73b541cbfc1ee3eceb415f2186a6dec5bf7954629a3ad14d67f08fd73e9cc511eae
|
data/README.md
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
# Figurate Numbers
|
2
2
|
|
3
|
-
|
3
|
+

|
4
|
+

|
5
|
+

|
4
6
|
|
5
|
-
`figurate_numbers` is a Ruby module that implements `
|
7
|
+
`figurate_numbers` is a Ruby module that implements `239 infinite number sequences` based on the formulas from the wonderful book
|
6
8
|
> [Figurate Numbers (2012)](https://books.google.com.pe/books/about/Figurate_Numbers.html?id=ERS7CgAAQBAJ&redir_esc=y) by Elena Deza and Michel Deza.
|
7
9
|
|
8
10
|
This implementation uses the **Enumerator class** to deal with **INFINITE SEQUENCES**.
|
@@ -10,11 +12,11 @@ This implementation uses the **Enumerator class** to deal with **INFINITE SEQUEN
|
|
10
12
|
Following the order of the book, the methods are divided into 3 types according to the spatial dimension (see complete list below):
|
11
13
|
|
12
14
|
1. **Plane** figurate numbers implemented = `79`
|
13
|
-
2. **Space** figurate numbers implemented = `
|
14
|
-
3. **Multidimensional** figurate numbers implemented = `
|
15
|
+
2. **Space** figurate numbers implemented = `86`
|
16
|
+
3. **Multidimensional** figurate numbers implemented = `70`
|
15
17
|
4. **Zoo of figurate-related numbers** implemented = `6`
|
16
18
|
|
17
|
-
- [x] **TOTAL** = `
|
19
|
+
- [x] **TOTAL** = `241` infinite sequences of figurate numbers implemented
|
18
20
|
|
19
21
|
## Installation and use
|
20
22
|
|
@@ -170,7 +172,13 @@ end
|
|
170
172
|
<li><code>icosinonagonal_pyramidal_numbers</code></li>
|
171
173
|
<li><code>triacontagonal_pyramidal_numbers</code></li>
|
172
174
|
|
173
|
-
<li><code>
|
175
|
+
<li><code>triangular_tetrahedral_numbers [finite]</code></li>
|
176
|
+
<li><code>triangular_square_pyramidal_numbers [finite]</code></li>
|
177
|
+
<li><code>square_tetrahedral_numbers [finite]</code></li>
|
178
|
+
<li><code>square_square_pyramidal_numbers [finite]</code></li>
|
179
|
+
<li><code>tetrahedral_square_pyramidal_number [finite]</code></li>
|
180
|
+
|
181
|
+
<li><code>cubic_numbers = perfect_cube_numbers != hex_pyramidal_numbers (equality only by quantity) </code></li>
|
174
182
|
<li><code>tetrahedral_numbers</code></li>
|
175
183
|
<li><code>octahedral_numbers</code></li>
|
176
184
|
<li><code>dodecahedral_numbers</code></li>
|
@@ -186,7 +194,7 @@ end
|
|
186
194
|
<li><code>centered_tetrahedron_numbers = centered_tetrahedral_numbers</code></li>
|
187
195
|
<li><code>centered_square_pyramid_numbers = centered_pyramid_numbers</code></li>
|
188
196
|
<li><code>centered_mgonal_pyramid_numbers(m)</code></li>
|
189
|
-
<li><code>centered_pentagonal_pyramid_numbers !=
|
197
|
+
<li><code>centered_pentagonal_pyramid_numbers != centered_octahedron_numbers (equality only in quantity)</code></li>
|
190
198
|
<li><code>centered_hexagonal_pyramid_numbers</code></li>
|
191
199
|
<li><code>centered_heptagonal_pyramid_numbers</code></li>
|
192
200
|
<li><code>centered_octagonal_pyramid_numbers</code></li>
|
@@ -230,8 +238,8 @@ end
|
|
230
238
|
|
231
239
|
### 3. Multidimensional figurate numbers
|
232
240
|
<ol>
|
233
|
-
<li><code>pentatope_numbers =
|
234
|
-
<li><code>k_dimensional_hypertetrahedron_numbers(k) = k_hypertetrahedron_numbers(k) = regular_k_polytopic_numbers(k) =
|
241
|
+
<li><code>pentatope_numbers = hypertetrahedral_numbers = triangulotriangular_numbers</code></li>
|
242
|
+
<li><code>k_dimensional_hypertetrahedron_numbers(k) = k_hypertetrahedron_numbers(k) = regular_k_polytopic_numbers(k) = figurate_numbers_of_order_k(k)</code></li>
|
235
243
|
<li><code>five_dimensional_hypertetrahedron_numbers</code></li>
|
236
244
|
<li><code>six_dimensional_hypertetrahedron_numbers</code></li>
|
237
245
|
<li><code>biquadratic_numbers</code></li>
|
@@ -252,7 +260,7 @@ end
|
|
252
260
|
<li><code>ten_dimensional_hyperoctahedron_numbers</code></li>
|
253
261
|
<li><code>k_dimensional_hyperoctahedron_numbers(k) = k_cross_polytope_numbers(k)</code></li>
|
254
262
|
|
255
|
-
<li><code>four_dimensional_mgonal_pyramidal_numbers(m) =
|
263
|
+
<li><code>four_dimensional_mgonal_pyramidal_numbers(m) = mgonal_pyramidal_numbers_of_the_second_order(m)</code></li>
|
256
264
|
<li><code>four_dimensional_square_pyramidal_numbers</code></li>
|
257
265
|
<li><code>four_dimensional_pentagonal_pyramidal_numbers</code></li>
|
258
266
|
<li><code>four_dimensional_hexagonal_pyramidal_numbers</code></li>
|
@@ -263,8 +271,8 @@ end
|
|
263
271
|
<li><code>four_dimensional_hendecagonal_pyramidal_numbers</code></li>
|
264
272
|
<li><code>four_dimensional_dodecagonal_pyramidal_numbers</code></li>
|
265
273
|
|
266
|
-
<li><code>k_dimensional_mgonal_pyramidal_numbers(k, m) =
|
267
|
-
<li><code>five_dimensional_mgonal_pyramidal_numbers</code></li>
|
274
|
+
<li><code>k_dimensional_mgonal_pyramidal_numbers(k, m) = mgonal_pyramidal_numbers_of_the_k_2_th_order(k, m)</code></li>
|
275
|
+
<li><code>five_dimensional_mgonal_pyramidal_numbers(m)</code></li>
|
268
276
|
<li><code>five_dimensional_square_pyramidal_numbers</code></li>
|
269
277
|
<li><code>five_dimensional_pentagonal_pyramidal_numbers</code></li>
|
270
278
|
<li><code>five_dimensional_hexagonal_pyramidal_numbers</code></li>
|
@@ -303,9 +311,8 @@ end
|
|
303
311
|
<li><code>generalized_k_dimensional_mgonal_pyramidal_numbers(k, m, left_index = 0)</code></li>
|
304
312
|
<li><code>generalized_k_dimensional_centered_hypercube_numbers(k, left_index = 0)</code></li>
|
305
313
|
|
306
|
-
|
307
|
-
|
308
|
-
<li><code>generalized_k_dimensional_centered_hyperoctahedron_numbers(k, left_index = 0)</code></li> -->
|
314
|
+
<li><code>generalized_k_dimensional_centered_hypertetrahedron_numbers(k, left_index = 0)[provisional symmetry]</code></li>
|
315
|
+
<li><code>generalized_k_dimensional_centered_hyperoctahedron_numbers(k, left_index = 0)[provisional symmetry]</code></li>
|
309
316
|
|
310
317
|
<li><code>generalized_nexus_numbers(k, left_index = 0) [even or odd dimension only changes sign]</code></li>
|
311
318
|
</ol>
|
data/lib/figurate_numbers.rb
CHANGED
@@ -865,6 +865,50 @@ module FigurateNumbers
|
|
865
865
|
end
|
866
866
|
end
|
867
867
|
|
868
|
+
def triangular_tetrahedral_numbers
|
869
|
+
Enumerator.new do |y|
|
870
|
+
finite_set = [1, 10, 120, 1540, 7140]
|
871
|
+
(finite_set).each do |delta|
|
872
|
+
y << delta
|
873
|
+
end
|
874
|
+
end
|
875
|
+
end
|
876
|
+
|
877
|
+
def triangular_square_pyramidal_numbers
|
878
|
+
Enumerator.new do |y|
|
879
|
+
finite_set = [1, 55, 91, 208335]
|
880
|
+
(finite_set).each do |delta|
|
881
|
+
y << delta
|
882
|
+
end
|
883
|
+
end
|
884
|
+
end
|
885
|
+
|
886
|
+
def square_tetrahedral_numbers
|
887
|
+
Enumerator.new do |y|
|
888
|
+
finite_set = [1, 4, 19600]
|
889
|
+
(finite_set).each do |delta|
|
890
|
+
y << delta
|
891
|
+
end
|
892
|
+
end
|
893
|
+
end
|
894
|
+
|
895
|
+
def square_square_pyramidal_numbers
|
896
|
+
Enumerator.new do |y|
|
897
|
+
finite_set = [1, 4900]
|
898
|
+
(finite_set).each do |delta|
|
899
|
+
y << delta
|
900
|
+
end
|
901
|
+
end
|
902
|
+
end
|
903
|
+
|
904
|
+
def tetrahedral_square_pyramidal_number
|
905
|
+
Enumerator.new do |y|
|
906
|
+
finite_set = [1]
|
907
|
+
(finite_set).each do |delta|
|
908
|
+
y << delta
|
909
|
+
end
|
910
|
+
end
|
911
|
+
end
|
868
912
|
|
869
913
|
def cubic_numbers
|
870
914
|
Enumerator.new do |y|
|
@@ -874,6 +918,8 @@ module FigurateNumbers
|
|
874
918
|
end
|
875
919
|
end
|
876
920
|
|
921
|
+
alias_method :perfect_cube_numbers, :cubic_numbers
|
922
|
+
|
877
923
|
def tetrahedral_numbers
|
878
924
|
Enumerator.new do |y|
|
879
925
|
(1..Float::INFINITY).each do |delta|
|
@@ -1321,8 +1367,8 @@ module FigurateNumbers
|
|
1321
1367
|
end
|
1322
1368
|
end
|
1323
1369
|
|
1324
|
-
alias_method :
|
1325
|
-
alias_method :
|
1370
|
+
alias_method :hypertetrahedral_numbers, :pentatope_numbers
|
1371
|
+
alias_method :triangulotriangular_numbers, :pentatope_numbers
|
1326
1372
|
|
1327
1373
|
def rising_factorial(n, k)
|
1328
1374
|
t = 1
|
@@ -1342,7 +1388,7 @@ module FigurateNumbers
|
|
1342
1388
|
|
1343
1389
|
alias_method :k_hypertetrahedron_numbers, :k_dimensional_hypertetrahedron_numbers
|
1344
1390
|
alias_method :regular_k_polytopic_numbers, :k_dimensional_hypertetrahedron_numbers
|
1345
|
-
alias_method :
|
1391
|
+
alias_method :figurate_numbers_of_order_k, :k_dimensional_hypertetrahedron_numbers
|
1346
1392
|
|
1347
1393
|
|
1348
1394
|
def five_dimensional_hypertetrahedron_numbers
|
@@ -1529,7 +1575,7 @@ module FigurateNumbers
|
|
1529
1575
|
end
|
1530
1576
|
end
|
1531
1577
|
|
1532
|
-
alias_method :
|
1578
|
+
alias_method :mgonal_pyramidal_numbers_of_the_second_order, :four_dimensional_mgonal_pyramidal_numbers
|
1533
1579
|
|
1534
1580
|
def four_dimensional_square_pyramidal_numbers
|
1535
1581
|
Enumerator.new do |y|
|
@@ -1627,7 +1673,7 @@ module FigurateNumbers
|
|
1627
1673
|
end
|
1628
1674
|
end
|
1629
1675
|
|
1630
|
-
alias_method :
|
1676
|
+
alias_method :mgonal_pyramidal_numbers_of_the_k_2_th_order, :k_dimensional_mgonal_pyramidal_numbers
|
1631
1677
|
|
1632
1678
|
def five_dimensional_mgonal_pyramidal_numbers(m)
|
1633
1679
|
Enumerator.new do |y|
|
@@ -1863,7 +1909,6 @@ module FigurateNumbers
|
|
1863
1909
|
|
1864
1910
|
def ext_int_double_summation(k, n)
|
1865
1911
|
t = ((2**(1)) * binomial_coefficient(k, 1) * binomial_coefficient(1, 0))
|
1866
|
-
return (t + 1) if n == 1
|
1867
1912
|
a = 0
|
1868
1913
|
(1..(n - 1)).each do |j|
|
1869
1914
|
(0..(k - 1)).each do |i|
|
@@ -1995,6 +2040,48 @@ module FigurateNumbers
|
|
1995
2040
|
end
|
1996
2041
|
end
|
1997
2042
|
|
2043
|
+
def gen_acc_helper_centered_hypertetrahedron(k, n)
|
2044
|
+
a = 0
|
2045
|
+
(1..n.abs).each do |j|
|
2046
|
+
a += helper_centered_hypertetrahedron(k, j)
|
2047
|
+
end
|
2048
|
+
n > 0 ? a : -a
|
2049
|
+
end
|
2050
|
+
|
2051
|
+
private_class_method :gen_acc_helper_centered_hypertetrahedron
|
2052
|
+
|
2053
|
+
def generalized_k_dimensional_centered_hypertetrahedron_numbers(k, left_index = 0)
|
2054
|
+
Enumerator.new do |y|
|
2055
|
+
((-1 * left_index.abs)..Float::INFINITY).each do |n|
|
2056
|
+
y << gen_acc_helper_centered_hypertetrahedron(k, n)
|
2057
|
+
end
|
2058
|
+
end
|
2059
|
+
end
|
2060
|
+
|
2061
|
+
def gen_ext_int_double_summation(k, n)
|
2062
|
+
is_positive_n = n
|
2063
|
+
n = n.abs
|
2064
|
+
t = ((2) * binomial_coefficient(k, 1) * binomial_coefficient(1, 0))
|
2065
|
+
a = 0
|
2066
|
+
(1..(n - 1)).each do |j|
|
2067
|
+
(0..(k - 1)).each do |i|
|
2068
|
+
a += (2**(1 + i)) * binomial_coefficient(k, 1 + i) * binomial_coefficient(j, i)
|
2069
|
+
end
|
2070
|
+
end
|
2071
|
+
is_positive_n > 0 ? (1 + t + a) : (1 + t + a) * -1
|
2072
|
+
end
|
2073
|
+
|
2074
|
+
private_class_method :gen_ext_int_double_summation
|
2075
|
+
|
2076
|
+
def generalized_k_dimensional_centered_hyperoctahedron_numbers(k, left_index = 0)
|
2077
|
+
Enumerator.new do |y|
|
2078
|
+
((-1 * left_index.abs)..Float::INFINITY).each do |n|
|
2079
|
+
y << 1 if n == 1
|
2080
|
+
y << gen_ext_int_double_summation(k, n) if n != 0
|
2081
|
+
end
|
2082
|
+
end
|
2083
|
+
end
|
2084
|
+
|
1998
2085
|
def generalized_nexus_numbers(k, left_index = 0)
|
1999
2086
|
Enumerator.new do |y|
|
2000
2087
|
((-1 * left_index.abs)..Float::INFINITY).each do |delta|
|
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: figurate_numbers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
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-07-
|
11
|
+
date: 2024-07-17 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
|
-
description: Generates
|
13
|
+
description: Generates 241 infinite sequences of plane, space, and multidimensional
|
14
14
|
figurate numbers based on the book ‘Figurate Numbers’ (2012) by Elena Deza and Michel
|
15
15
|
Deza. The methods are implemented using the Enumerator class and are designed for
|
16
16
|
use in your math projects or in Sonic Pi.
|
@@ -23,14 +23,20 @@ extra_rdoc_files:
|
|
23
23
|
files:
|
24
24
|
- README.md
|
25
25
|
- lib/figurate_numbers.rb
|
26
|
-
homepage: https://github.com/edelveart/
|
26
|
+
homepage: https://github.com/edelveart/figurate_numbers
|
27
27
|
licenses:
|
28
28
|
- MIT
|
29
29
|
metadata:
|
30
30
|
documentation_uri: https://www.rubydoc.info/gems/figurate_numbers
|
31
|
-
|
31
|
+
source_code_uri: https://github.com/edelveart/figurate_numbers
|
32
|
+
homepage_uri: https://github.com/edelveart/figurate_numbers
|
32
33
|
post_install_message:
|
33
|
-
rdoc_options:
|
34
|
+
rdoc_options:
|
35
|
+
- "--main"
|
36
|
+
- README.md
|
37
|
+
- "--line-numbers"
|
38
|
+
- "--inline-source"
|
39
|
+
- "--quiet"
|
34
40
|
require_paths:
|
35
41
|
- lib
|
36
42
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -47,6 +53,6 @@ requirements: []
|
|
47
53
|
rubygems_version: 3.3.7
|
48
54
|
signing_key:
|
49
55
|
specification_version: 4
|
50
|
-
summary: Generates
|
51
|
-
numbers
|
56
|
+
summary: Generates 241 infinite sequences of plane, space, and multidimensional figurate
|
57
|
+
numbers
|
52
58
|
test_files: []
|