public Board(int size, CharSet validCharacters, List <List <char> > state = null) { if (size != validCharacters.size()) { throw new Exception("ERROR: Specified sudoku board size does not equal the number of characters listed."); } this.size = size; this.validCharacters = validCharacters; if (state == null) { board = new List <List <char> >(); for (int i = 0; i < size; ++i) { board.Add(new List <char>()); for (int j = 0; j < size; ++j) { board[i].Add('\0'); } } } else { board = state; } }
public CharSet(CharSet other) { mem = Utils.listCopy(other.mem); numAlloc = other.size(); foreach (char c in other.set) { set.Add(c); } }
private void guessAll() { long guessStart = DateTime.Now.Ticks; for (int i = 0; i < size; ++i) { for (int j = 0; j < size; ++j) { if (tracker.board.board[i][j] != '-') { continue; } CharSet possib = tracker.progress[i][j]; if (possib.size() == 2) // minimal { for (int l = 0; l < 2; ++l) { Tracker newTracker = new Tracker(tracker); newTracker.board.setCell(i, j, possib.getList()[l]); Solver newSolver = new Solver(newTracker); Tracker retTracker = newSolver.run(); if (retTracker.valid) { singleSquareElapsed += newSolver.singleSquareElapsed; singleRegionElapsed += newSolver.singleRegionElapsed; guessCnt += newSolver.guessCnt + 1; ++tracker.solutionCnt; if (tracker.solutionCnt == 2 || retTracker.solutionCnt == 2) { tracker = retTracker; tracker.solutionCnt = 2; i = size; j = size; l = 2; // break from loop } } } } } } long guessEnd = DateTime.Now.Ticks; long timeMicros = (guessEnd - guessStart) / 10; guessTimeElapsed += timeMicros; }