Skip to content

Commit

Permalink
Separate sequences (TheAlgorithms#121)
Browse files Browse the repository at this point in the history
* Move Fibonacci sequence to separate namespace

* Update README.md
  • Loading branch information
siriak authored Oct 20, 2019
1 parent f2d1ac0 commit dcdeda6
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 33 deletions.
18 changes: 18 additions & 0 deletions Algorithms.Tests/Sequences/FibonacciSequenceTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using System.Linq;
using System.Numerics;
using Algorithms.Sequences;
using NUnit.Framework;

namespace Algorithms.Tests.Sequences
{
public class FibonacciSequenceTests
{
[Test]
public void First10ElementsCorrect()
{
var sequence = new FibonacciSequence().Sequence;

Assert.AreEqual(new BigInteger[] { 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 }, sequence.Take(10));
}
}
}
32 changes: 0 additions & 32 deletions Algorithms/Numeric/Fibonacci.cs

This file was deleted.

40 changes: 40 additions & 0 deletions Algorithms/Sequences/FibonacciSequence.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
using System.Collections.Generic;
using System.Numerics;

namespace Algorithms.Sequences
{
/// <summary>
/// <para>
/// Fibonacci sequence.
/// </para>
/// <para>
/// Wikipedia: https://wikipedia.org/wiki/Fibonacci_number.
/// </para>
/// <para>
/// OEIS: https://oeis.org/A000045.
/// </para>
/// </summary>
public class FibonacciSequence : ISequence
{
/// <summary>
/// Gets Fibonacci sequence.
/// </summary>
public IEnumerable<BigInteger> Sequence
{
get
{
yield return 0;
yield return 1;
BigInteger previous = 0;
BigInteger current = 1;
while (true)
{
var next = previous + current;
previous = current;
current = next;
yield return next;
}
}
}
}
}
16 changes: 16 additions & 0 deletions Algorithms/Sequences/ISequence.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using System.Collections.Generic;
using System.Numerics;

namespace Algorithms.Sequences
{
/// <summary>
/// Common interface for all integer sequences.
/// </summary>
public interface ISequence
{
/// <summary>
/// Gets sequence as enumerable.
/// </summary>
IEnumerable<BigInteger> Sequence { get; }
}
}
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ This repository contains algorithms and data structures implemented in C# for ed
* [Euclidean GCD](./Algorithms/Numeric/GreatestCommonDivisor/EuclideanGreatestCommonDivisorFinder.cs)
* [Binary GCD](./Algorithms/Numeric/GreatestCommonDivisor/BinaryGreatestCommonDivisorFinder.cs)
* [Gauss-Jordan Elimination](./Algorithms/Numeric/GaussJordanElimination.cs)
* [Fibonacci Sequence](./Algorithms/Numeric/Fibonacci.cs)
* [Searches](./Algorithms/Search/)
* [A-Star](./Algorithms/Search/AStar/)
* [Binary](./Algorithms/Search/BinarySearcher.cs)
Expand All @@ -50,6 +49,8 @@ This repository contains algorithms and data structures implemented in C# for ed
* [Radix](./Algorithms/Sorters/Integer/RadixSorter.cs)
* [String](./Algorithms/Sorters/String)
* [MSD Radix](./Algorithms/Sorters/String/MsdRadixStringSorter.cs)
* [Sequences](./Algorithms/Sequences/)
* [A000045 Fibonacci](./Algorithms/Sequences/FibonacciSequence.cs)
* [String](./Algorithms/Strings/)
* [Longest Consecutive Character](./Algorithms/Strings/GeneralStringAlgorithms.cs)
* [Palindrome Checker](./Algorithms/Strings/palindrome.cs)
Expand Down

0 comments on commit dcdeda6

Please sign in to comment.