C language
Credit for work.
Please design a multithreaded application in C with Pthreads -
it determines whether the solution to a Sudoku puzzle is
valid.
Validate two puzzles
In your program, please hard-code the following two 9x9 grids
(say in two variables puzzle1 and puzzle2), and
determine if each solution is valid. While each grid should be
validated by multiple parallel threads, you can validate
puzzle1 and then puzzle2 in sequential order (as illustrated) by a
single invocation of your program. Note you
are
not allowed to invoke the program twice, one for each puzzle.
| puzzle 1 | puzzle 2 |
void sudoku(…) … |
| 1,8,3,5,7,6,2,4,9, 4,6,7,1,2,9,3,5,8, 9,2,5,4,3,8,7,2,6, 8,7,2,3,5,1,6,9,4, 6,9,4,7,8,2,1,3,5, 3,5,1,6,9,4,8,7,2, 5,1,9,2,6,0,4,8,7, 7,4,6,8,1,5,9,2,3, 2,3,8,9,4,7,5,6,1 |
5,9,6,7,1,4,3,2,8, 2,7,3,8,5,9,1,4,6, 8,1,4,2,3,6,7,5,9, 9,6,7,4,2,8,5,1,3, 1,2,5,3,9,7,6,8,4, 4,3,8,1,6,5,9,7,2, 3,5,1,6,8,2,4,9,7, 7,8,9,5,4,3,2,6,1, 6,4,2,9,7,1,8,3,5 |
Identifying location and reason for an invalid
puzzle
When a row thread/column thread/subgrid thread identifies any
problem (so that the puzzle is not valid), the thread
must print out the problematic row/column/puzzle location and the
specific error to stdout (to be included in the
screenshots). For example,
puzzle[1][2] = 3, duplicated value
puzzle[4][5] = 10, not between 1 and 9
row[6], missing value 7
column[8], missing value 9
For any given problematic cell in a puzzle, your threads should
generate multiple errors (identified by row thread, and/or
column thread, and/or subgrid thread).
Source code:-
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
#define number_threads 11
#define grid_size 9
typedef struct parameters{
int row;
int column;
int puzzle_number;
int id;
}parameters;
int answer=1;//Sudoku is valid in default
int result[number_threads]={0};
pthread_t workerT[number_threads];//11 worker threads in total
struct parameters *data[number_threads];
int puzzle1[grid_size][grid_size]={
{1,8,3,5,7,6,2,4,9},
{4,6,7,1,2,9,3,5,8},
{9,2,5,4,3,8,7,2,6},
{8,7,2,3,5,1,6,9,4},
{6,9,4,7,8,2,1,3,5},
{3,5,1,6,9,4,8,7,2},
{5,1,9,2,6,0,4,8,7},
{7,4,6,8,1,5,9,2,3},
{2,3,8,9,4,7,5,6,1}
};
int puzzle2[grid_size][grid_size]={
{5,9,6,7,1,4,3,2,8},
{2,7,3,8,5,9,1,4,6},
{8,1,4,2,3,6,7,5,9},
{9,6,7,4,2,8,5,1,3},
{1,2,5,3,9,7,6,8,4},
{4,3,8,1,6,5,9,7,2},
{3,5,1,6,8,2,4,9,7},
{7,8,9,5,4,3,2,6,1},
{6,4,2,9,7,1,8,3,5}
};
void *check_allRowsPuzzle(void *params){
parameters *pointer=(parameters
*)params;
int startR=pointer->row;
int
startC=pointer->column;
int
puzzle[grid_size][grid_size];
if(pointer->puzzle_number==1){
memcpy(puzzle,puzzle1,sizeof puzzle);
}else{
memcpy(puzzle,puzzle2,sizeof puzzle);
}
int array[9]={0};
for(int
i=startR;i<grid_size;i++){
memset(array,0,sizeof(array));
for(int
j=startC;j<grid_size;j++){
int integer=puzzle[i][j];
if(integer>0){
array[integer-1]=1;}
}
for(int p=0;p<9;p++){
if(array[p]==0){
result[pointer->id]=0;
answer=0;
for(int d=0;d<number_threads;d++){
pthread_cancel(workerT[d]);
}
pthread_exit(NULL);
}
}
}
result[pointer->id]=1;
}
void *check_allColumnsPuzzle(void *params){
parameters *pointer=(parameters
*)params;
int
startR=pointer->row;
int
startC=pointer->column;
int
puzzle[grid_size][grid_size];
if(pointer->puzzle_number==1){
memcpy(puzzle,puzzle1,sizeof puzzle);
}else{
memcpy(puzzle,puzzle2,sizeof puzzle);
}
int
array[9]={0};
for(int
i=startC;i<grid_size;i++){
memset(array,0,sizeof(array));
for(int j=startR;j<grid_size;j++){
int
integer=puzzle[i][j];
if(integer>0){
array[integer-1]=1;}
}
for(int p=0;p<9;p++){
if(array[p]==0){
result[pointer->id]=0;
answer=0;
pthread_exit(NULL);
}
}
}
result[pointer->id]=1;
}
void *check_SquaresPuzzle(void *params){
parameters *pointer=(parameters
*)params;
int startR=pointer->row;
int startC=pointer->column;
int puzzle[grid_size][grid_size];
if(pointer->puzzle_number==1){
memcpy(puzzle,puzzle1,sizeof
puzzle);
}else{
memcpy(puzzle,puzzle2,sizeof
puzzle);
}
int array[9]={0};
for(int i=startC;i<startC+3;i++){
for(int
j=startR;j<startR+3;j++){
int
integer=puzzle[i][j];
if(integer>0){
array[integer-1]=1;}
}
}
for(int p=0;p<9;p++){
if(array[p]==0){
result[pointer->id]=0;
answer=0;
pthread_exit(NULL);
}
}
result[pointer->id]=1;
}
void sudoku(int puzzle){
for(int b=0;b<number_threads;b++){
data[b]->puzzle_number=puzzle;
}
//Create threads
for(int
k=0;k<9;k++){
pthread_create(&workerT[k], NULL,check_SquaresPuzzle,
data[k]);
}
pthread_create(&workerT[9],NULL,check_allRowsPuzzle,data[9]);
pthread_create(&workerT[10],NULL,check_allColumnsPuzzle,data[10]);
//Join threads
for(int
h=0;h<number_threads;h++){
pthread_join(workerT[h],NULL);
}
//Check validity of the entire puzzle
if(answer){
printf("Puzzle %d is valid.\n",puzzle);
}
else{
printf("Puzzle %d is not valid.\n",puzzle);
}
printf("\n");
}
int main(void) {
printf("Welcome to suduko play from
google\n");
printf("\n");
//struct parameters *data[11];
int i=0;
int j=0;
int index=0;
while(i<=6){//Initialize struc elements
while(j<=6){
data[index]=(parameters
*)malloc(sizeof(parameters));
data[index]->row=i;
data[index]->column=j;
//data[index]->puzzle_number=1;
data[index]->id=index;
index++;
j=j+3;
}
i=i+3;
j=0;
}
data[9]=(parameters *)malloc(sizeof(parameters));
data[9]->row=0;
data[9]->column=0;
//data[9]->puzzle_number=1;
data[9]->id=9;
data[10]=(parameters *)malloc(sizeof(parameters));
data[10]->row=0;
data[10]->column=0;
//data[10]->puzzle_number=1;
data[10]->id=10;
//Print
Puzzle One
for(int
q=0;q<grid_size;q++){
for(int w=0;w<grid_size;w++){
printf("%d",puzzle1[q][w]);
}
printf("\n");
}
printf("\n");
sudoku(1);//Run
Sudoku checker for Puzzle 1
memset(result,0,sizeof(result));//Re-set result array get ready for
2nd Sudoku check
//Print Puzzle
Two
for(int f=0;f<grid_size;f++){
for(int g=0;g<grid_size;g++){
printf("%d",puzzle2[f][g]);
}
printf("\n");
}
printf("\n");
sudoku(2);//Run Sudoku checker for Puzzle 2
//At the end, free memory
for(int y=0;y<11;y++){
free(data[y]);}
return EXIT_SUCCESS;
}
------------------------------------------------------------------------------------------------------
Output:-

C language Credit for work. Please design a multithreaded application in C with Pthreads - it...
Do the following project: Following is the file to be programmed
in Linux kernel. Run this program. Include the screenshot of the
results.
Multi threaded Sorting Application
Write a multithreaded sorting program that works as follows: A
list of integers is divided into two smaller lists of equal size.
Two separate threads (which we will term sorting threads) sort each
sub list using a sorting algorithm of your choice. The two sub
lists are then merged by a third thread—a...
* Your goal in this exercise is to practice recursion and * to see how a properly written recursive solution can * take care of fairly complicated tasks with a few lines * of (well thought out) code. * * We will be solving Sudoku puzzles. In case you have never * solved or seen a Sudoku, you can learn more about them * here: * * https://en.wikipedia.org/wiki/Sudoku * * Your task if to write a function that takes an...
Programming Language: JAVA
Construct a program that uses an agent to solve a Sudoku
puzzle as a Constraint Satisfaction Problem, with the following
guidelines:
1. Since 3 x 3 puzzles are too trivial for a computer, your
program should use 4 x 4 puzzles (also known as Super Sudoku
puzzles; see Figure 2 for an example).
2. The program should read a Sudoku puzzle from a text file. The
user should be able to browse the file system to select...
**This is for the C Language. Trigonometric Calculator Specification You are required to write a program that calculates and displays values of the trigonometric functions sine, cosine, and tangent for user-supplied angular values. The basic program must comply with the following specification. 1. When the program is run, it is to display a short welcome message. TRIG: the trigonometric calculator 2. The program shall display a message prompting the user to enter input from the keyboard. Please input request (h-help,...
18.1 Lab Lesson 11 (Part 1 of 1) Part of lab lesson 11 There in one part to lab lesson 11. The entire lab will be worth 100 points. Lab lesson 11 part 1 is worth 100 points For part 1 you will have 80 points if you enter the program and successfully run the program tests. An additional 20 points will be based on the style and formatting of your C++ code. Style points The 20 points for coding...