private static void LargestStock(IList<double> cuts, IList<Board> stockList) { var longest = stockList.OrderByDescending(x => x.Length).First(); var longestBoard = longest.Length; var boardCost = longest.Price; var scraps = new List<double>(); var stockUsed = new List<Board>(); while (cuts.Any()) { var longestCut = cuts.OrderByDescending(x => x).First(); cuts.Remove(longestCut); if (scraps.Any(x => x > longestCut)) { scraps = scraps.CutFromScrap(longestCut); } else { stockUsed.Add(longest); scraps.Add(longestBoard - longestCut - kerf); } } Console.WriteLine("Total number of boards used: {0}", stockUsed.Count()); Console.WriteLine("Total Cost: {0}", stockUsed.Count() * boardCost); OutputWaste(scraps, stockUsed.Count() * longestBoard); }
private static void SmallestStock(IList<double> cuts, List<Board> stockList) { var stockUsed = new List<Board>(); var scraps = new List<double>(); while (cuts.Any()) { //switch to from list to queue var longestCut = cuts.OrderByDescending(x => x).First(); cuts.Remove(longestCut); if (scraps.Any(x => x > longestCut)) { scraps = scraps.CutFromScrap(longestCut); } else { var newStock = stockList.Where(s => s.Length > longestCut).OrderBy(s => s.PricePerUnit).First(); //Remove Saw Width stockUsed.Add(newStock); scraps.Add(newStock.Length - longestCut); } } Console.WriteLine("Number of boards used: {0}", stockUsed.Count()); Console.WriteLine("Total Cost: {0}", stockUsed.Select(s => s.Price).Sum()); OutputPurchaseList(stockUsed); OutputWaste(scraps, stockUsed.Select(s => s.Length).Sum()); }