figurate_numbers 1.3.0 → 1.4.1
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 +54 -395
- data/lib/figurate_numbers/multidimensional_figurate_numbers.rb +831 -0
- data/lib/figurate_numbers/p_adic_utils/p_adic_utils.rb +27 -0
- data/lib/figurate_numbers/plane_figurate_numbers.rb +653 -0
- data/lib/figurate_numbers/space_figurate_numbers.rb +712 -0
- data/lib/figurate_numbers/utils/utils.rb +38 -0
- data/lib/figurate_numbers/version.rb +5 -0
- data/lib/figurate_numbers.rb +11 -2229
- metadata +10 -7
@@ -0,0 +1,27 @@
|
|
1
|
+
# module PAdicUtils
|
2
|
+
# def self.potence(exponent)
|
3
|
+
# # Este método modificará el arreglo de números aplicando la potencia
|
4
|
+
# map { |num| num**exponent }
|
5
|
+
# end
|
6
|
+
# def self.p_adic_valuation(base_ten_number, base_p_number)
|
7
|
+
# m = 0
|
8
|
+
# return m if base_ten_number < 1
|
9
|
+
# while base_ten_number % (base_p_number ** m) == 0
|
10
|
+
# m += 1
|
11
|
+
# end
|
12
|
+
# m - 1
|
13
|
+
# end
|
14
|
+
|
15
|
+
# def self.to_p_adic_valuation(arr, p)
|
16
|
+
# arr.lazy.collect { |fignum| p_adic_valuation(fignum, p) }
|
17
|
+
# end
|
18
|
+
# end
|
19
|
+
|
20
|
+
|
21
|
+
# puts PAdicUtils.p_adic_valuation(96, 2)
|
22
|
+
# # export const pAdicValuation = (baseTenNumber: number, baseNumber: number): number => {
|
23
|
+
# # let index = 0;
|
24
|
+
# # if (baseTenNumber < 1) return index;
|
25
|
+
# # while (baseTenNumber % (baseNumber ** index) === 0) index++;
|
26
|
+
# # return index - 1;
|
27
|
+
# # }
|
@@ -0,0 +1,653 @@
|
|
1
|
+
module FigurateNumbers
|
2
|
+
# Module containing methods for generating 2D figurate number sequences.
|
3
|
+
module PlaneFigurateNumbers # rubocop:disable Metrics/ModuleLength
|
4
|
+
extend self
|
5
|
+
|
6
|
+
def polygonal(m)
|
7
|
+
Enumerator.new do |y|
|
8
|
+
(1..Float::INFINITY).each do |delta|
|
9
|
+
y << ((m - 2) * delta**2 - (m - 4) * delta) / 2
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def triangular
|
15
|
+
Enumerator.new do |y|
|
16
|
+
(1..Float::INFINITY).each do |delta|
|
17
|
+
y << (delta**2 + delta) / 2
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def square
|
23
|
+
Enumerator.new do |y|
|
24
|
+
(1..Float::INFINITY).each do |delta|
|
25
|
+
y << (2 * delta**2) / 2
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def pentagonal
|
31
|
+
Enumerator.new do |y|
|
32
|
+
(1..Float::INFINITY).each do |delta|
|
33
|
+
y << (3 * delta**2 - delta) / 2
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def hexagonal
|
39
|
+
Enumerator.new do |y|
|
40
|
+
(1..Float::INFINITY).each do |delta|
|
41
|
+
y << (4 * delta**2 - 2 * delta) / 2
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def heptagonal
|
47
|
+
Enumerator.new do |y|
|
48
|
+
(1..Float::INFINITY).each do |delta|
|
49
|
+
y << (5 * delta**2 - 3 * delta) / 2
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def octagonal
|
55
|
+
Enumerator.new do |y|
|
56
|
+
(1..Float::INFINITY).each do |delta|
|
57
|
+
y << (6 * delta**2 - 4 * delta) / 2
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def nonagonal
|
63
|
+
Enumerator.new do |y|
|
64
|
+
(1..Float::INFINITY).each do |delta|
|
65
|
+
y << (7 * delta**2 - 5 * delta) / 2
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def decagonal
|
71
|
+
Enumerator.new do |y|
|
72
|
+
(1..Float::INFINITY).each do |delta|
|
73
|
+
y << (8 * delta**2 - 6 * delta) / 2
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def hendecagonal
|
79
|
+
Enumerator.new do |y|
|
80
|
+
(1..Float::INFINITY).each do |delta|
|
81
|
+
y << (9 * delta**2 - 7 * delta) / 2
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def dodecagonal
|
87
|
+
Enumerator.new do |y|
|
88
|
+
(1..Float::INFINITY).each do |delta|
|
89
|
+
y << (10 * delta**2 - 8 * delta) / 2
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def tridecagonal
|
95
|
+
Enumerator.new do |y|
|
96
|
+
(1..Float::INFINITY).each do |delta|
|
97
|
+
y << (11 * delta**2 - 9 * delta) / 2
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def tetradecagonal
|
103
|
+
Enumerator.new do |y|
|
104
|
+
(1..Float::INFINITY).each do |delta|
|
105
|
+
y << (12 * delta**2 - 10 * delta) / 2
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def pentadecagonal
|
111
|
+
Enumerator.new do |y|
|
112
|
+
(1..Float::INFINITY).each do |delta|
|
113
|
+
y << (13 * delta**2 - 11 * delta) / 2
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def hexadecagonal
|
119
|
+
Enumerator.new do |y|
|
120
|
+
(1..Float::INFINITY).each do |delta|
|
121
|
+
y << (14 * delta**2 - 12 * delta) / 2
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def heptadecagonal
|
127
|
+
Enumerator.new do |y|
|
128
|
+
(1..Float::INFINITY).each do |delta|
|
129
|
+
y << (15 * delta**2 - 13 * delta) / 2
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def octadecagonal
|
135
|
+
Enumerator.new do |y|
|
136
|
+
(1..Float::INFINITY).each do |delta|
|
137
|
+
y << (16 * delta**2 - 14 * delta) / 2
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
def nonadecagonal
|
143
|
+
Enumerator.new do |y|
|
144
|
+
(1..Float::INFINITY).each do |delta|
|
145
|
+
y << (17 * delta**2 - 15 * delta) / 2
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
def icosagonal
|
151
|
+
Enumerator.new do |y|
|
152
|
+
(1..Float::INFINITY).each do |delta|
|
153
|
+
y << (18 * delta**2 - 16 * delta) / 2
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def icosihenagonal
|
159
|
+
Enumerator.new do |y|
|
160
|
+
(1..Float::INFINITY).each do |delta|
|
161
|
+
y << (19 * delta**2 - 17 * delta) / 2
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
def icosidigonal
|
167
|
+
Enumerator.new do |y|
|
168
|
+
(1..Float::INFINITY).each do |delta|
|
169
|
+
y << (20 * delta**2 - 18 * delta) / 2
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
def icositrigonal
|
175
|
+
Enumerator.new do |y|
|
176
|
+
(1..Float::INFINITY).each do |delta|
|
177
|
+
y << (21 * delta**2 - 19 * delta) / 2
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
def icositetragonal
|
183
|
+
Enumerator.new do |y|
|
184
|
+
(1..Float::INFINITY).each do |delta|
|
185
|
+
y << (22 * delta**2 - 20 * delta) / 2
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
def icosipentagonal
|
191
|
+
Enumerator.new do |y|
|
192
|
+
(1..Float::INFINITY).each do |delta|
|
193
|
+
y << (23 * delta**2 - 21 * delta) / 2
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
def icosihexagonal
|
199
|
+
Enumerator.new do |y|
|
200
|
+
(1..Float::INFINITY).each do |delta|
|
201
|
+
y << (24 * delta**2 - 22 * delta) / 2
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
def icosiheptagonal
|
207
|
+
Enumerator.new do |y|
|
208
|
+
(1..Float::INFINITY).each do |delta|
|
209
|
+
y << (25 * delta**2 - 23 * delta) / 2
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
def icosioctagonal
|
215
|
+
Enumerator.new do |y|
|
216
|
+
(1..Float::INFINITY).each do |delta|
|
217
|
+
y << (26 * delta**2 - 24 * delta) / 2
|
218
|
+
end
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
def icosinonagonal
|
223
|
+
Enumerator.new do |y|
|
224
|
+
(1..Float::INFINITY).each do |delta|
|
225
|
+
y << (27 * delta**2 - 25 * delta) / 2
|
226
|
+
end
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
def triacontagonal
|
231
|
+
Enumerator.new do |y|
|
232
|
+
(1..Float::INFINITY).each do |delta|
|
233
|
+
y << (28 * delta**2 - 26 * delta) / 2
|
234
|
+
end
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
def centered_triangular
|
239
|
+
Enumerator.new do |y|
|
240
|
+
(1..Float::INFINITY).each do |delta|
|
241
|
+
y << (3 * delta**2 - 3 * delta + 2) / 2
|
242
|
+
end
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
def centered_square
|
247
|
+
Enumerator.new do |y|
|
248
|
+
(1..Float::INFINITY).each do |delta|
|
249
|
+
y << 2 * delta**2 - 2 * delta + 1
|
250
|
+
end
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
alias diamond centered_square
|
255
|
+
|
256
|
+
def centered_pentagonal
|
257
|
+
Enumerator.new do |y|
|
258
|
+
(1..Float::INFINITY).each do |delta|
|
259
|
+
y << (5 * delta**2 - 5 * delta + 2) / 2
|
260
|
+
end
|
261
|
+
end
|
262
|
+
end
|
263
|
+
|
264
|
+
def centered_hexagonal
|
265
|
+
Enumerator.new do |y|
|
266
|
+
(1..Float::INFINITY).each do |delta|
|
267
|
+
y << 3 * delta**2 - 3 * delta + 1
|
268
|
+
end
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
def centered_heptagonal
|
273
|
+
Enumerator.new do |y|
|
274
|
+
(1..Float::INFINITY).each do |delta|
|
275
|
+
y << (7 * delta**2 - 7 * delta + 2) / 2
|
276
|
+
end
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
def centered_octagonal
|
281
|
+
Enumerator.new do |y|
|
282
|
+
(1..Float::INFINITY).each do |delta|
|
283
|
+
y << 4 * delta**2 - 4 * delta + 1
|
284
|
+
end
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
288
|
+
def centered_nonagonal
|
289
|
+
Enumerator.new do |y|
|
290
|
+
(1..Float::INFINITY).each do |delta|
|
291
|
+
y << (9 * delta**2 - 9 * delta + 2) / 2
|
292
|
+
end
|
293
|
+
end
|
294
|
+
end
|
295
|
+
|
296
|
+
def centered_decagonal
|
297
|
+
Enumerator.new do |y|
|
298
|
+
(1..Float::INFINITY).each do |delta|
|
299
|
+
y << 5 * delta**2 - 5 * delta + 1
|
300
|
+
end
|
301
|
+
end
|
302
|
+
end
|
303
|
+
|
304
|
+
def centered_hendecagonal
|
305
|
+
Enumerator.new do |y|
|
306
|
+
(1..Float::INFINITY).each do |delta|
|
307
|
+
y << (11 * delta**2 - 11 * delta + 2) / 2
|
308
|
+
end
|
309
|
+
end
|
310
|
+
end
|
311
|
+
|
312
|
+
def centered_dodecagonal
|
313
|
+
Enumerator.new do |y|
|
314
|
+
(1..Float::INFINITY).each do |delta|
|
315
|
+
y << 6 * delta**2 - 6 * delta + 1
|
316
|
+
end
|
317
|
+
end
|
318
|
+
end
|
319
|
+
|
320
|
+
alias star centered_dodecagonal
|
321
|
+
|
322
|
+
def centered_tridecagonal
|
323
|
+
Enumerator.new do |y|
|
324
|
+
(1..Float::INFINITY).each do |delta|
|
325
|
+
y << (13 * delta**2 - 13 * delta + 2) / 2
|
326
|
+
end
|
327
|
+
end
|
328
|
+
end
|
329
|
+
|
330
|
+
def centered_tetradecagonal
|
331
|
+
Enumerator.new do |y|
|
332
|
+
(1..Float::INFINITY).each do |delta|
|
333
|
+
y << 7 * delta**2 - 7 * delta + 1
|
334
|
+
end
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
338
|
+
def centered_pentadecagonal
|
339
|
+
Enumerator.new do |y|
|
340
|
+
(1..Float::INFINITY).each do |delta|
|
341
|
+
y << (15 * delta**2 - 15 * delta + 2) / 2
|
342
|
+
end
|
343
|
+
end
|
344
|
+
end
|
345
|
+
|
346
|
+
def centered_hexadecagonal
|
347
|
+
Enumerator.new do |y|
|
348
|
+
(1..Float::INFINITY).each do |delta|
|
349
|
+
y << 8 * delta**2 - 8 * delta + 1
|
350
|
+
end
|
351
|
+
end
|
352
|
+
end
|
353
|
+
|
354
|
+
def centered_heptadecagonal
|
355
|
+
Enumerator.new do |y|
|
356
|
+
(1..Float::INFINITY).each do |delta|
|
357
|
+
y << (17 * delta**2 - 17 * delta + 2) / 2
|
358
|
+
end
|
359
|
+
end
|
360
|
+
end
|
361
|
+
|
362
|
+
def centered_octadecagonal
|
363
|
+
Enumerator.new do |y|
|
364
|
+
(1..Float::INFINITY).each do |delta|
|
365
|
+
y << 9 * delta**2 - 9 * delta + 1
|
366
|
+
end
|
367
|
+
end
|
368
|
+
end
|
369
|
+
|
370
|
+
def centered_nonadecagonal
|
371
|
+
Enumerator.new do |y|
|
372
|
+
(1..Float::INFINITY).each do |delta|
|
373
|
+
y << (19 * delta**2 - 19 * delta + 2) / 2
|
374
|
+
end
|
375
|
+
end
|
376
|
+
end
|
377
|
+
|
378
|
+
def centered_icosagonal
|
379
|
+
Enumerator.new do |y|
|
380
|
+
(1..Float::INFINITY).each do |delta|
|
381
|
+
y << 10 * delta**2 - 10 * delta + 1
|
382
|
+
end
|
383
|
+
end
|
384
|
+
end
|
385
|
+
|
386
|
+
def centered_icosihenagonal
|
387
|
+
Enumerator.new do |y|
|
388
|
+
(1..Float::INFINITY).each do |delta|
|
389
|
+
y << (21 * delta**2 - 21 * delta + 2) / 2
|
390
|
+
end
|
391
|
+
end
|
392
|
+
end
|
393
|
+
|
394
|
+
def centered_icosidigonal
|
395
|
+
Enumerator.new do |y|
|
396
|
+
(1..Float::INFINITY).each do |delta|
|
397
|
+
y << 11 * delta**2 - 11 * delta + 1
|
398
|
+
end
|
399
|
+
end
|
400
|
+
end
|
401
|
+
|
402
|
+
def centered_icositrigonal
|
403
|
+
Enumerator.new do |y|
|
404
|
+
(1..Float::INFINITY).each do |delta|
|
405
|
+
y << (23 * delta**2 - 23 * delta + 2) / 2
|
406
|
+
end
|
407
|
+
end
|
408
|
+
end
|
409
|
+
|
410
|
+
def centered_icositetragonal
|
411
|
+
Enumerator.new do |y|
|
412
|
+
(1..Float::INFINITY).each do |delta|
|
413
|
+
y << 12 * delta**2 - 12 * delta + 1
|
414
|
+
end
|
415
|
+
end
|
416
|
+
end
|
417
|
+
|
418
|
+
def centered_icosipentagonal
|
419
|
+
Enumerator.new do |y|
|
420
|
+
(1..Float::INFINITY).each do |delta|
|
421
|
+
y << (25 * delta**2 - 25 * delta + 2) / 2
|
422
|
+
end
|
423
|
+
end
|
424
|
+
end
|
425
|
+
|
426
|
+
def centered_icosihexagonal
|
427
|
+
Enumerator.new do |y|
|
428
|
+
(1..Float::INFINITY).each do |delta|
|
429
|
+
y << (13 * delta**2 - 13 * delta + 1)
|
430
|
+
end
|
431
|
+
end
|
432
|
+
end
|
433
|
+
|
434
|
+
def centered_icosiheptagonal
|
435
|
+
Enumerator.new do |y|
|
436
|
+
(1..Float::INFINITY).each do |delta|
|
437
|
+
y << (27 * delta**2 - 27 * delta + 2) / 2
|
438
|
+
end
|
439
|
+
end
|
440
|
+
end
|
441
|
+
|
442
|
+
def centered_icosioctagonal
|
443
|
+
Enumerator.new do |y|
|
444
|
+
(1..Float::INFINITY).each do |delta|
|
445
|
+
y << (14 * delta**2 - 14 * delta + 1)
|
446
|
+
end
|
447
|
+
end
|
448
|
+
end
|
449
|
+
|
450
|
+
def centered_icosinonagonal
|
451
|
+
Enumerator.new do |y|
|
452
|
+
(1..Float::INFINITY).each do |delta|
|
453
|
+
y << (29 * delta**2 - 29 * delta + 2) / 2
|
454
|
+
end
|
455
|
+
end
|
456
|
+
end
|
457
|
+
|
458
|
+
def centered_triacontagonal
|
459
|
+
Enumerator.new do |y|
|
460
|
+
(1..Float::INFINITY).each do |delta|
|
461
|
+
y << (15 * delta**2 - 15 * delta + 1)
|
462
|
+
end
|
463
|
+
end
|
464
|
+
end
|
465
|
+
|
466
|
+
def centered_mgonal(m)
|
467
|
+
Enumerator.new do |y|
|
468
|
+
(1..Float::INFINITY).each do |delta|
|
469
|
+
y << (m * delta**2 - m * delta + 2) / 2
|
470
|
+
end
|
471
|
+
end
|
472
|
+
end
|
473
|
+
|
474
|
+
def pronic
|
475
|
+
Enumerator.new do |y|
|
476
|
+
(1..Float::INFINITY).each do |delta|
|
477
|
+
y << delta * (delta + 1)
|
478
|
+
end
|
479
|
+
end
|
480
|
+
end
|
481
|
+
|
482
|
+
alias heteromecic pronic
|
483
|
+
alias oblong pronic
|
484
|
+
|
485
|
+
def polite
|
486
|
+
Enumerator.new do |y|
|
487
|
+
(1..Float::INFINITY).each do |delta|
|
488
|
+
y << delta + Math.log(delta + Math.log(delta, 2), 2).floor
|
489
|
+
end
|
490
|
+
end
|
491
|
+
end
|
492
|
+
|
493
|
+
def impolite
|
494
|
+
Enumerator.new do |y|
|
495
|
+
(0..Float::INFINITY).each do |delta|
|
496
|
+
y << 2**delta
|
497
|
+
end
|
498
|
+
end
|
499
|
+
end
|
500
|
+
|
501
|
+
def cross
|
502
|
+
Enumerator.new do |y|
|
503
|
+
(1..Float::INFINITY).each do |delta|
|
504
|
+
y << 4 * delta - 3
|
505
|
+
end
|
506
|
+
end
|
507
|
+
end
|
508
|
+
|
509
|
+
def aztec_diamond
|
510
|
+
Enumerator.new do |y|
|
511
|
+
(1..Float::INFINITY).each do |delta|
|
512
|
+
y << (2 * delta) * (delta + 1)
|
513
|
+
end
|
514
|
+
end
|
515
|
+
end
|
516
|
+
|
517
|
+
def polygram(m)
|
518
|
+
Enumerator.new do |y|
|
519
|
+
(1..Float::INFINITY).each do |delta|
|
520
|
+
y << m * delta**2 - m * delta + 1
|
521
|
+
end
|
522
|
+
end
|
523
|
+
end
|
524
|
+
|
525
|
+
alias centered_star_polygonal polygram
|
526
|
+
|
527
|
+
def pentagram
|
528
|
+
Enumerator.new do |y|
|
529
|
+
(1..Float::INFINITY).each do |delta|
|
530
|
+
y << 5 * delta**2 - 5 * delta + 1
|
531
|
+
end
|
532
|
+
end
|
533
|
+
end
|
534
|
+
|
535
|
+
def gnomic
|
536
|
+
Enumerator.new do |y|
|
537
|
+
(1..Float::INFINITY).each do |delta|
|
538
|
+
y << 2 * delta - 1
|
539
|
+
end
|
540
|
+
end
|
541
|
+
end
|
542
|
+
|
543
|
+
def truncated_triangular
|
544
|
+
Enumerator.new do |y|
|
545
|
+
(1..Float::INFINITY).each do |delta|
|
546
|
+
y << (3 * delta**2) - (3 * delta) + 1
|
547
|
+
end
|
548
|
+
end
|
549
|
+
end
|
550
|
+
|
551
|
+
def truncated_square
|
552
|
+
Enumerator.new do |y|
|
553
|
+
(1..Float::INFINITY).each do |delta|
|
554
|
+
y << (7 * delta**2) - (10 * delta) + 4
|
555
|
+
end
|
556
|
+
end
|
557
|
+
end
|
558
|
+
|
559
|
+
def truncated_pronic
|
560
|
+
Enumerator.new do |y|
|
561
|
+
(1..Float::INFINITY).each do |delta|
|
562
|
+
y << (7 * delta**2) - (7 * delta) + 2
|
563
|
+
end
|
564
|
+
end
|
565
|
+
end
|
566
|
+
|
567
|
+
def truncated_centered_pol(m)
|
568
|
+
Enumerator.new do |y|
|
569
|
+
(1..Float::INFINITY).each do |delta|
|
570
|
+
y << 1 + (m * (7 * delta**2 - 11 * delta + 4)) / 2
|
571
|
+
end
|
572
|
+
end
|
573
|
+
end
|
574
|
+
|
575
|
+
alias truncated_centered_mgonal truncated_centered_pol
|
576
|
+
|
577
|
+
def truncated_centered_triangular
|
578
|
+
Enumerator.new do |y|
|
579
|
+
(1..Float::INFINITY).each do |delta|
|
580
|
+
y << (21 * delta**2 - 33 * delta) / 2 + 7
|
581
|
+
end
|
582
|
+
end
|
583
|
+
end
|
584
|
+
|
585
|
+
def truncated_centered_square
|
586
|
+
Enumerator.new do |y|
|
587
|
+
(1..Float::INFINITY).each do |delta|
|
588
|
+
y << 14 * delta**2 - 22 * delta + 9
|
589
|
+
end
|
590
|
+
end
|
591
|
+
end
|
592
|
+
|
593
|
+
def truncated_centered_pentagonal
|
594
|
+
Enumerator.new do |y|
|
595
|
+
(1..Float::INFINITY).each do |delta|
|
596
|
+
y << (35 * delta**2 - 55 * delta) / 2 + 11
|
597
|
+
end
|
598
|
+
end
|
599
|
+
end
|
600
|
+
|
601
|
+
def truncated_centered_hexagonal
|
602
|
+
Enumerator.new do |y|
|
603
|
+
(1..Float::INFINITY).each do |delta|
|
604
|
+
y << 21 * delta**2 - 33 * delta + 13
|
605
|
+
end
|
606
|
+
end
|
607
|
+
end
|
608
|
+
|
609
|
+
alias truncated_hex truncated_centered_hexagonal
|
610
|
+
|
611
|
+
def generalized_mgonal(m, left_index = 0)
|
612
|
+
Enumerator.new do |y|
|
613
|
+
((-1 * left_index.abs)..Float::INFINITY).each do |delta|
|
614
|
+
y << (delta * ((m - 2) * delta - m + 4)) / 2
|
615
|
+
end
|
616
|
+
end
|
617
|
+
end
|
618
|
+
|
619
|
+
def generalized_pentagonal(left_index = 0)
|
620
|
+
m = 5
|
621
|
+
Enumerator.new do |y|
|
622
|
+
((-1 * left_index.abs)..Float::INFINITY).each do |delta|
|
623
|
+
y << (delta * ((m - 2) * delta - m + 4)) / 2
|
624
|
+
end
|
625
|
+
end
|
626
|
+
end
|
627
|
+
|
628
|
+
def generalized_hexagonal(left_index = 0)
|
629
|
+
m = 6
|
630
|
+
Enumerator.new do |y|
|
631
|
+
((-1 * left_index.abs)..Float::INFINITY).each do |delta|
|
632
|
+
y << (delta * ((m - 2) * delta - m + 4)) / 2
|
633
|
+
end
|
634
|
+
end
|
635
|
+
end
|
636
|
+
|
637
|
+
def generalized_centered_pol(m, left_index = 0)
|
638
|
+
Enumerator.new do |y|
|
639
|
+
((-1 * left_index)..Float::INFINITY).each do |delta|
|
640
|
+
y << (m * delta**2 - m * delta + 2) / 2
|
641
|
+
end
|
642
|
+
end
|
643
|
+
end
|
644
|
+
|
645
|
+
def generalized_pronic(left_index = 0)
|
646
|
+
Enumerator.new do |y|
|
647
|
+
((-1 * left_index.abs)..Float::INFINITY).each do |delta|
|
648
|
+
y << delta * (delta + 1)
|
649
|
+
end
|
650
|
+
end
|
651
|
+
end
|
652
|
+
end
|
653
|
+
end
|