Created
August 18, 2017 13:18
-
-
Save Erezbiox1/c2d585ae0331fe2d8d2200fb455c2bf1 to your computer and use it in GitHub Desktop.
A step solver for my app, Addathon.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.erezbiox1; | |
import com.sun.javaws.exceptions.InvalidArgumentException; | |
import java.util.ArrayList; | |
import java.util.List; | |
/** | |
* Created by Erezbiox1 on 17/08/2017. | |
* (C) 2016 Erez Rotem All Rights Reserved. | |
*/ | |
public class Solver { | |
private int mainNumber = 0; | |
private int[] array = new int[9]; | |
private int last = 0; | |
private int[] result = null; | |
public Solver(int mainNumber) { | |
this.mainNumber = mainNumber; | |
} | |
public Solver row(int... row) throws InvalidArgumentException { | |
return row(row[0], row[1], row[2]); | |
} | |
public Solver row(int start, int middle, int end) throws InvalidArgumentException { | |
if(last > 8) | |
error("Row function can only be executed 3 times."); | |
array[last++] = start; | |
array[last++] = middle; | |
array[last++] = end; | |
return this; | |
} | |
public Solver solve() throws InvalidArgumentException { | |
if(last != 8) | |
error("Row function have be executed 3 times."); | |
result = solve(mainNumber, array); | |
return this; | |
} | |
public int[] getOrganized(){ | |
int[] preArray = array, finalArray = new int[9]; | |
List<Integer> list = getList(result); | |
while(true) { | |
int index = 0; | |
for (int i : list) { | |
for (int j = 0; j < preArray.length; j++) | |
if (preArray[j] == i) | |
index = j; | |
} | |
Integer number = preArray[index]; | |
list.remove(Integer.valueOf(number)); | |
preArray[index] = 0; | |
finalArray[index] = number; | |
if(list.isEmpty()) | |
break; | |
} | |
return finalArray; | |
} | |
public Solver print(){ | |
int[] array = getOrganized(); | |
System.out.println(array[0] + " " + array[1] + " " + array[2]); | |
System.out.println(array[3] + " " + array[4] + " " + array[5]); | |
System.out.println(array[6] + " " + array[7] + " " + array[8]); | |
return this; | |
} | |
public Solver printRaw(){ | |
System.out.println(combine(getRaw())); | |
return this; | |
} | |
public int[] getRaw(){ | |
return result; | |
} | |
private static int[] solve(int mainNumber, int... numbers){ | |
int[] array = {0, 0, 0, 0, 0, 0, 0, 0, 0}; | |
for (int a = 0; a < 9; a++) | |
for (int b = 0; b < 9; b++) | |
if(a != b) | |
if( | |
numbers[a] + | |
numbers[b] | |
== mainNumber | |
){ | |
array[0] = numbers[a]; | |
array[1] = numbers[b]; | |
return array; | |
} | |
for (int a = 0; a < 9; a++) | |
for (int b = 0; b < 9; b++) | |
if(a != b) | |
for (int c = 0; c < 9; c++) | |
if(!(c == a || c == b)) | |
if( | |
numbers[a] + | |
numbers[b] + | |
numbers[c] | |
== mainNumber | |
){ | |
array[0] = numbers[a]; | |
array[1] = numbers[b]; | |
array[2] = numbers[c]; | |
return array; | |
} | |
for (int a = 0; a < 9; a++) | |
for (int b = 0; b < 9; b++) | |
if(a != b) | |
for (int c = 0; c < 9; c++) | |
if(!(c == a || c == b)) | |
for (int d = 0; d < 9; d++) | |
if(!(d == a || d == b || d == c)) | |
if( | |
numbers[a] + | |
numbers[b] + | |
numbers[c] + | |
numbers[d] | |
== mainNumber | |
){ | |
array[0] = numbers[a]; | |
array[1] = numbers[b]; | |
array[2] = numbers[c]; | |
array[3] = numbers[d]; | |
return array; | |
} | |
for (int a = 0; a < 9; a++) | |
for (int b = 0; b < 9; b++) | |
if(a != b) | |
for (int c = 0; c < 9; c++) | |
if(!(c == a || c == b)) | |
for (int d = 0; d < 9; d++) | |
if(!(d == a || d == b || d == c)) | |
for (int e = 0; e < 9; e++) | |
if(!(e == a || e == b || e == c || e == d)) | |
if( | |
numbers[a] + | |
numbers[b] + | |
numbers[c] + | |
numbers[d] + | |
numbers[e] | |
== mainNumber | |
){ | |
array[0] = numbers[a]; | |
array[1] = numbers[b]; | |
array[2] = numbers[c]; | |
array[3] = numbers[d]; | |
array[4] = numbers[e]; | |
return array; | |
} | |
for (int a = 0; a < 9; a++) | |
for (int b = 0; b < 9; b++) | |
if(a != b) | |
for (int c = 0; c < 9; c++) | |
if(!(c == a || c == b)) | |
for (int d = 0; d < 9; d++) | |
if(!(d == a || d == b || d == c)) | |
for (int e = 0; e < 9; e++) | |
if(!(e == a || e == b || e == c || e == d)) | |
for (int f = 0; f < 9; f++) | |
if(!(f == a || f == b || f == c || f == d || f == e)) | |
if( | |
numbers[a] + | |
numbers[b] + | |
numbers[c] + | |
numbers[d] + | |
numbers[e] + | |
numbers[f] | |
== mainNumber | |
){ | |
array[0] = numbers[a]; | |
array[1] = numbers[b]; | |
array[2] = numbers[c]; | |
array[3] = numbers[d]; | |
array[4] = numbers[e]; | |
array[5] = numbers[f]; | |
return array; | |
} | |
for (int a = 0; a < 9; a++) | |
for (int b = 0; b < 9; b++) | |
if(a != b) | |
for (int c = 0; c < 9; c++) | |
if(!(c == a || c == b)) | |
for (int d = 0; d < 9; d++) | |
if(!(d == a || d == b || d == c)) | |
for (int e = 0; e < 9; e++) | |
if(!(e == a || e == b || e == c || e == d)) | |
for (int f = 0; f < 9; f++) | |
if(!(f == a || f == b || f == c || f == d || f == e)) | |
for (int g = 0; g < 9; g++) | |
if(!(g == a || g == b || g == c || g == d || g == e || g == f)) | |
if( | |
numbers[a] + | |
numbers[b] + | |
numbers[c] + | |
numbers[d] + | |
numbers[e] + | |
numbers[f] + | |
numbers[g] | |
== mainNumber | |
){ | |
array[0] = numbers[a]; | |
array[1] = numbers[b]; | |
array[2] = numbers[c]; | |
array[3] = numbers[d]; | |
array[4] = numbers[e]; | |
array[5] = numbers[f]; | |
array[6] = numbers[g]; | |
return array; | |
} | |
for (int a = 0; a < 9; a++) | |
for (int b = 0; b < 9; b++) | |
if(a != b) | |
for (int c = 0; c < 9; c++) | |
if(!(c == a || c == b)) | |
for (int d = 0; d < 9; d++) | |
if(!(d == a || d == b || d == c)) | |
for (int e = 0; e < 9; e++) | |
if(!(e == a || e == b || e == c || e == d)) | |
for (int f = 0; f < 9; f++) | |
if(!(f == a || f == b || f == c || f == d || f == e)) | |
for (int g = 0; g < 9; g++) | |
if(!(g == a || g == b || g == c || g == d || g == e || g == f)) | |
for (int h = 0; h < 9; h++) | |
if(!(h == a || h == b || h == c || h == d || h == e || h == f || h == g)) | |
if( | |
numbers[a] + | |
numbers[b] + | |
numbers[c] + | |
numbers[d] + | |
numbers[e] + | |
numbers[f] + | |
numbers[g] + | |
numbers[h] | |
== mainNumber | |
){ | |
array[0] = numbers[a]; | |
array[1] = numbers[b]; | |
array[2] = numbers[c]; | |
array[3] = numbers[d]; | |
array[4] = numbers[e]; | |
array[5] = numbers[f]; | |
array[6] = numbers[g]; | |
array[7] = numbers[h]; | |
return array; | |
} | |
for (int a = 0; a < 9; a++) | |
for (int b = 0; b < 9; b++) | |
if(a != b) | |
for (int c = 0; c < 9; c++) | |
if(!(c == a || c == b)) | |
for (int d = 0; d < 9; d++) | |
if(!(d == a || d == b || d == c)) | |
for (int e = 0; e < 9; e++) | |
if(!(e == a || e == b || e == c || e == d)) | |
for (int f = 0; f < 9; f++) | |
if(!(f == a || f == b || f == c || f == d || f == e)) | |
for (int g = 0; g < 9; g++) | |
if(!(g == a || g == b || g == c || g == d || g == e || g == f)) | |
for (int h = 0; h < 9; h++) | |
if(!(h == a || h == b || h == c || h == d || h == e || h == f || h == g)) | |
for (int i = 0; i < 9; i++) | |
if(!(i == a || i == b || i == c || i == d || i == e || i == f || i == g || i == h)) | |
if( | |
numbers[a] + | |
numbers[b] + | |
numbers[c] + | |
numbers[d] + | |
numbers[e] + | |
numbers[f] + | |
numbers[g] + | |
numbers[h] + | |
numbers[i] | |
== mainNumber | |
){ | |
array[0] = numbers[a]; | |
array[1] = numbers[b]; | |
array[2] = numbers[c]; | |
array[3] = numbers[d]; | |
array[4] = numbers[e]; | |
array[5] = numbers[f]; | |
array[6] = numbers[g]; | |
array[7] = numbers[h]; | |
array[8] = numbers[i]; | |
return array; | |
} | |
return array; | |
} | |
private static List<Integer> getList(int[] array){ | |
List<Integer> list = new ArrayList<>(); | |
for (int i : array) { | |
list.add(i); | |
} | |
return list; | |
} | |
private static void error(String... errors) throws InvalidArgumentException { | |
throw new InvalidArgumentException(errors); | |
} | |
private static String combine(int[] array){ | |
StringBuilder builder = new StringBuilder(); | |
for (int o : array) | |
builder.append(o + " "); | |
return builder.toString().trim().replaceAll(" ", ", ") + "."; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment