/// <inheritdoc/>
        public bool UpdateAll()
        {
            var previousPossibles = new Dictionary <Coordinate, BitVector>();

            for (int col = 0; col < _puzzle.Size; col++)
            {
                _possiblesToCheckInColumn[col] = _columnTracker.GetMissingValuesForColumn(col);
                _UpdateColumn(col, previousPossibles);
            }
            _previousPossiblesStack.Push(previousPossibles);
            return(previousPossibles.Count > 0);
        }
        /// <inheritdoc/>
        public bool UpdateAll()
        {
            Debug.Assert(
                _puzzle is not null && _helper is not null,
                $"Must initialize heuristic before calling {nameof(UpdateAll)}.");
            int size = _puzzle.Size;
            var possibleValuesToCheck = new BitVector[size];
            var coordinatesToCheck    = new Coordinate[size][];

            for (int column = 0; column < size; ++column)
            {
                possibleValuesToCheck[column] = _columnTracker.GetMissingValuesForColumn(column);
                coordinatesToCheck[column]    = _GetUnsetCoordinatesOn(column).ToArray();
            }
            return(_helper.UpdateIfUnique(possibleValuesToCheck, coordinatesToCheck));
        }