using System.Collections.Generic;
public enum ExtractionOrder
public class Configuration
public int PrizeNumberPosition {get; set;}
public int PrizeNumberInit {get; set;}
public int PrizeNumberEnd {get; set;}
public ExtractionOrder ExtractionOrder {get; set;}
public class GenerationConfiguration
public int SerialNumberInit {get; set;}
public int SerialNumberQuantity {get; set;}
public int SerialNumberSize {get; set;}
public int OrderNumberQuantityPerSerie {get; set;}
public int OrderNumberSize {get; set;}
public int TotalQuantityOfNumbers {get; set;}
public class DrawConfiguration
public DateTime LotteryDate {get; set;}
public DateTime DrawDate {get; set;}
public int NumberOfWinners {get; set;}
public Configuration SerialNumberConfiguration {get; set;}
public Configuration OrderNumberConfiguration {get; set;}
public GenerationConfiguration GenerationConfiguration {get; set;}
public DrawConfiguration DrawConfiguration {get; set;}
public string FirstAlgoritm(List<string> numbers, Configuration configuration, int size)
string resultNumber = string.Empty;
for(int i = configuration.PrizeNumberInit; i <= configuration.PrizeNumberEnd; i++)
var number = new string(numbers[i].Reverse().ToArray());
resultNumber += number[configuration.PrizeNumberPosition];
if(configuration.ExtractionOrder.Equals(ExtractionOrder.BottomUp))
resultNumber = new string(resultNumber.Reverse().ToArray());
public static void Main()
GenerationConfiguration = new GenerationConfiguration()
SerialNumberQuantity = 100,
OrderNumberQuantityPerSerie = 20000,
TotalQuantityOfNumbers = 2000000
DrawConfiguration = new DrawConfiguration()
LotteryDate = DateTime.UtcNow.AddDays(1),
DrawDate = DateTime.UtcNow,
SerialNumberConfiguration = new Configuration()
ExtractionOrder = ExtractionOrder.BottomUp
OrderNumberConfiguration = new Configuration()
ExtractionOrder = ExtractionOrder.BottomUp
List<string> numbers = new()
var program = new Program();
var serialNumber = program.FirstAlgoritm(numbers, _base.DrawConfiguration.SerialNumberConfiguration, _base.GenerationConfiguration.SerialNumberSize);
var orderNumber = program.FirstAlgoritm(numbers, _base.DrawConfiguration.OrderNumberConfiguration, _base.GenerationConfiguration.SerialNumberSize);
Console.WriteLine($"SerialNumber = {serialNumber} \nOrderNumber = {orderNumber}");