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.
@@ -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