From 5681d3a6443486c166b3f73ea7ff72b0ead3697b Mon Sep 17 00:00:00 2001 From: Felix Martin Date: Thu, 22 Apr 2021 14:56:42 -0400 Subject: [PATCH] Add my Java Sudoku solver from college, haha --- java/sudoku.java | 150 ++++++++++++ txt/EulerProblem096.txt | 500 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 650 insertions(+) create mode 100644 java/sudoku.java create mode 100644 txt/EulerProblem096.txt diff --git a/java/sudoku.java b/java/sudoku.java new file mode 100644 index 0000000..4a8f961 --- /dev/null +++ b/java/sudoku.java @@ -0,0 +1,150 @@ +import java.util.*; +import javax.swing.*; + +import java.io.IOException; +import java.io.FileReader; +import java.io.Reader; + +class Sudoku { + + int[] fieldValues = new int[81]; + int[] emptyFields; + int currentField; + + void printField() { + String fieldOut = ""; + int i; + for(i=0; i<81; i++) { + if(i%27 == 0 && i>0) { + fieldOut += "\n---------------------\n"; + } + else if(i%9 == 0) { + fieldOut += "\n"; + } + else if(i%3 == 0) { + fieldOut += "| "; + } + if(fieldValues[i] != 0) { + fieldOut += fieldValues[i] + " "; + } + else { + fieldOut += " "; + } + } + System.out.println(fieldOut); + } + + /** Function asks for an file name which + * should contain a sudoku and this sudoku + * into fieldValues, Empty fields should + * be marked by a '0' + */ + void loadFieldFromFile() { + String fileName = ""; + Reader reader = null; + int i = 0; + + fileName = JOptionPane.showInputDialog( "Enter filename" ); + System.out.println(fileName); + + try + { + reader = new FileReader (fileName); + for ( int c; ( c = reader.read() ) != -1; ) { + int v = 0; + v = c - (int) '0'; + if( v >= 0 && v <= 9 ) { + fieldValues[i] = v; + i++; + } + if( i > 80 ) break; + } + } + catch ( IOException e) { + System.err.println( "Could not open file " + fileName ); + return; + } + finally { + try { reader.close(); } catch ( Exception e ) { e.printStackTrace(); } + } + + System.out.println("File loaded"); + } + + /** Function checks if "number" may be inserted + * in field "index" + */ + boolean isNumberAllowed(int number, int index) { + int i = 0, j = 0; + /* check col */ + for(i=index%9; i<81; i+=9) { + if(fieldValues[i] == number) + return false; + } + /* check row */ + for(i=index/9*9; i<(index/9*9+9); i++) { + if(fieldValues[i] == number) + return false; + } + /* check field */ + int lu = (index/9/3*27) + (index%9/3*3); //first index of field + for(j = 0; j<3; j++) { + for(i = lu+(j*9); i