/// <summary> /// Find similarities in two numbers /// </summary> /// <param name="lotteryTicketNumbers"></param> /// <param name="vikingLottoNumbers"></param> /// <param name="similarityCount"></param> private static void CheckSimilarities(VikingLottoNumbers lotteryTicketNumbers, VikingLottoNumbers vikingLottoNumbers, int similarityCount) { int counterForBool = 0; List <int> numbers = new List <int>(); int endCounter = 0; int endCounter2 = 0; foreach (var ticketNum in lotteryTicketNumbers.NumCollection) { endCounter++; endCounter2 = 0; foreach (var lottoNum in vikingLottoNumbers.NumCollection) { endCounter2++; if (ticketNum == lottoNum) { counterForBool++; numbers.Add(ticketNum); } } } if (counterForBool > 1) { foreach (var item in GetAllCobinations(numbers)) { if (item.Count >= similarityCount) { if (!SimilarityHolder.CheckIfNumberExist(item)) { SimilarityHolder.AddNumbers(item); } } } } }
/// <summary> /// Compare each draw results to each draw results /// </summary> /// <param name="allNumbers"></param> /// <param name="similarityCount"></param> /// <param name="minRepeats"></param> /// <returns></returns> public static ObservableCollection <SimilarityHolderViewModel> FindBestNumbers(ObservableCollection <VikingLottoNumbers> allNumbers, int similarityCount, int minRepeats) { Task <ObservableCollection <SimilarityHolderViewModel> > task = Task <ObservableCollection <SimilarityHolderViewModel> > .Factory.StartNew(() => { // detection to not compare the number to itself int RowCount1 = 0; int RowCount2 = 0; // foreach (var lotteryTicketNumbers in allNumbers) { foreach (var vikingLottoNumbers in allNumbers) { if (RowCount1 != RowCount2) { CheckSimilarities(lotteryTicketNumbers, vikingLottoNumbers, similarityCount); } RowCount2++; if (RowCount2 == allNumbers.Count) { RowCount2 = 0; } } SimilarityHolder.FirstLoop = false; SimilarityHolder.AddToAlreadyFoundList(SimilarityHolder.NumberList); RowCount1++; } return(AddToSimilarityHolderViews(minRepeats)); }); return(task.Result); }