/** * Computes all the additional fields; is done after the initial search to optimize finding * doubles. * * @param finder */ public void computeFields(SudokuStepFinder finder) { this.buddies = new SudokuSet(); for (int i = 1; i <= 9; i++) { if ((candidates & Sudoku2.MASKS[i]) != 0) { SudokuSet sudokuCandidates = finder.getCandidates()[i]; indicesPerCandidat[i] = new SudokuSet(indices); indicesPerCandidat[i].and(sudokuCandidates); buddiesPerCandidat[i] = new SudokuSet(); Sudoku2.getBuddies(indicesPerCandidat[i], buddiesPerCandidat[i]); buddiesPerCandidat[i].andNot(indices); buddiesPerCandidat[i].and(finder.getCandidates()[i]); buddiesAlsPerCandidat[i] = new SudokuSet(buddiesPerCandidat[i]); buddiesAlsPerCandidat[i].or(indicesPerCandidat[i]); buddies.or(buddiesPerCandidat[i]); } } }