static void Main(string[] args) { var tables = SplitProblems(Problem.RawString); int result = 0; foreach (var table in tables) { SudokuState state = new SudokuState(table); //Console.WriteLine(state.ToString()); while (state.Result == SudokoResult.InProgress) { state.Step(); } if (state.Result == SudokoResult.Completed) { List<SudokuState> solutions = new List<SudokuState>(); state.GetSolutions(solutions); result += 100 * solutions[0].GetValue(0, 0) + 10 * solutions[0].GetValue(1, 0) + solutions[0].GetValue(2, 0); } else { throw new Exception(); } } Console.WriteLine(result); //if (state.Result == SudokoResult.Completed) //{ // Console.WriteLine("Completed. Solutions:"); // List<SudokuState> solutions = new List<SudokuState>(); // state.GetSolutions(solutions); // foreach (SudokuState solution in solutions) // { // Console.WriteLine(solution); // Console.WriteLine(); // } //} }
public SudokuState Clone() { SudokuState clone = new SudokuState(); clone.m_Values = (int[,])m_Values.Clone(); clone.m_Predefined = (bool[,])m_Predefined.Clone(); clone.m_Possibilities = new List<int>[9, 9]; for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { clone.m_Possibilities[i, j] = new List<int>(m_Possibilities[i, j]); } } return clone; }