mirror of
https://github.com/onyx-and-iris/Lottery.git
synced 2024-11-27 16:30:47 +00:00
add document strings
Limits are now initialized and private to each Lottery class
This commit is contained in:
parent
ff4d77283c
commit
3da6f66deb
@ -2,6 +2,11 @@
|
||||
{
|
||||
internal class Generator
|
||||
{
|
||||
/// <summary>
|
||||
/// Simple algorithm for generating a list of unique numbers of Limits.Count size
|
||||
/// </summary>
|
||||
/// <param name="Limits">Defines the amount of numbers to generate, the max and min values</param>
|
||||
/// <returns>The list of numbers is returned sorted in ascending order.</returns>
|
||||
public static List<int> Generate(Limits Limits)
|
||||
{
|
||||
List<int> Candidates = Enumerable.Range(Limits.Lower, Limits.Upper).ToList();
|
||||
|
@ -1,14 +1,33 @@
|
||||
namespace Lottery
|
||||
{
|
||||
internal class Lottery(Limits limits)
|
||||
internal record Limits(int Count, int Lower, int Upper);
|
||||
|
||||
/// <summary>
|
||||
/// Abstract base class for lotteries.
|
||||
/// </summary>
|
||||
internal class Lottery
|
||||
{
|
||||
protected Limits Limits => limits;
|
||||
protected virtual Limits Limits => throw new NotImplementedException();
|
||||
public virtual string Play() => $"Numbers: {string.Join(", ", Generator.Generate(Limits))}";
|
||||
}
|
||||
|
||||
internal class LotteryWithSpecial(Limits limits, Limits specialLimits) : Lottery(limits)
|
||||
/// <summary>
|
||||
/// Concrete UKLotto Lottery class.
|
||||
/// Generates six balls from 1 to 59.
|
||||
/// </summary>
|
||||
internal class UKLottoLottery : Lottery
|
||||
{
|
||||
protected Limits SpecialLimits => specialLimits;
|
||||
protected override Limits Limits { get; } = new(Count: 6, Lower: 1, Upper: 59);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Abstract base class for Lotteries with Special values.
|
||||
/// It subclasses Lottery.
|
||||
/// SpecialLimits and SpecialIdentifier properties must be overridden.
|
||||
/// </summary>
|
||||
internal class LotteryWithSpecial : Lottery
|
||||
{
|
||||
protected virtual Limits SpecialLimits => throw new NotImplementedException();
|
||||
protected virtual string SpecialIdentifier => throw new NotImplementedException();
|
||||
|
||||
public override string Play()
|
||||
@ -20,18 +39,36 @@
|
||||
}
|
||||
}
|
||||
|
||||
internal class EuroMillionsLottery(Limits limits, Limits specialLimits) : LotteryWithSpecial(limits, specialLimits)
|
||||
/// <summary>
|
||||
/// Concrete class for EuroMillions lottery.
|
||||
/// Generates five balls from 1 to 50 and two lucky stars from 1 to 12.
|
||||
/// </summary>
|
||||
internal class EuroMillionsLottery : LotteryWithSpecial
|
||||
{
|
||||
protected override Limits Limits { get; } = new(Count: 5, Lower: 1, Upper: 50);
|
||||
protected override Limits SpecialLimits { get; } = new(Count: 2, Lower: 1, Upper: 12);
|
||||
protected override string SpecialIdentifier => "Lucky Stars";
|
||||
}
|
||||
|
||||
internal class SetForLifeLottery(Limits limits, Limits specialLimits) : LotteryWithSpecial(limits, specialLimits)
|
||||
/// <summary>
|
||||
/// Concrete class for SetForLifeLottery lottery.
|
||||
/// Generates five balls from 1 to 47 and one life ball from 1 to 10.
|
||||
/// </summary>
|
||||
internal class SetForLifeLottery : LotteryWithSpecial
|
||||
{
|
||||
protected override Limits Limits { get; } = new(Count: 5, Lower: 1, Upper: 47);
|
||||
protected override Limits SpecialLimits { get; } = new(Count: 1, Lower: 1, Upper: 10);
|
||||
protected override string SpecialIdentifier => "Life Ball";
|
||||
}
|
||||
|
||||
internal class ThunderballLottery(Limits limits, Limits specialLimits) : LotteryWithSpecial(limits, specialLimits)
|
||||
/// <summary>
|
||||
/// Concrete class for ThunderballLottery lottery.
|
||||
/// Generates fives balls from 1 to 39 and one thunderball from 1 to 14.
|
||||
/// </summary>
|
||||
internal class ThunderballLottery : LotteryWithSpecial
|
||||
{
|
||||
protected override Limits Limits { get; } = new(Count: 5, Lower: 1, Upper: 39);
|
||||
protected override Limits SpecialLimits { get; } = new(Count: 1, Lower: 1, Upper: 14);
|
||||
protected override string SpecialIdentifier => "Thunderball";
|
||||
}
|
||||
}
|
||||
|
@ -1,14 +1,12 @@
|
||||
namespace Lottery
|
||||
{
|
||||
internal record Limits(int Count, int Lower, int Upper);
|
||||
|
||||
public partial class MainPage : ContentPage
|
||||
{
|
||||
readonly List<Lottery> Lotteries = [
|
||||
new Lottery(limits: new Limits(6, 1, 59)),
|
||||
new EuroMillionsLottery(limits: new Limits(5, 1, 50), specialLimits: new Limits(2, 1, 12)),
|
||||
new SetForLifeLottery(limits: new Limits(5, 1, 47), specialLimits: new Limits(1, 1, 10)),
|
||||
new ThunderballLottery(limits: new Limits(5, 1, 39), specialLimits: new Limits(1, 1, 14))
|
||||
new UKLottoLottery(),
|
||||
new EuroMillionsLottery(),
|
||||
new SetForLifeLottery(),
|
||||
new ThunderballLottery()
|
||||
];
|
||||
const KindOfLottery DefaultLottery = KindOfLottery.Uk;
|
||||
Lottery Lottery;
|
||||
|
Loading…
Reference in New Issue
Block a user