public int CountCutting(WoodenBoard woodenBoard, List <WoodenBoardPattern> patterns) { int c = 1; CountCutting(woodenBoard, patterns, ref c); return(c); }
public IList <WoodenBoardResults> Cuts(WoodenBoard woodenBoard, WoodenBoardPattern woodenBoardPattern) { return (CreateCuts(woodenBoard, woodenBoardPattern, woodenBoard.Thickness) .Where(r => r.WoodenBoards.Select(w => w.Area).Sum() == woodenBoard.Area) .Distinct(new WoodenBoardResultsEquality()) .ToList()); }
private static IEnumerable <WoodenBoardResults> CreateCuts(WoodenBoard woodenBoard, WoodenBoardPattern woodenBoardPattern, int thickness) { var patternWidth = woodenBoardPattern.Width; var patternHeight = woodenBoardPattern.Height; var boardWidth = woodenBoard.Width; var boardHeight = woodenBoard.Height; yield return(CreateWoodenBoardResult(patternWidth, patternHeight, boardWidth, boardHeight, thickness)); yield return(CreateWoodenBoardResult(patternHeight, patternWidth, boardWidth, boardHeight, thickness)); yield return(CreateWoodenBoardResult2(patternWidth, patternHeight, boardHeight, boardWidth, thickness)); yield return(CreateWoodenBoardResult2(patternHeight, patternWidth, boardHeight, boardWidth, thickness)); }
private static bool CountCutting(WoodenBoard woodenBoard, List <WoodenBoardPattern> patterns, ref int board) { var woodenCutter = new WoodenCutter(); var boardsCount = new List <int>(); foreach (var pattern in patterns) { var results = woodenCutter.Cuts(woodenBoard, pattern); foreach (var woodenBoardResultse in results) { int c = board; if (woodenBoardResultse.WoodenBoards.Count == 1) { if (patterns.Count > 1) { c++; if (!CountCutting(woodenBoard, patterns.Except(new[] { pattern }).ToList(), ref c)) { break; } } } else { if (woodenBoardResultse.WoodenBoards.Count > 1) { var board1 = woodenBoardResultse.WoodenBoards[1]; if (!CountCutting(board1, patterns.Except(new[] { pattern }).ToList(), ref c)) { c++; if (!CountCutting(woodenBoard, patterns.Except(new[] { pattern }).ToList(), ref c)) { break; } } } if (woodenBoardResultse.WoodenBoards.Count > 2) { var board2 = woodenBoardResultse.WoodenBoards[2]; CountCutting(board2, patterns.Except(new[] { pattern }).ToList(), ref c); if (!CountCutting(board2, patterns.Except(new[] { pattern }).ToList(), ref c)) { c++; if (!CountCutting(woodenBoard, patterns.Except(new[] { pattern }).ToList(), ref c)) { break; } } } } boardsCount.Add(c); } } if (boardsCount.Count != 0) { board = boardsCount.Min(); return(true); } return(false); }