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