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