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