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