rendered paste body#include <stdio.h>
/* Program for creating a sudoku */
int get_urandom(FILE *fp)
{
int rnd;
fread(&rnd, sizeof(int), 1, fp);
rnd=(rnd % 5)+5;
return rnd;
}
void init_grid(int grid[][9])
{
int y;
int x;
for ( y = 0; y < 9; y++ )
{
for ( x = 0; x < 9; x++ ) { grid[y][x] = 0; }
}
}
/* If n is found in row, return 1. Otherwise return 0. */
int if_row(int grid[][9], int y, int n)
{
int x;
for ( x = 0; x < 9; x++ )
{
if ( grid[y][x] == n )
return 1;
}
return 0;
}
/* If n is found in column, return 1. Otherwise return 0. */
int if_column(int grid[][9], int x, int n)
{
int y;
for ( y = 0; y < 9; y++ )
{
if ( grid[y][x] == n )
return 1;
}
return 0;
}
/* If n is found in region, return 1. Otherwise return 0. */
int if_region(int grid[][9], int y, int x, int n)
{
int y_begin;
int y_end;
int x_begin;
int x_end;
if ( y < 3 ) { y_begin = 0; y_end = 3; }
else if ( y < 6 ) { y_begin = 3; y_end = 6; }
else { y_begin = 6; y_end = 9; }
if ( x < 3 ) { x_begin = 0; x_end = 3; }
else if ( x < 6 ) { x_begin = 3; x_end = 6; }
else { x_begin = 6; x_end = 9; }
for ( y = y_begin; y < y_end; y++ )
{
for ( x = x_begin; x < x_end; x++ )
{
if ( grid[y][x] == n )
return 1;
}
}
return 0;
}
int fill_grid(int grid[][9])
{
int row;
int col;
int rnd;
int check;
FILE *fp = fopen("/dev/urandom", "r");
for ( row = 0; row < 9; row++ )
{
for ( col = 0; col < 9; col++ )
{
if ( col == 8 )
{
for ( check = 1; check < 10; check++ )
{
if ( if_row(grid, row, check) == 0 && if_column(grid, col, check) == 0 && if_region(grid, row, col, check) == 0 )
break;
else if ( check == 9 )
return 1;
}
}
do
{
rnd = get_urandom(fp);
} while ( if_row(grid, row, rnd) == 1 || if_column(grid, col, rnd) == 1 || if_region(grid, row, col, rnd) == 1 );
grid[row][col] = rnd;
printf( "%i ", grid[row][col] );
}
printf( "\n" );
}
return 0;
}
void print_grid(int grid[][9])
{
int y;
int x;
printf( " 0 1 2 3 4 5 6 7 8\n" );
printf( " -----------------\n" );
for ( y = 0; y < 9; y++ )
{
printf( "%i | ", y );
for ( x = 0; x < 9; x++ )
{
printf( "%i ", grid[y][x] );
}
printf( "\n" );
}
}
int main()
{
int grid[9][9];
init_grid(grid);
fill_grid(grid);
print_grid(grid);
}
#include <stdio.h>
/* Program for creating a sudoku */
int get_urandom(FILE *fp)
{
int rnd;
fread(&rnd, sizeof(int), 1, fp);
rnd=(rnd % 5)+5;
return rnd;
}
void init_grid(int grid[][9])
{
int y;
int x;
for ( y = 0; y < 9; y++ )
{
for ( x = 0; x < 9; x++ ) { grid[y][x] = 0; }
}
}
/* If n is found in row, return 1. Otherwise return 0. */
int if_row(int grid[][9], int y, int n)
{
int x;
for ( x = 0; x < 9; x++ )
{
if ( grid[y][x] == n )
return 1;
}
return 0;
}
/* If n is found in column, return 1. Otherwise return 0. */
int if_column(int grid[][9], int x, int n)
{
int y;
for ( y = 0; y < 9; y++ )
{
if ( grid[y][x] == n )
return 1;
}
return 0;
}
/* If n is found in region, return 1. Otherwise return 0. */
int if_region(int grid[][9], int y, int x, int n)
{
int y_begin;
int y_end;
int x_begin;
int x_end;
if ( y < 3 ) { y_begin = 0; y_end = 3; }
else if ( y < 6 ) { y_begin = 3; y_end = 6; }
else { y_begin = 6; y_end = 9; }
if ( x < 3 ) { x_begin = 0; x_end = 3; }
else if ( x < 6 ) { x_begin = 3; x_end = 6; }
else { x_begin = 6; x_end = 9; }
for ( y = y_begin; y < y_end; y++ )
{
for ( x = x_begin; x < x_end; x++ )
{
if ( grid[y][x] == n )
return 1;
}
}
return 0;
}
int fill_grid(int grid[][9])
{
int row;
int col;
int rnd;
int check;
FILE *fp = fopen("/dev/urandom", "r");
for ( row = 0; row < 9; row++ )
{
for ( col = 0; col < 9; col++ )
{
if ( col == 8 )
{
for ( check = 1; check < 10; check++ )
{
if ( if_row(grid, row, check) == 0 && if_column(grid, col, check) == 0 && if_region(grid, row, col, check) == 0 )
break;
else if ( check == 9 )
return 1;
}
}
do
{
rnd = get_urandom(fp);
} while ( if_row(grid, row, rnd) == 1 || if_column(grid, col, rnd) == 1 || if_region(grid, row, col, rnd) == 1 );
grid[row][col] = rnd;
printf( "%i ", grid[row][col] );
}
printf( "\n" );
}
return 0;
}
void print_grid(int grid[][9])
{
int y;
int x;
printf( " 0 1 2 3 4 5 6 7 8\n" );
printf( " -----------------\n" );
for ( y = 0; y < 9; y++ )
{
printf( "%i | ", y );
for ( x = 0; x < 9; x++ )
{
printf( "%i ", grid[y][x] );
}
printf( "\n" );
}
}
int main()
{
int grid[9][9];
init_grid(grid);
fill_grid(grid);
print_grid(grid);
}