op_result add_digit(int row, int col, int digit) { if(in_range(row)){ if(in_range(col)){ if(in_range(digit)){ if(puzzle[row][col] != 0){ return OP_OCCUPIED; } if((row_contains(row,digit))||(col_contains(col,digit))){ return OP_ILLEGAL; } if(region_contains(row,col,digit)){ return OP_ILLEGAL; } puzzle[row][col] = digit; return OP_OK; } } } return OP_BADARGS ; }
void configure(FILE *puzzle_file) { char line[5];//line buffer int row; int column; int value; int line_count = 0; while(( fgets(line,5,puzzle_file)) != NULL){ row = line[0]-'0'; column = line[1]-'0'; value = line[2]-'0'; if(!in_range(row) || !in_range(column) || !in_range(value)){ printf("Illegal format in configuration file at line %d ", line_count); exit(1); } if((puzzle[row][column] != 0)||(row_contains(row,value))||(col_contains(column,value))||(region_contains(row,column,value))){ printf("Illegal placement in configuration file at line %d ",line_count); exit(1); } puzzle[row][column] = value; fixed[row][column] = TRUE; line_count += 1; } }
unsigned int sudoku_correct(char** arr, unsigned int x, unsigned int y) { return !(row_contains(arr, x, y) || col_contains(arr, x, y) || square_contains(arr, x, y)); }