Example #1
0
 private static Variant CreateNewVariant(Variant variant, Pile selectedPile, Potter aBook)
 {
     var newPile = new Pile(selectedPile.Books);
     newPile.Add(aBook);
     var newVariant = new Variant(variant.Piles.Where(p => p != selectedPile));
     newVariant.Add(newPile);
     return newVariant;
 }
Example #2
0
        public Variant SortBooks(Dictionary<Potter, int> notYetSorted, Variant sortedPerDiscount)
        {
            var newPile = new Pile(notYetSorted.Select(b => b.Key));
            var remain = notYetSorted.Where(b => b.Value > 1).ToDictionary(b => b.Key, b => b.Value - 1);

            sortedPerDiscount.Add(newPile);
            return remain.Count > 0
                       ? SortBooks(remain, sortedPerDiscount)
                       : sortedPerDiscount;
        }
Example #3
0
 private IEnumerable<Variant> GenerateVariants(IEnumerable<Variant> variants, Potter aBook)
 {
     var newVariants = new List<Variant>();
     foreach (var curVariant in variants)
     {
         foreach (var newVariant in GenerateVariants(curVariant, aBook, newVariants))
         {
             newVariants.Add(newVariant);
         }
         if (curVariant.Piles.Count() < _maxPiles)
         {
             var variantWithASignelBook = new Variant(curVariant.Piles);
             variantWithASignelBook.Add(new Pile(new[] {aBook}));
             newVariants.Add(variantWithASignelBook);
         }
     }
     if (newVariants.Count() == 0)
     {
         newVariants.Add(new Variant(new[]{new Pile(new[] {aBook})}));
     }
     return newVariants;
 }