src/de/uapcore/sudoku/Solver.java

Sat, 26 Jan 2013 19:34:31 +0100

author
Mike Becker <universe@uap-core.de>
date
Sat, 26 Jan 2013 19:34:31 +0100
changeset 5
8ddf4af937d7
parent 3
ed931970b4ac
child 7
2c0a2766461c
permissions
-rw-r--r--

moved field methods to field class + added (parts of the) document handler

universe@3 1 /*
universe@3 2 * Copyright 2013 Mike Becker. All rights reserved.
universe@3 3 *
universe@3 4 * Redistribution and use in source and binary forms, with or without
universe@3 5 * modification, are permitted provided that the following conditions are met:
universe@3 6 *
universe@3 7 * 1. Redistributions of source code must retain the above copyright
universe@3 8 * notice, this list of conditions and the following disclaimer.
universe@3 9 *
universe@3 10 * 2. Redistributions in binary form must reproduce the above copyright
universe@3 11 * notice, this list of conditions and the following disclaimer in the
universe@3 12 * documentation and/or other materials provided with the distribution.
universe@3 13 *
universe@3 14 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
universe@3 15 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
universe@3 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
universe@3 17 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
universe@3 18 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
universe@3 19 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
universe@3 20 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
universe@3 21 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
universe@3 22 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
universe@3 23 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
universe@3 24 * POSSIBILITY OF SUCH DAMAGE.
universe@3 25 */
universe@3 26
universe@2 27 package de.uapcore.sudoku;
universe@2 28
universe@2 29 /**
universe@2 30 *
universe@2 31 * @author mike
universe@2 32 */
universe@2 33 public final class Solver {
universe@2 34
universe@2 35 public Solver() {
universe@2 36 }
universe@2 37
universe@2 38 public boolean check(Field f) {
universe@2 39 int line[];
universe@2 40 for (int i = 0 ; i < 9 ; i++) {
universe@5 41 line = f.getRow(i);
universe@2 42 if (!valid(line)) {
universe@2 43 return false;
universe@2 44 }
universe@5 45 line = f.getColumn(i);
universe@2 46 if (!valid(line)) {
universe@2 47 return false;
universe@2 48 }
universe@2 49 }
universe@2 50
universe@2 51 int square[][];
universe@2 52 for (int x = 0 ; x < 3 ; x++) {
universe@2 53 for (int y = 0 ; y < 3 ; y++) {
universe@5 54 square = f.getSquare(x, y);
universe@2 55 if (!valid(square)) {
universe@2 56 return false;
universe@2 57 }
universe@2 58 }
universe@2 59 }
universe@2 60
universe@2 61 return true;
universe@2 62 }
universe@2 63
universe@2 64 private boolean complete(int[][] square) {
universe@2 65 for (int x = 0 ; x < 3 ; x++) {
universe@2 66 for (int y = 0 ; y < 3 ; y++) {
universe@2 67 if (square[x][y] == 0) {
universe@2 68 return false;
universe@2 69 }
universe@2 70 }
universe@2 71 }
universe@2 72 return true;
universe@2 73 }
universe@2 74
universe@2 75 private boolean complete(int[] line) {
universe@2 76 for (int i = 0 ; i < 9 ; i++) {
universe@2 77 if (line[i] == 0) {
universe@2 78 return false;
universe@2 79 }
universe@2 80 }
universe@2 81 return true;
universe@2 82 }
universe@2 83
universe@2 84 private boolean valid(int[] line) {
universe@5 85 int numbers[];
universe@5 86 numbers = new int[9];
universe@2 87 for (int i = 0 ; i < 9 ; i++) {
universe@2 88 int l = line[i]-1;
universe@2 89 if (l >= 0) {
universe@5 90 if ((++numbers[l]) > 1) {
universe@2 91 return false;
universe@2 92 }
universe@2 93 }
universe@2 94 }
universe@2 95
universe@2 96 return true;
universe@2 97 }
universe@2 98
universe@2 99 private boolean valid(int[][] square) {
universe@2 100 int[] line = new int[9];
universe@2 101 for (int x = 0 ; x < 3 ; x++) {
universe@5 102 System.arraycopy(square[x], 0, line, 3*x, 3);
universe@2 103 }
universe@2 104 return valid(line);
universe@2 105 }
universe@2 106 }

mercurial