Initial commit
This commit is contained in:
commit
b087f272b4
26 changed files with 5345 additions and 0 deletions
56
Numbers/NumberFactory/AbstractNumbers.cs
Normal file
56
Numbers/NumberFactory/AbstractNumbers.cs
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
using System.Collections;
|
||||
|
||||
namespace Numbers.NumberFactory;
|
||||
|
||||
/// <summary>
|
||||
/// Base class for <see cref="INumbers" /> implementations
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="INumbers" />
|
||||
public abstract class AbstractNumbers : INumbers
|
||||
{
|
||||
// TODO
|
||||
// private readonly List<long> _list;
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of <see cref="AbstractNumbers" /> with the given bounds.
|
||||
/// Will generate the appropriate numbers based on the implementation of <see cref="PickNumber" />.
|
||||
/// </summary>
|
||||
/// <param name="lowerBound">Lower bound of the number range</param>
|
||||
/// <param name="upperBound">Upper bound of the number range</param>
|
||||
protected AbstractNumbers(long lowerBound, long upperBound)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
public long this[int index]
|
||||
{
|
||||
get
|
||||
{
|
||||
// TODO
|
||||
return -1L;
|
||||
}
|
||||
}
|
||||
|
||||
public long LowerBound { get; }
|
||||
|
||||
public long UpperBound { get; }
|
||||
|
||||
public int Length => -1; // TODO
|
||||
|
||||
public IEnumerator<long> GetEnumerator() => null!; // TODO
|
||||
|
||||
IEnumerator IEnumerable.GetEnumerator() => null!; // TODO
|
||||
|
||||
private void GenerateNumbers()
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether the given number should be picked based on the task of a
|
||||
/// specific <see cref="INumbers" /> implementation
|
||||
/// </summary>
|
||||
/// <param name="number">Number to check</param>
|
||||
/// <returns>True if the number should be picked; false otherwise</returns>
|
||||
protected abstract bool PickNumber(long number);
|
||||
}
|
||||
33
Numbers/NumberFactory/Factory.cs
Normal file
33
Numbers/NumberFactory/Factory.cs
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
using Numbers.NumberFactory.NumberImpls;
|
||||
|
||||
namespace Numbers.NumberFactory;
|
||||
|
||||
/// <summary>
|
||||
/// A factory that creates <see cref="INumbers" /> instances
|
||||
/// </summary>
|
||||
public static class Factory
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates an <see cref="INumbers" /> instance for the given <paramref name="type" />
|
||||
/// </summary>
|
||||
/// <param name="type">Number factory type to create</param>
|
||||
/// <param name="lowerBound">Lower bound of the number range</param>
|
||||
/// <param name="upperBound">Upper bound of the number range</param>
|
||||
/// <returns>Appropriate instance or null if requested type is unknown</returns>
|
||||
public static INumbers Create(NumberType type, long lowerBound, long upperBound)
|
||||
{
|
||||
// TODO
|
||||
return null!;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Possible number factory types
|
||||
/// </summary>
|
||||
public enum NumberType
|
||||
{
|
||||
Even,
|
||||
Odd,
|
||||
Square,
|
||||
Prime
|
||||
}
|
||||
29
Numbers/NumberFactory/INumbers.cs
Normal file
29
Numbers/NumberFactory/INumbers.cs
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
namespace Numbers.NumberFactory;
|
||||
|
||||
/// <summary>
|
||||
/// Defines the ability to pick numbers which fulfill a certain condition from within a specified range
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="IEnumerable{T}" />
|
||||
public interface INumbers : IEnumerable<long>
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the n-th matching number in the range
|
||||
/// </summary>
|
||||
/// <param name="index">Index of the n-th number</param>
|
||||
public long this[int index] { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the lower bound of the number range
|
||||
/// </summary>
|
||||
public long LowerBound { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the upper bound of the number range
|
||||
/// </summary>
|
||||
public long UpperBound { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the amount of (filtered) numbers in the range
|
||||
/// </summary>
|
||||
public int Length { get; }
|
||||
}
|
||||
10
Numbers/NumberFactory/NumberImpls/EvenNumbers.cs
Normal file
10
Numbers/NumberFactory/NumberImpls/EvenNumbers.cs
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
namespace Numbers.NumberFactory.NumberImpls;
|
||||
|
||||
/// <summary>
|
||||
/// An <see cref="AbstractNumbers" /> implementation that picks even numbers
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="AbstractNumbers" />
|
||||
public sealed class EvenNumbers(long lowerBound, long upperBound) : AbstractNumbers(lowerBound, upperBound)
|
||||
{
|
||||
protected override bool PickNumber(long number) => false; // TODO
|
||||
}
|
||||
10
Numbers/NumberFactory/NumberImpls/OddNumbers.cs
Normal file
10
Numbers/NumberFactory/NumberImpls/OddNumbers.cs
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
namespace Numbers.NumberFactory.NumberImpls;
|
||||
|
||||
/// <summary>
|
||||
/// An <see cref="AbstractNumbers" /> implementation that picks odd numbers
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="AbstractNumbers" />
|
||||
public sealed class OddNumbers(long lowerBound, long upperBound) : AbstractNumbers(lowerBound, upperBound)
|
||||
{
|
||||
protected override bool PickNumber(long number) => false; // TODO
|
||||
}
|
||||
10
Numbers/NumberFactory/NumberImpls/PrimeNumbers.cs
Normal file
10
Numbers/NumberFactory/NumberImpls/PrimeNumbers.cs
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
namespace Numbers.NumberFactory.NumberImpls;
|
||||
|
||||
/// <summary>
|
||||
/// An <see cref="AbstractNumbers" /> implementation that picks prime numbers
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="AbstractNumbers" />
|
||||
public sealed class PrimeNumbers(long lowerBound, long upperBound) : AbstractNumbers(lowerBound, upperBound)
|
||||
{
|
||||
protected override bool PickNumber(long number) => false; // TODO
|
||||
}
|
||||
10
Numbers/NumberFactory/NumberImpls/SquareNumbers.cs
Normal file
10
Numbers/NumberFactory/NumberImpls/SquareNumbers.cs
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
namespace Numbers.NumberFactory.NumberImpls;
|
||||
|
||||
/// <summary>
|
||||
/// An <see cref="AbstractNumbers" /> implementation that picks square numbers
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="AbstractNumbers" />
|
||||
public sealed class SquareNumbers(long lowerBound, long upperBound) : AbstractNumbers(lowerBound, upperBound)
|
||||
{
|
||||
protected override bool PickNumber(long number) => false; // TODO
|
||||
}
|
||||
39
Numbers/NumberFactory/NumbersEnumerator.cs
Normal file
39
Numbers/NumberFactory/NumbersEnumerator.cs
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
using System.Collections;
|
||||
|
||||
namespace Numbers.NumberFactory;
|
||||
|
||||
/// <summary>
|
||||
/// An enumerator for a list of numbers
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="IEnumerator{T}" />
|
||||
public sealed class NumbersEnumerator : IEnumerator<long>
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a new instance of <see cref="NumbersEnumerator" /> which will enumerate over the given list
|
||||
/// </summary>
|
||||
/// <param name="list">List to iterate over</param>
|
||||
public NumbersEnumerator(List<long> list)
|
||||
{
|
||||
// TODO
|
||||
List = null!;
|
||||
}
|
||||
|
||||
private int Index { get; set; }
|
||||
private List<long> List { get; }
|
||||
|
||||
public long Current => -1L; // TODO
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
// TODO?
|
||||
}
|
||||
|
||||
object IEnumerator.Current => null!; // TODO
|
||||
|
||||
public bool MoveNext() => false; // TODO
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue