protected override void checkSurroundings(int squareNum, PuzzleNumbers puzzle, PuzzleStructure grid) { Dictionary <string, int> containers = grid.findContainers(squareNum); row = grid.rows[containers["Row"]]; block = grid.blocks[containers["Block"]]; col = grid.columns[containers["Column"]]; duplicates = new List <char>(); for (int i = 0; i < row.Squares.Count; i++) { if (puzzle.squares[row.Squares[i]].number != '-') { if (!duplicates.Contains(puzzle.squares[row.Squares[i]].number)) { duplicates.Add(puzzle.squares[row.Squares[i]].number); } } if (puzzle.squares[col.Squares[i]].number != '-') { if (!duplicates.Contains(puzzle.squares[col.Squares[i]].number)) { duplicates.Add(puzzle.squares[col.Squares[i]].number); } } if (puzzle.squares[block.Squares[i]].number != '-') { if (!duplicates.Contains(puzzle.squares[block.Squares[i]].number)) { duplicates.Add(puzzle.squares[block.Squares[i]].number); } } } }
protected override void checkSurroundings(int squareNum, PuzzleNumbers puzzle, PuzzleStructure grid) { skip = true; if (puzzle.squares[squareNum].number == '-' && puzzle.squares[squareNum].candidates.Count == 2) { if (squareNum == 22) { Console.Write(""); } rowPossible = new List <int>(); colPossible = new List <int>(); blockPossible = new List <int>(); skip = false; Dictionary <string, int> containers = grid.findContainers(squareNum); row = grid.rows[containers["Row"]]; block = grid.blocks[containers["Block"]]; col = grid.columns[containers["Column"]]; List <string> compare = new List <string>(puzzle.squares[squareNum].candidates); for (int i = 0; i < row.Squares.Count; i++) { if (puzzle.squares[row.Squares[i]].number == '-' && puzzle.squares[row.Squares[i]].candidates.SequenceEqual(compare) && row.Squares[i] != squareNum) { rowPossible.Add(row.Squares[i]); } if (puzzle.squares[col.Squares[i]].number == '-' && puzzle.squares[col.Squares[i]].candidates.SequenceEqual(compare) && col.Squares[i] != squareNum) { colPossible.Add(col.Squares[i]); } if (puzzle.squares[block.Squares[i]].number == '-' && puzzle.squares[block.Squares[i]].candidates.SequenceEqual(compare) && block.Squares[i] != squareNum) { blockPossible.Add(block.Squares[i]); } } } }
protected override void checkSurroundings(int squareNum, PuzzleNumbers puzzle, PuzzleStructure grid) { used = false; Dictionary <string, int> containers = grid.findContainers(squareNum); row = grid.rows[containers["Row"]]; block = grid.blocks[containers["Block"]]; col = grid.columns[containers["Column"]]; blockCol = new Dictionary <int, List <string> >(); for (int i = 0; i < Convert.ToInt32(Math.Sqrt(block.Squares.Count)); i++) { blockCol.Add(i, new List <string>()); } int currentCol = 0; for (int i = 0; i < block.Squares.Count; i++) { if (puzzle.squares[block.Squares[i]].number == '-') { addBlockColCandidates(block.Squares[i], currentCol, puzzle); } currentCol++; if (currentCol == 3) { currentCol = 0; } } List <string> temp = new List <string>(); for (int i = 0; i < blockCol.Count; i++) { List <string> temp2 = new List <string>(); for (int j = 0; j < blockCol[i].Count; j++) { if (!temp2.Contains(blockCol[i][j])) { temp2.Add(blockCol[i][j]); } } for (int j = 0; j < blockCol.Count; j++) { if (j != i) { for (int k = 0; k < blockCol[j].Count; k++) { if (temp2.Contains(blockCol[j][k])) { temp2.Remove(blockCol[j][k]); } } } } temp = temp.Concat(temp2).ToList <string>(); } for (int i = 0; i < blockCol.Count; i++) { blockCol[i] = blockCol[i].Intersect(temp).ToList <string>(); } }
protected override void checkSurroundings(int squareNum, PuzzleNumbers puzzle, PuzzleStructure grid) { Dictionary <string, int> containers = grid.findContainers(squareNum); row = grid.rows[containers["Row"]]; block = grid.blocks[containers["Block"]]; col = grid.columns[containers["Column"]]; blockCandidates = new Dictionary <char, int>(); rowCandidates = new Dictionary <char, int>(); colCandidates = new Dictionary <char, int>(); for (int i = 0; i < row.Squares.Count; i++) { if (puzzle.squares[row.Squares[i]].number == '-' && row.Squares[i] != squareNum) { for (int j = 0; j < puzzle.squares[row.Squares[i]].candidates.Count; j++) { if (!rowCandidates.ContainsKey(puzzle.squares[row.Squares[i]].candidates[j].ToCharArray()[0])) { rowCandidates.Add(puzzle.squares[row.Squares[i]].candidates[j].ToCharArray()[0], 1); } else { rowCandidates[puzzle.squares[row.Squares[i]].candidates[j].ToCharArray()[0]]++; } } } if (puzzle.squares[col.Squares[i]].number == '-' && col.Squares[i] != squareNum) { for (int j = 0; j < puzzle.squares[col.Squares[i]].candidates.Count; j++) { if (!colCandidates.ContainsKey(puzzle.squares[col.Squares[i]].candidates[j].ToCharArray()[0])) { colCandidates.Add(puzzle.squares[col.Squares[i]].candidates[j].ToCharArray()[0], 1); } else { colCandidates[puzzle.squares[col.Squares[i]].candidates[j].ToCharArray()[0]]++; } } } if (puzzle.squares[block.Squares[i]].number == '-' && block.Squares[i] != squareNum) { for (int j = 0; j < puzzle.squares[block.Squares[i]].candidates.Count; j++) { if (!blockCandidates.ContainsKey(puzzle.squares[block.Squares[i]].candidates[j].ToCharArray()[0])) { blockCandidates.Add(puzzle.squares[block.Squares[i]].candidates[j].ToCharArray()[0], 1); } else { blockCandidates[puzzle.squares[block.Squares[i]].candidates[j].ToCharArray()[0]]++; } } } } }
protected override void checkSurroundings(int squareNum, PuzzleNumbers puzzle, PuzzleStructure grid) { if (squareNum == 13) { } used = false; Dictionary <string, int> containers = grid.findContainers(squareNum); row = grid.rows[containers["Row"]]; block = grid.blocks[containers["Block"]]; col = grid.columns[containers["Column"]]; blockRow = new Dictionary <int, List <string> >(); for (int i = 0; i < Convert.ToInt32(Math.Sqrt(block.Squares.Count)); i++) { blockRow.Add(i, new List <string>()); } int currentRow = 0; for (int i = 0; i < block.Squares.Count; i++) { if (puzzle.squares[block.Squares[i]].number == '-') { addBlockRowCandidates(block.Squares[i], currentRow, puzzle); } if ((i + 1) % Convert.ToInt32(Math.Sqrt(block.Squares.Count)) == 0) { currentRow++; } } List <string> temp = new List <string>(); for (int i = 0; i < blockRow.Count; i++) { List <string> temp2 = new List <string>(); for (int j = 0; j < blockRow[i].Count; j++) { if (!temp2.Contains(blockRow[i][j])) { temp2.Add(blockRow[i][j]); } } for (int j = 0; j < blockRow.Count; j++) { if (j != i) { for (int k = 0; k < blockRow[j].Count; k++) { if (temp2.Contains(blockRow[j][k])) { temp2.Remove(blockRow[j][k]); } } } } temp = temp.Concat(temp2).ToList <string>(); } //You need to except off the stuff you havent excepted off of! for (int i = 0; i < blockRow.Count; i++) { blockRow[i] = blockRow[i].Intersect(temp).ToList <string>(); } }