Exemplo n.º 1
0
 /// <summary>
 /// Gets the needed picks to win all prize levels of a given division
 /// </summary>
 /// <param name="division">The division is the division containing the winning prize levels</param>
 /// <param name="prizeLevels">All prize levels in the game used to get the index of the prize level</param>
 /// <returns>Returns a list of ints containing the needed picks to win a division</returns>
 private List<int> getNeededPicksForDivision(
     bool useInstantWin,
     Divisions.DivisionModel division,
     PrizeLevels.PrizeLevels prizeLevels)
 {
     List<int> neededPicks = new List<int>();
     List<PrizeLevels.PrizeLevel> pls = division.getPrizeLevelsAtDivision();
     foreach (PrizeLevels.PrizeLevel pl in pls)
     {
         int numberToCollect = pl.numCollections;
         int indexInPrizeLevels = prizeLevels.getLevelOfPrize(pl) + 1;
         if ((pl.isInstantWin || pl.numCollections == 0) && useInstantWin)
         {
             numberToCollect = 1;
             neededPicks.Add(-indexInPrizeLevels);
         }
         else
         {
             numberToCollect = pl.numCollections;
             for (int i = 0; i < numberToCollect; i++)
             {
                 neededPicks.Add(indexInPrizeLevels);
             }
         }
     }
     return neededPicks;
 }
Exemplo n.º 2
0
        /// <summary>
        /// Creates all the winning permutations of a divisions
        /// </summary>
        /// <param name="divisionIndicator">Selected Division</param>
        /// <param name="totalNumberOfPicks">Number of picks for a division</param>
        /// <param name="numberOfPermutations">number of permutations to genreate for a division</param>
        /// <param name="division">Division informaiton</param>
        /// <param name="prizeLevels">Prize level informaiton</param>
        /// <returns>Returns the list of winning permutaitons for a division</returns>
        private List<int[]> getDivisionWinningPermutations(
            int divisionIndicator,
            short totalNumberOfPicks,
            int numberOfPermutations,
            Divisions.DivisionModel division,
            PrizeLevels.PrizeLevels prizeLevels)
        {
            List<int[]> divisionIncompleteWinPermutations = new List<int[]>();
            List<PrizeLevels.PrizeLevel> divisionPrizeLevels = division.getPrizeLevelsAtDivision();
            int maxNumberOfNeededPicksForDivision = 0;
            bool isInstantWinPresent = false;
            foreach (PrizeLevels.PrizeLevel p in divisionPrizeLevels)
            {
                maxNumberOfNeededPicksForDivision += p.numCollections;
                if (p.isInstantWin)
                {
                    isInstantWinPresent = true;
                }
            }

            int[] picks = getNeededPicksForDivision(true, division, prizeLevels).ToArray();
            divisionIncompleteWinPermutations.AddRange(getAllBasePermutations(totalNumberOfPicks, numberOfPermutations, getBaseCombinaiton(totalNumberOfPicks, picks).ToArray()));
            int[] nonWinningPicks = getExtraPicks(divisionIncompleteWinPermutations[0], prizeLevels);
            if (nonWinningPicks.Length + picks.Length < totalNumberOfPicks && isInstantWinPresent)
            {
                divisionIncompleteWinPermutations.Clear();
            }
            if (maxNumberOfNeededPicksForDivision <= totalNumberOfPicks && isInstantWinPresent)
            {
                divisionIncompleteWinPermutations.AddRange(getAllBasePermutations(totalNumberOfPicks, numberOfPermutations, getBaseCombinaiton(totalNumberOfPicks, getNeededPicksForDivision(false, division, prizeLevels).ToArray()).ToArray()));
            }

            List<int[]> maximumPermutations = fillBlankDivisionPermutationsWithNonWinningData(
                divisionIncompleteWinPermutations,
                nonWinningPicks,
                division,
                prizeLevels,
                (numberOfPermutations + extraPermutationBuffer)).OrderBy(a => Guid.NewGuid()).ToList();
            List<int[]> finalPermutations = maximumPermutations.Take(numberOfPermutations).ToList();
            return finalPermutations;
        }