All pastes #94036 Raw Edit

Anonymous

public text v1 · immutable
#94036 ·published 2006-07-20 23:07 UTC
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);
}