private IPainter Reduce(double sqMeters) { TimeSpan time = TimeSpan.FromHours( 1 / Painters .Where(painter => painter.IsAvailable) .Select(painter => 1 / painter.EstimateTimeToPaint(sqMeters).TotalHours) .Sum()); double cost = this.Painters .Where(painter => painter.IsAvailable) .Select(painter => painter.EstimateCompensation(sqMeters) / painter.EstimateTimeToPaint(sqMeters).TotalHours * time.TotalHours) .Sum(); return(new ProportionalPainter { TimePerSqrMeter = TimeSpan.FromHours(time.TotalHours / sqMeters), DollarsPerHour = cost / time.TotalHours }); }
private static IPainter FindCheapestPainter(double sqMeters, Painters painters) => painters.GetAvailable().GetCheapestOne(sqMeters);
private static IPainter FindFastesPainter(double sqMeters, Painters painters) => painters.GetAvailable().GetFastestOne(sqMeters);