Skip to content

Instantly share code, notes, and snippets.

@Erezbiox1
Created August 18, 2017 13:18
Show Gist options
  • Save Erezbiox1/c2d585ae0331fe2d8d2200fb455c2bf1 to your computer and use it in GitHub Desktop.
Save Erezbiox1/c2d585ae0331fe2d8d2200fb455c2bf1 to your computer and use it in GitHub Desktop.
A step solver for my app, Addathon.
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