コード例 #1
0
 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);
     }
 }
コード例 #2
0
        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);
        }
コード例 #3
0
        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());
        }