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