private static void MergeBagToLighestBag(Trip trip, TripBag tripBag) { while (tripBag.Elements.Count > 0) { var lightestBag = trip.Bags.OrderBy(b => b.AparentBagWeight).First(); var element = tripBag.Elements.First(); lightestBag.Elements.Add(element); tripBag.Elements.Remove(element); } }
private TripBag CreateTripBag(IEnumerable <TripElement> elements) { var elementsByWeight = elements.OrderByDescending(e => e.Weight).ToList(); var tripBag = new TripBag(); while (tripBag.AparentBagWeight < _maxWeight) { var element = GetBestElement(elementsByWeight, tripBag); if (element == null) { break; } tripBag.Elements.Add(element); } return(tripBag); }
private static TripElement GetBestElement(IEnumerable <TripElement> elements, TripBag tripBag) { var nonUsedElements = elements.Where(e => !tripBag.Elements.Any(tbe => tbe.Id == e.Id)); if (tripBag.TopElement == null) { return(nonUsedElements.First()); } return(nonUsedElements.LastOrDefault()); }