Ejemplo n.º 1
0
        public int CountCutting(WoodenBoard woodenBoard, List <WoodenBoardPattern> patterns)
        {
            int c = 1;

            CountCutting(woodenBoard, patterns, ref c);

            return(c);
        }
Ejemplo n.º 2
0
 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());
 }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
        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);
        }