aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoramelia <[email protected]>2022-11-28 09:14:14 -0600
committeramelia <[email protected]>2022-11-28 09:14:14 -0600
commitdda71e26ce4f644b87dd52bd808d8a5fc7ee4796 (patch)
tree7010c4204593b9c111a03c1ddb979705e74dc28d
parent7e6657d427f700bb339d90fb5b483720f87fd481 (diff)
main.c
-rw-r--r--main.c150
1 files changed, 97 insertions, 53 deletions
diff --git a/main.c b/main.c
index 51b6a51..49094a3 100644
--- a/main.c
+++ b/main.c
@@ -120,73 +120,109 @@ array rowtocol(matrix m,int col){
array getsquare(matrix q, int n){//only works with 9x9 probably
array sq;
arrayinit(&sq,1);
- int i = 0;
- int i2 = 0;
switch(n){
+ case 0:
+ arrayins(&sq,q.at[0].at[0]);
+ arrayins(&sq,q.at[0].at[1]);
+ arrayins(&sq,q.at[0].at[2]);
+ arrayins(&sq,q.at[1].at[0]);
+ arrayins(&sq,q.at[1].at[1]);
+ arrayins(&sq,q.at[2].at[2]);
+ arrayins(&sq,q.at[2].at[0]);
+ arrayins(&sq,q.at[2].at[1]);
+ arrayins(&sq,q.at[2].at[2]);
+ break;
case 1:
- i = 3;
+ arrayins(&sq,q.at[0].at[0+3]);
+ arrayins(&sq,q.at[0].at[1+3]);
+ arrayins(&sq,q.at[0].at[2+3]);
+ arrayins(&sq,q.at[1].at[0+3]);
+ arrayins(&sq,q.at[1].at[1+3]);
+ arrayins(&sq,q.at[1].at[2+3]);
+ arrayins(&sq,q.at[2].at[0+3]);
+ arrayins(&sq,q.at[2].at[1+3]);
+ arrayins(&sq,q.at[2].at[2+3]);
break;
case 2:
- i =6;
+ arrayins(&sq,q.at[0].at[0+6]);
+ arrayins(&sq,q.at[0].at[1+6]);
+ arrayins(&sq,q.at[0].at[2+6]);
+ arrayins(&sq,q.at[1].at[0+6]);
+ arrayins(&sq,q.at[1].at[1+6]);
+ arrayins(&sq,q.at[1].at[2+6]);
+ arrayins(&sq,q.at[2].at[0+6]);
+ arrayins(&sq,q.at[2].at[1+6]);
+ arrayins(&sq,q.at[2].at[2+6]);
break;
case 3:
- i2 = 3;
+ arrayins(&sq,q.at[0+3].at[0]);
+ arrayins(&sq,q.at[0+3].at[1]);
+ arrayins(&sq,q.at[0+3].at[2]);
+ arrayins(&sq,q.at[1+3].at[0]);
+ arrayins(&sq,q.at[1+3].at[1]);
+ arrayins(&sq,q.at[1+3].at[2]);
+ arrayins(&sq,q.at[2+3].at[0]);
+ arrayins(&sq,q.at[2+3].at[1]);
+ arrayins(&sq,q.at[2+3].at[2]);
+ break;
case 4:
- i2 = 3;
- i = 3;
+ arrayins(&sq,q.at[0+3].at[0+3]);
+ arrayins(&sq,q.at[0+3].at[1+3]);
+ arrayins(&sq,q.at[0+3].at[2+3]);
+ arrayins(&sq,q.at[1+3].at[0+3]);
+ arrayins(&sq,q.at[1+3].at[1+3]);
+ arrayins(&sq,q.at[1+3].at[2+3]);
+ arrayins(&sq,q.at[2+3].at[0+3]);
+ arrayins(&sq,q.at[2+3].at[1+3]);
+ arrayins(&sq,q.at[2+3].at[2+3]);
break;
case 5:
- i2 = 3;
- i = 6;
+ arrayins(&sq,q.at[0+3].at[0+6]);
+ arrayins(&sq,q.at[0+3].at[1+6]);
+ arrayins(&sq,q.at[0+3].at[2+6]);
+ arrayins(&sq,q.at[1+3].at[0+6]);
+ arrayins(&sq,q.at[1+3].at[1+6]);
+ arrayins(&sq,q.at[1+3].at[2+6]);
+ arrayins(&sq,q.at[2+3].at[0+6]);
+ arrayins(&sq,q.at[2+3].at[1+6]);
+ arrayins(&sq,q.at[2+3].at[2+6]);
break;
case 6:
- i2 =6;
+ arrayins(&sq,q.at[0+6].at[0]);
+ arrayins(&sq,q.at[0+6].at[1]);
+ arrayins(&sq,q.at[0+6].at[2]);
+ arrayins(&sq,q.at[1+6].at[0]);
+ arrayins(&sq,q.at[1+6].at[1]);
+ arrayins(&sq,q.at[1+6].at[2]);
+ arrayins(&sq,q.at[2+6].at[0]);
+ arrayins(&sq,q.at[2+6].at[1]);
+ arrayins(&sq,q.at[2+6].at[2]);
break;
case 7:
- i2 =6;
- i = 3;
+ arrayins(&sq,q.at[0+6].at[0+3]);
+ arrayins(&sq,q.at[0+6].at[1+3]);
+ arrayins(&sq,q.at[0+6].at[2+3]);
+ arrayins(&sq,q.at[1+6].at[0+3]);
+ arrayins(&sq,q.at[1+6].at[1+3]);
+ arrayins(&sq,q.at[1+6].at[2+3]);
+ arrayins(&sq,q.at[2+6].at[0+3]);
+ arrayins(&sq,q.at[2+6].at[1+3]);
+ arrayins(&sq,q.at[2+6].at[2+3]);
break;
case 8:
- i2=6;
- i=6;
+ arrayins(&sq,q.at[0+6].at[0+6]);
+ arrayins(&sq,q.at[0+6].at[1+6]);
+ arrayins(&sq,q.at[0+6].at[2+6]);
+ arrayins(&sq,q.at[1+6].at[0+6]);
+ arrayins(&sq,q.at[1+6].at[1+6]);
+ arrayins(&sq,q.at[1+6].at[2+6]);
+ arrayins(&sq,q.at[2+6].at[0+6]);
+ arrayins(&sq,q.at[2+6].at[1+6]);
+ arrayins(&sq,q.at[2+6].at[2+6]);
break;
}
//arrayins(&sq)
- int a1 = i + 0;
- int a2 = i2 + 0;
-
- int b1 = i + 1;
- int b2 = i2 + 0;
-
- int c1 = i + 2;
- int c2 = i2 + 1;
-
- int d1 = i + 0;
- int d2 = i2 + 1;
-
- int e1 = i + 1;
- int e2 = i2 + 1;
-
- int f1 = i + 2;
- int f2 = i2 + 1;
-
- int g1 = i + 0;
- int g2 = i2 + 2;
-
- int h1 = i + 1;
- int h2 = i2 + 2;
-
- int j1 = i + 2;
- int j2 = i2 + 2;
- arrayins(&sq,q.at[a2].at[a1]);
- arrayins(&sq,q.at[b2].at[b1]);
- arrayins(&sq,q.at[c2].at[c1]);
- arrayins(&sq,q.at[d2].at[d1]);
- arrayins(&sq,q.at[e2].at[e1]);
- arrayins(&sq,q.at[f2].at[f1]);
- arrayins(&sq,q.at[g2].at[g1]);
- arrayins(&sq,q.at[h2].at[h1]);
- arrayins(&sq,q.at[j2].at[j1]);
+
return sq;
}
matrix getposible(array a){
@@ -267,13 +303,20 @@ matrix bruteforce(matrix q){
}
} else {
//go through everything after previous value
- for(int z = temp.at[x].at[y]; z!=10;z++){
+ //matrixlist(temp);
+ //printf("%i",temp.at[x].at[y]);
+ //return q;
+ if(temp.at[x].at[y]!=9){
+ for(int z = temp.at[x].at[y]+1; z!=10;z++){
temp.at[x].at[y]=z;
if(isMvalid(temp)==0){
break;
}
temp.at[x].at[y]=0;
}
+ } else {
+ temp.at[x].at[y]=0;
+ }
//
}
if(temp.at[x].at[y]==0){
@@ -290,12 +333,13 @@ matrix bruteforce(matrix q){
y++;
} else {
if(y==0){
+ printf("backtraced alot!");
if(x==0){
printf("\n:( cant continue. must fail");
- return q;
+ return temp;
}
x--;
- y=7;
+ y=8;
} else {
y--;
}
@@ -320,7 +364,6 @@ int main(){
{0,0,0, 0,0,0, 0,0,0},
{0,0,0, 0,0,0, 0,0,0},
};
-
for(int r = 0;r!=9;r++){
array trow;
arrayinit(&trow,1);
@@ -337,6 +380,7 @@ int main(){
clock_t t;
t = clock();
//printf("\n%i\n",isMvalid(sudoku));
+ //arraylist(getsquare(sudoku,0));
bruteforce(sudoku);
t = clock() - t;
double time_taken = ((double)t)/CLOCKS_PER_SEC;