public static bool CheckResults(LottoSelection userSelection, IEnumerable <LottoSelection> generatedSelectionsToCheckAgainst) { var jackpot = false; foreach (var selection in generatedSelectionsToCheckAgainst) { var win = selection.Balls[0] == userSelection.Balls[0] && selection.Balls[1] == userSelection.Balls[1] && selection.Balls[2] == userSelection.Balls[2] && selection.Balls[3] == userSelection.Balls[3] && selection.Balls[4] == userSelection.Balls[4]; if (win) { jackpot = true; } selection.MatchedBalls = userSelection.Balls.Select(x => x.Value).Intersect(selection.Balls.Select(y => y.Value)).Count(); selection.MatchedPowerBalls = userSelection.PowerBalls.Select(x => x.Value).Intersect(selection.PowerBalls.Select(y => y.Value)).Count(); } return(jackpot); }
static async Task Main(string[] args) { var userSelection = new LottoSelection(); var ballSelectionMessage = $"Enter {LottoSelection.BallCount} ball numbers between 1 and 50, separated by a comma, or simply press ENTER key for lucky dip"; var powerBallSelectionMessage = $"Enter {LottoSelection.PowerBallCount} powerball numbers between 1 and 8, separated by a comma"; Console.WriteLine(ballSelectionMessage); var firstInput = Console.ReadLine(); if (string.IsNullOrWhiteSpace(firstInput)) { userSelection = LottoSelector.GenerateSelection(); Console.WriteLine(userSelection); } else { var ballNumbers = Console.ReadLine().Split(',', StringSplitOptions.RemoveEmptyEntries); while (!InputValidator.TryValidateInput(ballNumbers, LottoSelection.BallCount, 50, out string error)) { Console.WriteLine(error); Console.WriteLine(ballSelectionMessage); ballNumbers = Console.ReadLine().Split(',', StringSplitOptions.RemoveEmptyEntries); } userSelection.Balls[0] = int.Parse(ballNumbers[0]); userSelection.Balls[1] = int.Parse(ballNumbers[1]); userSelection.Balls[2] = int.Parse(ballNumbers[2]); userSelection.Balls[3] = int.Parse(ballNumbers[3]); userSelection.Balls[4] = int.Parse(ballNumbers[4]); Console.WriteLine(powerBallSelectionMessage); var powerballNumbers = Console.ReadLine().Split(',', StringSplitOptions.RemoveEmptyEntries); while (!InputValidator.TryValidateInput(powerballNumbers, 2, 8, out string error)) { Console.WriteLine(error); Console.WriteLine(powerBallSelectionMessage); powerballNumbers = Console.ReadLine().Split(',', StringSplitOptions.RemoveEmptyEntries); } userSelection.PowerBalls[0] = int.Parse(powerballNumbers[0]); userSelection.PowerBalls[1] = int.Parse(powerballNumbers[1]); } Console.WriteLine("Now enter the number of attempts you would like to try"); var numOfTimes = Console.ReadLine().Trim(); while (!int.TryParse(numOfTimes, out _)) { Console.WriteLine("Please enter a whole number. Enter the number of attempts you would like to try"); numOfTimes = Console.ReadLine(); } var attempts = int.Parse(numOfTimes); var test = new ResultGenerator(); var results = await test.GenerateResults(attempts); var win = LottoChecker.CheckResults(userSelection, results); var winString = win ? "won" : "didn't win"; Console.WriteLine($"Out of {string.Format("{0:n0}", attempts)} attempts, you {winString} the jackpot."); var stats = StatsBuilder.BuildMatchedStatistics(results); Console.WriteLine(stats); Console.Read(); }