Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
 public CharSet(CharSet other)
 {
     mem      = Utils.listCopy(other.mem);
     numAlloc = other.size();
     foreach (char c in other.set)
     {
         set.Add(c);
     }
 }
Ejemplo n.º 3
0
        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;
        }