p.p1 CLOSED_CELL_BGCOLOR = Color.YELLOW; public static final Color

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; background-color: #ffffff; min-height: 14.0px}
p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff; min-height: 13.0px}
p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #ba2da2; background-color: #ffffff}
span.s1 {color: #ba2da2}
span.s2 {color: #272ad8}
span.s3 {color: #d12f1b}
span.s4 {color: #000000}
span.s5 {color: #008400}
span.Apple-tab-span {white-space:pre}

package sudoku;

We Will Write a Custom Essay Specifically
For You For Only $13.90/page!


order now

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.BufferedReader;

import java.awt.GridLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Arrays;

public class SudokuBoardDisplay extends JComponent {

    private static final int CELL_PIXELS = 50;
    private static final int PUZZLE_SIZE = 9;
    private static final int SUBSQUARE   = 3;
    private static final int BOARD_PIXELS = CELL_PIXELS * PUZZLE_SIZE;
    private static final int TEXT_OFFSET = 15;
    
public static final Color OPEN_CELL_BGCOLOR = Color.WHITE;
public static final Color OPEN_CELL_TEXT_YES = new Color(0, 255, 0);
public static final Color OPEN_CELL_TEXT_NO = Color.RED;
public static final Color CLOSED_CELL_BGCOLOR = Color.YELLOW;
public static final Color CLOSED_CELL_TEXT = Color.BLACK;
public static final Font TEXT_FONT = new Font(“Monospaced”, Font.BOLD, 20);

public JTextArea console = new JTextArea(4, 1);
static List log = new ArrayList(4);
    
    static List candidates = new ArrayList99;
    
    
   private JTextField tfCells = new JTextFieldPUZZLE_SIZEPUZZLE_SIZE;

  
    private SudokuModel _model;
    
    
    public SudokuBoardDisplay(SudokuModel model) {
    setLayout(new GridLayout(PUZZLE_SIZE, PUZZLE_SIZE));
        setPreferredSize(new Dimension(BOARD_PIXELS + 2, BOARD_PIXELS + 2));
        setBackground(Color.WHITE);

        console.setBackground(new Color(0, 255, 255));
        
        _model = model;

        drawGridLines();
        logToConsole(“Ready.”);
    }

    public void logToConsole(String msg){
    if(log.size() >= 4){
    log.remove(0);
    }

log.add(msg);

    console.setText(String.join(”
“, log));
    }
        
    
    private void drawGridLines() {

InputListener listener = new InputListener();

    
      for (int row = 0; row < PUZZLE_SIZE; ++row) {          for (int col = 0; col < PUZZLE_SIZE; ++col) {             tfCellsrowcol = new JTextField();             add(tfCellsrowcol);             setVal(row, col);                tfCellsrowcol.addActionListener(listener);             tfCellsrowcol.setHorizontalAlignment(JTextField.CENTER);             tfCellsrowcol.setFont(TEXT_FONT); if (row == 0) {             if (col == 0) {                          tfCellsrowcol.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.BLACK));             }             else{                          if(col % SUBSQUARE == 0){             tfCellsrowcol.setBorder(BorderFactory.createMatteBorder(1, 2, 1, 1, CLOSED_CELL_TEXT));             }             else{             tfCellsrowcol.setBorder(BorderFactory.createMatteBorder(1, 0, 1, 1, CLOSED_CELL_TEXT));             }             }             }             else{             if (col == 0) {                 if(row % SUBSQUARE == 0){             tfCellsrowcol.setBorder(BorderFactory.createMatteBorder(2, 1, 1, 1, CLOSED_CELL_TEXT));             }             else{             tfCellsrowcol.setBorder(BorderFactory.createMatteBorder(0, 1, 1, 1, CLOSED_CELL_TEXT));             }             }             else {             if(col % SUBSQUARE == 0 && row % SUBSQUARE == 0){       tfCellsrowcol.setBorder(BorderFactory.createMatteBorder(2, 2, 1, 1, CLOSED_CELL_TEXT));             }             else if(col % SUBSQUARE == 0){       tfCellsrowcol.setBorder(BorderFactory.createMatteBorder(0, 2, 1, 1, CLOSED_CELL_TEXT));             }             else if(row % SUBSQUARE == 0){       tfCellsrowcol.setBorder(BorderFactory.createMatteBorder(2, 0, 1, 1, CLOSED_CELL_TEXT));             }             else{       tfCellsrowcol.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 1, CLOSED_CELL_TEXT));             }             }             }      }       }     }     public void setVal(int row, int col){     if (_model.getVal(row, col) == 0) {            tfCellsrowcol.setText("");            tfCellsrowcol.setEditable(true);            tfCellsrowcol.setBackground(OPEN_CELL_BGCOLOR);         } else {            tfCellsrowcol.setText(_model.getVal(row, col) + "");            tfCellsrowcol.setEditable(true);            tfCellsrowcol.setBackground(CLOSED_CELL_BGCOLOR);            tfCellsrowcol.setForeground(CLOSED_CELL_TEXT);         }     }     public void print(int row, int col, int value){     tfCellsrowcol.setText(value + "");        if(value <= PUZZLE_SIZE){       tfCellsrowcol.setBackground(CLOSED_CELL_BGCOLOR);       tfCellsrowcol.setForeground(CLOSED_CELL_TEXT);        }     }     private void Solver(){         logToConsole("Working.."); try{         fillCandidates();         int counter = 0;         boolean epicWin = false;         while(!epicWin){             int lastMove = _model.deepCopyArray();             for (int i = 0; i < 9; i++) {                 for (int j = 0; j < 9; j++) {                     if(_model.getVal(i, j) == 0){                         eliminateAndInsert(i, j);                         _model.printBoard();                         counter++;                     }                     if(_model.solved()){                         epicWin=true;                         break;                     }                 }             }             if(_model.deepEquals(lastMove)){         logToConsole("FAIL! Iterations: " + counter);                 System.out.println("FAIL! Iterations: " + counter);                 return;             }         }         logToConsole("WIN! Iterations: " + counter);         System.out.println("WIN! Iterations: " + counter); }         catch(Exception ex){         logToConsole("Interrupted.");         }     }     private void fillCandidates(){         for (int i = 0; i < 9; i++){             for (int j = 0; j < 9; j++){                 if (_model.getVal(i, j) == 0){                     List oneToNine = new ArrayList();
                    for (int k = 1; k < 10; k++)                         oneToNine.add(k);                     candidatesij = oneToNine;                     String str = "";                     for(int list : oneToNine)                     str += list;                                  print(i,j, Integer.parseInt(str));                 }             }         }         eliminateAll();     }     public int arrayListToInt(List aList){     String str = "";         for(Object list : aList)         str += list.toString();         return Integer.parseInt(str);     }     private void eliminateAll() {     try{         for (int i = 0; i < 9; i++){             for (int j = 0; j < 9; j++)                 if(_model.getVal(i, j) == 0){                     eliminateCandidates(i, j); Thread.sleep(10);         insertNakedSingles(i, j);         Thread.sleep(10);                 }         }     }     catch(InterruptedException ex){     logToConsole("Interrupted.");     }     }     private void eliminateAndInsert(int x, int y){         eliminateCandidates(x, y);         insertNakedSingles(x, y);         insertHiddenSingles();     }     private void eliminateCandidates(int x, int y){         int rowOffset = (x/3)*3; int colOffset = (y/3)*3;         for (int i = 0; i < 9; i++)             if (candidatesxy.contains(_model.getVal(x, i)) && _model.getVal(x, i) != 0){             if(candidatesxy.size() > 1){
            candidatesxy.remove(candidatesxy.indexOf(_model.getVal(x, i)));
                print(x, y, arrayListToInt(candidatesxy));
            }
            }
        for (int i = 0; i < 9; i++)             if (candidatesxy.contains(_model.getVal(i, y)) && _model.getVal(i, y) != 0){             if(candidatesxy.size() > 1){
            candidatesxy.remove(candidatesxy.indexOf(_model.getVal(i, y)));
                print(x, y, arrayListToInt(candidatesxy));
            }
            }
        for (int i = 0; i < 3; i++) //xy's box             for (int j = 0; j < 3; j++)                 if (candidatesxy.contains(_model.getVal(rowOffset+i, colOffset+j)) && _model.getVal(rowOffset+i, colOffset+j) != 0){             if(candidatesxy.size() > 1){
                candidatesxy.remove(candidatesxy.indexOf(_model.getVal(rowOffset+i, colOffset+j)));
                    print(x, y, arrayListToInt(candidatesxy));
            }
                }
    }

    private void insertNakedSingles(int x, int y) {
        if(candidatesxy.size() == 1){
        int num = (int)candidatesxy.get(0);
            _model.setVal(x, y, num);
            print(x, y, num);
        }
    }

    private void insertHiddenSingles(){
         
        eliminateAll();
         
        for (int row = 0; row < 9; row++){             int multiplicityOf = new int10;             for (int col = 0; col < 9; col++)                 if (_model.getVal(row, col) == 0)                     for (Object candidate : candidatesrowcol)                         multiplicityOf(int)candidate += 1;               for (int candidate = 1; candidate <= 9; candidate++)                 if (multiplicityOfcandidate == 1)                     for (int col = 0; col < 9; col++)                     if(_model.isValidMove(row, col, candidate))                         tryInsert(row, col, candidate);         }                   eliminateAll();           for (int col = 0; col < 9; col++){             int multiplicityOf = new int10;             for (int row = 0; row < 9; row++)                 if (_model.getVal(row, col) == 0)                     for (Object candidate : candidatesrowcol)                         multiplicityOf(int)candidate += 1;               for (int candidate = 1; candidate <= 9; candidate++)                 if (multiplicityOfcandidate == 1)                     for (int row = 0; row < 9; row++)                     if(_model.isValidMove(row, col, candidate))                         tryInsert(row, col, candidate);         }                   eliminateAll();           for (int x = 0; x < 3; x++){             for (int y = 0; y < 3; y++){                 int multiplicityOf = new int10;                  int rowOffset = x*3; int colOffset = y*3;                 for (int i = 0; i < 3; i++){                     for (int j = 0; j < 3; j++)                         if (_model.getVal(rowOffset+i, colOffset+j) == 0)                             for (Object candidate : candidatesrowOffset+icolOffset+j)                                 multiplicityOf(int)candidate += 1;                  }                   for (Integer candidate = 1; candidate <= 9; candidate++)                     if (multiplicityOfcandidate == 1)                         for (int i = 0; i < 3; i++)                             for (int j = 0; j < 3; j++)                     if(_model.isValidMove(rowOffset+i, colOffset+j, candidate))                                 tryInsert(rowOffset+i, colOffset+j, candidate);             }         }     }     private void tryInsert(int row, int col, int candidate){         if(_model.getVal(row, col) == 0 && candidatesrowcol.contains(candidate)){         candidatesrowcol.remove((int)candidatesrowcol.indexOf(candidate));             _model.setVal(row, col, candidate);             print(row, col, candidate);         }     }     public void solve() {     Solver();     }     public void clear(){     for (int row = 0; row < PUZZLE_SIZE; row++) {             for (int col = 0; col < PUZZLE_SIZE; col++) {                 _model.setVal(row, col, 0);                 tfCellsrowcol.setText("");                 tfCellsrowcol.setBackground(OPEN_CELL_BGCOLOR);                 tfCellsrowcol.setEditable(true);             }         }     }     public void openPuzzle() {     JFileChooser fileChooser = new JFileChooser();     int returnVal = fileChooser.showDialog(this, "Open");     File file = fileChooser.getSelectedFile();     logToConsole("Loading file "+ file.getName());     if (returnVal != JFileChooser.APPROVE_OPTION) {         return;     }       int r = 0; BufferedReader br = null;     try{ String line;     br = new BufferedReader(new FileReader(file)); while ((line = br.readLine()) != null) {         String splitLine = line.split("");         if (splitLine.length < PUZZLE_SIZE) {             throw new IllegalArgumentException(String.format("Row length(%d) not correct in %s at row %d",                     splitLine.length, file, r));         }         for (int c = 0; c < PUZZLE_SIZE; c++) {                         try { int i = Integer.parseInt(splitLinec);             _model.setVal(r, c, i); } catch (NumberFormatException e) {             _model.setVal(r, c, 0); }                         setVal(r, c);         }         if(r == PUZZLE_SIZE){         break;         }                 r++; } logToConsole("File loaded."); } catch(IOException ex){ logToConsole(ex.getMessage()); } catch(IllegalArgumentException ex){ logToConsole(ex.getMessage()); System.out.println(ex.getMessage()); } finally{ try{ br.close(); } catch(IOException ex){ } }         }    private class InputListener implements ActionListener {         @Override       public void actionPerformed(ActionEvent e) {          int rowSelected = -1;          int colSelected = -1;                    JTextField source = (JTextField)e.getSource();System.out.println("here");                    boolean found = false;          for (int row = 0; row < PUZZLE_SIZE && !found; ++row) {             for (int col = 0; col < PUZZLE_SIZE && !found; ++col) {               if (tfCellsrowcol == source) {                   rowSelected = row;                   colSelected = col;                   found = true;               }             }     } if(found){   String str = tfCellsrowSelectedcolSelected.getText(); _model.setVal(rowSelected, colSelected, 0); tfCellsrowSelectedcolSelected.setBackground(OPEN_CELL_BGCOLOR); try{ if(str != null && !str.isEmpty()){ int num = Integer.parseInt(str); if(_model.isValidMove(rowSelected, colSelected, num)){ _model.setVal(rowSelected, colSelected, num); } else{ tfCellsrowSelectedcolSelected.setBackground(OPEN_CELL_TEXT_NO); } } } catch(NumberFormatException nfe){ tfCellsrowSelectedcolSelected.setBackground(OPEN_CELL_TEXT_NO); }   }       }    }      }

x

Hi!
I'm Barry!

Would you like to get a custom essay? How about receiving a customized one?

Check it out