Skip to main content

simple algorithm to check if a Sudoku-Configuration is valid?

char VerifySudoku(char grid[81])
{
    for (char r = 0; r < 9; ++r)
    {
        unsigned int bigFlags = 0;

        for (char c = 0; c < 9; ++c)
        {
            unsigned short buffer = r/3*3+c/3;

                        // check horizontally
            bitFlags |= 1 << (27-grid[(r<<3)+r+c]) 
                        // check vertically
                     |  1 << (18-grid[(c<<3)+c+r])
                        // check subgrids
                     |  1 << (9-grid[(buffer<<3)+buffer+r%3*3+c%3]);

        }

        if (bitFlags != 0x7ffffff)
            return 0; // invalid
    }

    return 1; // valid
}


bool CheckSudoku(int[,] sudoku)
{
    int flag = 0;

// Check rows
for(int row = 0; row < 9; row++)
{
 flag = 0;
 for (int col = 0; col < 9; col++)
 {
  // edited : check range step (see comments)
  if ((sudoku[row, col] < 1)||(sudoku[row, col] > 9)) 
  {
   return false;
  }

  // if n-th bit is set.. but you can use a bool array for readability
  if ((flag & (1 << sudoku[row, col])) != 0) 
  {
   return false;
  }

  // set the n-th bit
  flag |= (1 << sudoku[row, col]); 
 }
}

// Check columns
for(int col= 0; col < 9; col++)
{
 flag = 0;
 for (int row = 0; row < 9; row++)
 {
  if ((flag & (1 << sudoku[row, col])) != 0)
  {
   return false;
  }
  flag |= (1 << sudoku[row, col]);
 }
}

// Check 3x3 boxes
for(int box= 0; box < 9; box++)
{
 flag = 0;
 for (int ofs = 0; ofs < 9; ofs++)
 {
  int col = (box % 3) * 3;
  int row = ((int)(box / 3)) * 3;

  if ((flag & (1 << sudoku[row, col])) != 0)
  {
   return false;
  }
  flag |= (1 << sudoku[row, col]);
 }
}
return true;
}

Comments

Popular posts from this blog

ORACLE 9i practice solutions

Created by BCL easyConverter SDK 3 (HTML Version)

Hackerrank > SQL > Basic Select

Select
01-Select All
Given a City table, whose fields are described as +-------------+----------+ | Field       | Type     | +-------------+----------+ | ID          | int(11)  | | Name        | char(35) | | CountryCode | char(3)  | | District    | char(20) | | Population  | int(11)  | +-------------+----------+
write a query that will fetch all columns for every row in the table.

My Solution
SELECT*FROM city;
---------------------------------------------------------------------------------
02-Select by ID
Given a City table, whose fields are described as

Zoho Interview | Set 1 (Advanced Programming Round)

Third Round: (Advanced Programming Round) Here they asked us to create a “Railway reservation system” and gave us 4 modules. The modules were:
    1. Booking
    2. Availability checking
    3. Cancellation
    4. Prepare chart
We were asked to create the modules for representing each data first and to continue with the implementation phase.

 My Solution :

#include<stdio.h>#include<conio.h>#include<stdlib.h>#include<string.h>#include<iostream.h>#include<time.h>#include<iomanip.h>#include<fstream.h>char f[10]="f";char s[10]="s";int addr,ad,flag,f1,d,m,i,amt;float tamt; class login {public:char id[100];char pass[100];char*password;void getid(){ cout<<"Enter your id:";gets(id); password=getpass("Enter the password:");strcpy(pass,password);}void displayid(){ cout<<"Id:";puts(id); cout<<"Password:";puts(pass);}}; class detail {public:in…