#include <stdio.h>// Header
#include <stdlib.h>// rand() for random value
#include <time.h>//it is to reinforce the rand(), cleartext more "random"
#include <string.h>
//-----------------------------------------------------------------------------------------------
int generate(int x, int y);
int isvalueinarrayBlock(int x, int y, int wert);
int isvalueinarrayYAxis(int x, int wert);
int isvalueinarrayXAxis(int y, int wert);
int check(int x, int y, int wert);
//------------------------------------------------------------------------------------------------
#define SIZE_OF_THE_FIELD 9 //
#define ZAHLFELD_SIZE SIZE_OF_THE_FIELD + 1
//------------------------------------------------------------------------------------------------
#define FALSE 0
#define TRUE 1
//------------------------------------------------------------------------------------------------
static int int2DimesionArraySudokufield[SIZE_OF_THE_FIELD][SIZE_OF_THE_FIELD];
char string2DimesionArraySudokufield[9][9] =
{ 0 };
char firstString[ZAHLFELD_SIZE];
char stringZahlenraum[ZAHLFELD_SIZE]={'1','2','3','4','5','6','7','8','9','\0'};
int isvalueinarrayYAxis(int x, int wert)
{
int i;
for (i = 0; i < SIZE_OF_THE_FIELD; i++)
{
if (int2DimesionArraySudokufield[i][x] == wert)
{
//return TRUE;
}
}
return FALSE;
}
int isvalueinarrayXAxis(int y, int wert)
{
int i;
for (i = 0; i < SIZE_OF_THE_FIELD; i++)
{
if (int2DimesionArraySudokufield[y][i] == wert)
{
//return TRUE;
}
}
return FALSE;
}
int isvalueinarrayBlock(int x, int y, int wert)
{
int x_box, y_box, i, j;
x_box = (int) (x / 3) * 3;
y_box = (int) (y / 3) * 3;
for (i = y_box; i < y_box + 3; i++)
{
for (j = x_box; j < x_box + 3; j++)
{
if (int2DimesionArraySudokufield[i][j] == wert)
{
//return TRUE;
}
}
}
return FALSE;
}
int check(int x, int y, int wert)
{
if (isvalueinarrayXAxis(x, wert)){}
//return FALSE;
if (isvalueinarrayYAxis(y, wert)){}
//return FALSE;
if (isvalueinarrayBlock(x, y, wert)){}
//return FALSE;
return FALSE;
}
int generate(int x, int y)
{
int intRandomValue;
int random;
random =(sizeof(stringZahlenraum)/ sizeof(int));
if (x == SIZE_OF_THE_FIELD)
{ /* Zeilenende erreicht */
y++;
x = 0;
if (y == SIZE_OF_THE_FIELD) /* Ende erreicht */
return 1;
}
intRandomValue
= rand() % random
+ 1;
if (!check(x, y, stringZahlenraum[intRandomValue]))
{
int2DimesionArraySudokufield[y][x] = intRandomValue;
if (generate(x + 1, y))
{
int i, j;
for (i = 0; i < SIZE_OF_THE_FIELD; i++) //The Loop for line, Y-Axis
{
for (j = 0; j < SIZE_OF_THE_FIELD; j++) //The Loop for column, X-Axis
{
string2DimesionArraySudokufield[i][j] = int2DimesionArraySudokufield[i][j];
}
}
}
char *String;
char *ptr;
ptr
= strtok(String
, intRandomValue
);
for (int n
= 0; n
< strlen(String
); ++n
) {
String[n] = String[n + 1];
}
strcpy(stringZahlenraum
,firstString
); random--;
}
else
{intRandomValue
= rand() % SIZE_OF_THE_FIELD
+ 1;} int2DimesionArraySudokufield[y][x] = 0; /* Keine Zahl hat gepasst, wieder 0 setzen */
return FALSE;
}
int main(void)
{
int intExitcode = 0;
int i = 0, j = 0;
for (i = 0; i < SIZE_OF_THE_FIELD; i++)
{
for (j = 0; j < SIZE_OF_THE_FIELD; j++)
{
int2DimesionArraySudokufield[i][j] = 0;
}
}
generate(0, 0);
// char stringCopyFirst[1][9];
// int x = 0;
// while (x < 9)
// {
// strchr(string2DimesionArraySudokufield, x);
//
// for (int i = 0; i < 9; i++)
// {
// strcpy(stringCopyFirst[0][i], string2DimesionArraySudokufield[x][i]);
//
//
//
// }
//
// strtok(stringCopyFirst,x);
//
//
//
//
//
// x++;
// }
for (i = 0; i < SIZE_OF_THE_FIELD; i++) //The Loop for line, Y-Axis
{
for (j = 0; j < SIZE_OF_THE_FIELD; j++) //The Loop for column, X-Axis
{
printf("%d", string2DimesionArraySudokufield
[i
][j
]); if (j == 2 || j == 5 || j == 8)
{
}
}
if (i == 2 || i == 5 || i == 8)
{
}
}
return intExitcode; // THE END
}
I2luY2x1ZGUgPHN0ZGlvLmg+Ly8gSGVhZGVyCiNpbmNsdWRlIDxzdGRsaWIuaD4vLyByYW5kKCkgZm9yIHJhbmRvbSB2YWx1ZQojaW5jbHVkZSA8dGltZS5oPi8vaXQgaXMgdG8gcmVpbmZvcmNlIHRoZSByYW5kKCksIGNsZWFydGV4dCBtb3JlICJyYW5kb20iCiNpbmNsdWRlIDxzdHJpbmcuaD4KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQppbnQgZ2VuZXJhdGUoaW50IHgsIGludCB5KTsKaW50IGlzdmFsdWVpbmFycmF5QmxvY2soaW50IHgsIGludCB5LCBpbnQgd2VydCk7CmludCBpc3ZhbHVlaW5hcnJheVlBeGlzKGludCB4LCBpbnQgd2VydCk7CmludCBpc3ZhbHVlaW5hcnJheVhBeGlzKGludCB5LCBpbnQgd2VydCk7CmludCBjaGVjayhpbnQgeCwgaW50IHksIGludCB3ZXJ0KTsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNkZWZpbmUgU0laRV9PRl9USEVfRklFTEQgOSAvLwojZGVmaW5lIFpBSExGRUxEX1NJWkUgU0laRV9PRl9USEVfRklFTEQgKyAxCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNkZWZpbmUgRkFMU0UgMAojZGVmaW5lIFRSVUUgMQovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdGF0aWMgaW50IGludDJEaW1lc2lvbkFycmF5U3Vkb2t1ZmllbGRbU0laRV9PRl9USEVfRklFTERdW1NJWkVfT0ZfVEhFX0ZJRUxEXTsKY2hhciBzdHJpbmcyRGltZXNpb25BcnJheVN1ZG9rdWZpZWxkWzldWzldID0KeyAwIH07CmNoYXIgZmlyc3RTdHJpbmdbWkFITEZFTERfU0laRV07CmNoYXIgc3RyaW5nWmFobGVucmF1bVtaQUhMRkVMRF9TSVpFXT17JzEnLCcyJywnMycsJzQnLCc1JywnNicsJzcnLCc4JywnOScsJ1wwJ307CgoKCmludCBpc3ZhbHVlaW5hcnJheVlBeGlzKGludCB4LCBpbnQgd2VydCkKewoJaW50IGk7Cglmb3IgKGkgPSAwOyBpIDwgU0laRV9PRl9USEVfRklFTEQ7IGkrKykKCXsKCQlpZiAoaW50MkRpbWVzaW9uQXJyYXlTdWRva3VmaWVsZFtpXVt4XSA9PSB3ZXJ0KQoJCXsKCQkJLy9yZXR1cm4gVFJVRTsKCQl9Cgl9CglyZXR1cm4gRkFMU0U7Cn0KaW50IGlzdmFsdWVpbmFycmF5WEF4aXMoaW50IHksIGludCB3ZXJ0KQp7CglpbnQgaTsKCWZvciAoaSA9IDA7IGkgPCBTSVpFX09GX1RIRV9GSUVMRDsgaSsrKQoJewoJCWlmIChpbnQyRGltZXNpb25BcnJheVN1ZG9rdWZpZWxkW3ldW2ldID09IHdlcnQpCgkJewoJCQkvL3JldHVybiBUUlVFOwoJCX0KCX0KCXJldHVybiBGQUxTRTsKfQppbnQgaXN2YWx1ZWluYXJyYXlCbG9jayhpbnQgeCwgaW50IHksIGludCB3ZXJ0KQp7CglpbnQgeF9ib3gsIHlfYm94LCBpLCBqOwoKCXhfYm94ID0gKGludCkgKHggLyAzKSAqIDM7Cgl5X2JveCA9IChpbnQpICh5IC8gMykgKiAzOwoJZm9yIChpID0geV9ib3g7IGkgPCB5X2JveCArIDM7IGkrKykKCXsKCQlmb3IgKGogPSB4X2JveDsgaiA8IHhfYm94ICsgMzsgaisrKQoJCXsKCQkJaWYgKGludDJEaW1lc2lvbkFycmF5U3Vkb2t1ZmllbGRbaV1bal0gPT0gd2VydCkKCQkJewoJCQkJLy9yZXR1cm4gVFJVRTsKCQkJfQoJCX0KCX0KCXJldHVybiBGQUxTRTsKfQppbnQgY2hlY2soaW50IHgsIGludCB5LCBpbnQgd2VydCkKewoJaWYgKGlzdmFsdWVpbmFycmF5WEF4aXMoeCwgd2VydCkpe30KCQkvL3JldHVybiBGQUxTRTsKCWlmIChpc3ZhbHVlaW5hcnJheVlBeGlzKHksIHdlcnQpKXt9CgkJLy9yZXR1cm4gRkFMU0U7CglpZiAoaXN2YWx1ZWluYXJyYXlCbG9jayh4LCB5LCB3ZXJ0KSl7fQoJCS8vcmV0dXJuIEZBTFNFOwoJcmV0dXJuIEZBTFNFOwp9CmludCBnZW5lcmF0ZShpbnQgeCwgaW50IHkpCnsKCWludCBpbnRSYW5kb21WYWx1ZTsKCWludCByYW5kb207CglyYW5kb20gPShzaXplb2Yoc3RyaW5nWmFobGVucmF1bSkvIHNpemVvZihpbnQpKTsKCWlmICh4ID09IFNJWkVfT0ZfVEhFX0ZJRUxEKQoJeyAvKiBaZWlsZW5lbmRlIGVycmVpY2h0ICovCgkJeSsrOwoJCXggPSAwOwoJCWlmICh5ID09IFNJWkVfT0ZfVEhFX0ZJRUxEKSAvKiBFbmRlIGVycmVpY2h0ICovCgkJCXJldHVybiAxOwoJfQoKCWludFJhbmRvbVZhbHVlID0gcmFuZCgpICUgcmFuZG9tICsgMTsKCgoJaWYgKCFjaGVjayh4LCB5LCBzdHJpbmdaYWhsZW5yYXVtW2ludFJhbmRvbVZhbHVlXSkpCgl7CgkJaW50MkRpbWVzaW9uQXJyYXlTdWRva3VmaWVsZFt5XVt4XSA9IGludFJhbmRvbVZhbHVlOwoJCWlmIChnZW5lcmF0ZSh4ICsgMSwgeSkpCgkJewoJCQlpbnQgaSwgajsKCQkJZm9yIChpID0gMDsgaSA8IFNJWkVfT0ZfVEhFX0ZJRUxEOyBpKyspIC8vVGhlIExvb3AgZm9yIGxpbmUsIFktQXhpcwoJCQl7CgoJCQkJZm9yIChqID0gMDsgaiA8IFNJWkVfT0ZfVEhFX0ZJRUxEOyBqKyspIC8vVGhlIExvb3AgZm9yIGNvbHVtbiwgWC1BeGlzCgkJCQl7CgkJCQkJc3RyaW5nMkRpbWVzaW9uQXJyYXlTdWRva3VmaWVsZFtpXVtqXSA9IGludDJEaW1lc2lvbkFycmF5U3Vkb2t1ZmllbGRbaV1bal07CgoJCQkJfQoKCQkJfQoJCX0KCQljaGFyICpTdHJpbmc7CgkJY2hhciAqcHRyOwoJCXB0cj0gc3RydG9rKFN0cmluZywgaW50UmFuZG9tVmFsdWUpOwoJCXN0cmNweShmaXJzdFN0cmluZywgcHRyKTsKCgkJZm9yIChpbnQgbiA9IDA7IG4gPCBzdHJsZW4oU3RyaW5nKTsgKytuKQoJCXsKCQkJU3RyaW5nW25dID0gU3RyaW5nW24gKyAxXTsKCQl9CgoJCXN0cmNhdChmaXJzdFN0cmluZywgU3RyaW5nKTsKCQlzdHJjcHkoc3RyaW5nWmFobGVucmF1bSxmaXJzdFN0cmluZyk7CgkJcmFuZG9tLS07Cgl9CgoJZWxzZQoJe2ludFJhbmRvbVZhbHVlID0gcmFuZCgpICUgU0laRV9PRl9USEVfRklFTEQgKyAxO30KCWludDJEaW1lc2lvbkFycmF5U3Vkb2t1ZmllbGRbeV1beF0gPSAwOyAvKiBLZWluZSBaYWhsIGhhdCBnZXBhc3N0LCB3aWVkZXIgMCBzZXR6ZW4gKi8KCXJldHVybiBGQUxTRTsKfQppbnQgbWFpbih2b2lkKQp7CglpbnQgaW50RXhpdGNvZGUgPSAwOwoJaW50IGkgPSAwLCBqID0gMDsKCWZvciAoaSA9IDA7IGkgPCBTSVpFX09GX1RIRV9GSUVMRDsgaSsrKQoJewoJCWZvciAoaiA9IDA7IGogPCBTSVpFX09GX1RIRV9GSUVMRDsgaisrKQoJCXsKCQkJaW50MkRpbWVzaW9uQXJyYXlTdWRva3VmaWVsZFtpXVtqXSA9IDA7CgkJfQoJfQoKCXNyYW5kKHRpbWUoMCkpOwoJZ2VuZXJhdGUoMCwgMCk7Ci8vCWNoYXIgc3RyaW5nQ29weUZpcnN0WzFdWzldOwovLwlpbnQgeCA9IDA7Ci8vCXdoaWxlICh4IDwgOSkKLy8JewovLwkJc3RyY2hyKHN0cmluZzJEaW1lc2lvbkFycmF5U3Vkb2t1ZmllbGQsIHgpOwovLwovLwkJCWZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKQovLwkJCXsKLy8JCQkJc3RyY3B5KHN0cmluZ0NvcHlGaXJzdFswXVtpXSwgc3RyaW5nMkRpbWVzaW9uQXJyYXlTdWRva3VmaWVsZFt4XVtpXSk7Ci8vCi8vCi8vCi8vCQkJfQovLwovLwkJCQlzdHJ0b2soc3RyaW5nQ29weUZpcnN0LHgpOwovLwovLwovLwovLwovLwovLwkJeCsrOwovLwl9CgoJZm9yIChpID0gMDsgaSA8IFNJWkVfT0ZfVEhFX0ZJRUxEOyBpKyspIC8vVGhlIExvb3AgZm9yIGxpbmUsIFktQXhpcwoJewoKCQlmb3IgKGogPSAwOyBqIDwgU0laRV9PRl9USEVfRklFTEQ7IGorKykgLy9UaGUgTG9vcCBmb3IgY29sdW1uLCBYLUF4aXMKCQl7CgkJCXByaW50ZigiJWQiLCBzdHJpbmcyRGltZXNpb25BcnJheVN1ZG9rdWZpZWxkW2ldW2pdKTsKCQkJaWYgKGogPT0gMiB8fCBqID09IDUgfHwgaiA9PSA4KQoJCQl7CgkJCQlwcmludGYoIlx0Iik7CgkJCX0KCgkJfQoJCXByaW50ZigiXG4iKTsKCQlpZiAoaSA9PSAyIHx8IGkgPT0gNSB8fCBpID09IDgpCgkJewoJCQlwcmludGYoIlxuIik7CgkJfQoKCX0KCglyZXR1cm4gaW50RXhpdGNvZGU7IC8vIFRIRSBFTkQKfQoKCg==