Пример #1
0
        public static Cell[] GetValueCandidates(Board board, Cell cell)
        {
            var columnValues = board.GetAssignedColumnCells(cell);
            var rowValues =    board.GetAssignedRowCells(cell);
            var gridValues = board.GetGridCells(cell)
                .Where(i => i.IsAssigned())
                .ToArray();

            var all = Cell.All;
            // BUG: "all" keeps bad positional value, corrupting board.

            var missingColumnValues = all.Except(columnValues).ToArray();
            var missingRowValues =    all.Except(rowValues)   .ToArray();
            var missingGridValues =   all.Except(gridValues)  .ToArray();

            var candidates = missingColumnValues
                .Intersect(missingRowValues)
                .Intersect(missingGridValues)
                .ToArray();

            return candidates;
        }