Initial commit

This commit is contained in:
github-classroom[bot] 2025-04-29 15:03:45 +00:00 committed by GitHub
commit b087f272b4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
26 changed files with 5345 additions and 0 deletions

View 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);
}

View 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
}

View 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; }
}

View 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
}

View 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
}

View 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
}

View 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
}

View 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
}
}