Skip to content

Commit c0517a3

Browse files
authored
Add new OEIS sequences: A000124, A000125, A000213, A000288 (#362)
1 parent f871b97 commit c0517a3

9 files changed

+223
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using System.Linq;
2+
using System.Numerics;
3+
using Algorithms.Sequences;
4+
using FluentAssertions;
5+
using NUnit.Framework;
6+
7+
namespace Algorithms.Tests.Sequences;
8+
9+
public class CakeNumbersSequenceTests
10+
{
11+
[Test]
12+
public void First46ElementsCorrect()
13+
{
14+
var sequence = new CakeNumbersSequence().Sequence.Take(46);
15+
sequence.SequenceEqual(new BigInteger[]
16+
{
17+
1, 2, 4, 8, 15, 26, 42, 64, 93, 130,
18+
176, 232, 299, 378, 470, 576, 697, 834, 988, 1160,
19+
1351, 1562, 1794, 2048, 2325, 2626, 2952, 3304, 3683, 4090,
20+
4526, 4992, 5489, 6018, 6580, 7176, 7807, 8474, 9178, 9920,
21+
10701, 11522, 12384, 13288, 14235, 15226
22+
})
23+
.Should().BeTrue();
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System.Linq;
2+
using System.Numerics;
3+
using Algorithms.Sequences;
4+
using FluentAssertions;
5+
using NUnit.Framework;
6+
7+
namespace Algorithms.Tests.Sequences;
8+
9+
public class CentralPolygonalNumbersSequenceTests
10+
{
11+
[Test]
12+
public void First53ElementsCorrect()
13+
{
14+
var sequence = new CentralPolygonalNumbersSequence().Sequence.Take(53);
15+
sequence.SequenceEqual(new BigInteger[]
16+
{
17+
1, 2, 4, 7, 11, 16, 22, 29, 37, 46, 56, 67, 79, 92, 106, 121, 137, 154, 172, 191, 211, 232, 254,
18+
277, 301, 326, 352, 379, 407, 436, 466, 497, 529, 562, 596, 631, 667, 704, 742, 781, 821, 862, 904,
19+
947, 991, 1036, 1082, 1129, 1177, 1226, 1276, 1327, 1379,
20+
})
21+
.Should().BeTrue();
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System.Linq;
2+
using System.Numerics;
3+
using Algorithms.Sequences;
4+
using FluentAssertions;
5+
using NUnit.Framework;
6+
7+
namespace Algorithms.Tests.Sequences;
8+
9+
public class TetranacciNumbersSequenceTests
10+
{
11+
[Test]
12+
public void First35ElementsCorrect()
13+
{
14+
var sequence = new TetranacciNumbersSequence().Sequence.Take(35);
15+
sequence.SequenceEqual(new BigInteger[]
16+
{
17+
1, 1, 1, 1, 4, 7, 13, 25, 49, 94, 181, 349, 673, 1297, 2500, 4819, 9289, 17905, 34513, 66526, 128233,
18+
247177, 476449, 918385, 1770244, 3412255, 6577333, 12678217, 24438049, 47105854, 90799453, 175021573,
19+
337364929, 650291809, 1253477764,
20+
})
21+
.Should().BeTrue();
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System.Linq;
2+
using System.Numerics;
3+
using Algorithms.Sequences;
4+
using FluentAssertions;
5+
using NUnit.Framework;
6+
7+
namespace Algorithms.Tests.Sequences;
8+
9+
public class TribonacciNumbersSequenceTests
10+
{
11+
[Test]
12+
public void First37ElementsCorrect()
13+
{
14+
var sequence = new TribonacciNumbersSequence().Sequence.Take(37);
15+
sequence.SequenceEqual(new BigInteger[]
16+
{
17+
1, 1, 1, 3, 5, 9, 17, 31, 57, 105, 193, 355, 653, 1201, 2209, 4063, 7473, 13745, 25281, 46499, 85525,
18+
157305, 289329, 532159, 978793, 1800281, 3311233, 6090307, 11201821, 20603361, 37895489, 69700671,
19+
128199521, 235795681, 433695873, 797691075, 1467182629,
20+
})
21+
.Should().BeTrue();
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using System.Collections.Generic;
2+
using System.Numerics;
3+
4+
namespace Algorithms.Sequences;
5+
6+
/// <summary>
7+
/// <para>
8+
/// Cake numbers: maximal number of pieces resulting from n planar cuts through a cube
9+
/// (or cake): C(n+1,3) + n + 1.
10+
/// </para>
11+
/// <para>
12+
/// OEIS: https://oeis.org/A000125.
13+
/// </para>
14+
/// </summary>
15+
public class CakeNumbersSequence : ISequence
16+
{
17+
public IEnumerable<BigInteger> Sequence
18+
{
19+
get
20+
{
21+
var n = new BigInteger(0);
22+
while (true)
23+
{
24+
var next = (BigInteger.Pow(n, 3) + 5 * n + 6) / 6;
25+
n++;
26+
yield return next;
27+
}
28+
}
29+
}
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using System.Collections.Generic;
2+
using System.Numerics;
3+
4+
namespace Algorithms.Sequences;
5+
6+
/// <summary>
7+
/// <para>
8+
/// Central polygonal numbers (the Lazy Caterer's sequence): n(n+1)/2 + 1; or, maximal number of pieces
9+
/// formed when slicing a pancake with n cuts.
10+
/// </para>
11+
/// <para>
12+
/// OEIS: https://oeis.org/A000124.
13+
/// </para>
14+
/// </summary>
15+
public class CentralPolygonalNumbersSequence : ISequence
16+
{
17+
public IEnumerable<BigInteger> Sequence
18+
{
19+
get
20+
{
21+
var n = new BigInteger(0);
22+
while (true)
23+
{
24+
var next = n * (n + 1) / 2 + 1;
25+
n++;
26+
yield return next;
27+
}
28+
}
29+
}
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using System.Numerics;
4+
5+
namespace Algorithms.Sequences;
6+
7+
/// <summary>
8+
/// <para>
9+
/// Tetranacci numbers: a(n) = a(n-1) + a(n-2) + a(n-3) + a(n-4) with a(0) = a(1) = a(2) = a(3) = 1.
10+
/// </para>
11+
/// <para>
12+
/// OEIS: https://oeis.org/A000288.
13+
/// </para>
14+
/// </summary>
15+
public class TetranacciNumbersSequence : ISequence
16+
{
17+
public IEnumerable<BigInteger> Sequence
18+
{
19+
get
20+
{
21+
var buffer = Enumerable.Repeat(BigInteger.One, 4).ToArray();
22+
while (true)
23+
{
24+
yield return buffer[0];
25+
var next = buffer[0] + buffer[1] + buffer[2] + buffer[3];
26+
buffer[0] = buffer[1];
27+
buffer[1] = buffer[2];
28+
buffer[2] = buffer[3];
29+
buffer[3] = next;
30+
}
31+
}
32+
}
33+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using System.Numerics;
4+
5+
namespace Algorithms.Sequences;
6+
7+
/// <summary>
8+
/// <para>
9+
/// Tribonacci numbers: a(n) = a(n-1) + a(n-2) + a(n-3) with a(0)=a(1)=a(2)=1.
10+
/// </para>
11+
/// <para>
12+
/// OEIS: https://oeis.org/A000213.
13+
/// </para>
14+
/// </summary>
15+
public class TribonacciNumbersSequence : ISequence
16+
{
17+
public IEnumerable<BigInteger> Sequence
18+
{
19+
get
20+
{
21+
var buffer = Enumerable.Repeat(BigInteger.One, 4).ToArray();
22+
while (true)
23+
{
24+
yield return buffer[0];
25+
var next = buffer[0] + buffer[1] + buffer[2];
26+
buffer[0] = buffer[1];
27+
buffer[1] = buffer[2];
28+
buffer[2] = next;
29+
}
30+
}
31+
}
32+
}

README.md

+4
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,12 @@ find more than one implementation for the same objective but using different alg
137137
* [A000079 Powers of 2](./Algorithms/Sequences/PowersOf2Sequence.cs)
138138
* [A000108 Catalan](./Algorithms/Sequences/CatalanSequence.cs)
139139
* [A000120 1's Counting](./Algorithms/Sequences/OnesCountingSequence.cs)
140+
* [A000124 Central Polygonal Numbers](./Algorithms/Sequences/CentralPolygonalNumbersSequence.cs)
141+
* [A000125 Cake Numbers](./Algorithms/Sequences/CakeNumbersSequence.cs)
140142
* [A000142 Factorial](./Algorithms/Sequences/FactorialSequence.cs)
143+
* [A000213 Tribonacci Numbers](./Algorithms/Sequences/TribonacciNumbersSequence.cs)
141144
* [A000215 Fermat Numbers](./Algorithms/Sequences/FermatNumbersSequence.cs)
145+
* [A000288 Tetranacci Numbers](./Algorithms/Sequences/TetranacciNumbersSequence.cs)
142146
* [A000290 Squares](./Algorithms/Sequences/SquaresSequence.cs)
143147
* [A000292 Tetrahedral numbers](./Algorithms/Sequences/TetrahedralSequence.cs)
144148
* [A000578 Cubes](./Algorithms/Sequences/CubesSequence.cs)

0 commit comments

Comments
 (0)