Files
retoor caac0f8341 feat: add initial project scaffolding with Makefile, C sources, web UI, and documentation
Add Makefile with build targets for sudoku solver, generator, and coverage reporting.
Include NOTES.md explaining sudoku difficulty factors and solving techniques.
Add README.md with puzzle examples and generator output.
Implement app.js with Grid and Grid2 classes for rendering puzzle data in the browser.
Add box.c with functions for box indexing, grid-to-array conversion, and box value extraction.
Include footer.h with terminal size detection, cursor positioning, and footer display utilities.
Add index.html with CSS grid layout and script loading for the web interface.
Include rlib.h as a large utility header library.
2025-01-10 21:53:10 +00:00

101 lines
2.0 KiB
C

#include "sudoku.h"
static char * gridchars = "abcdefghijklmnopqrstuvwxyz";
int * get_box(char c){
unsigned static int result[N];
unsigned int index = 0;
unsigned int offset = strchr(gridchars,c) - gridchars;
offset = offset * N / 3;
for(unsigned int i = offset; i < offset + N/3;i++){
result[index] = i;
index++;
}
for(unsigned int i = offset + N; i < offset + N + N/3;i++){
result[index] = i;
index++;
}
for(unsigned int i = offset + N + N; i < offset + N + N + N/3;i++){
result[index] = i;
index++;
}
return result;
}
int * grid_to_array(int grid[N][N]){
static int result[N*N];
int index = 0;
for(uint row = 0; row < N; row++){
for(uint col = 0; col < N; col++){
result[index] = grid[row][col];
index++;
}
}
return result;
}
char get_box_char(int row, int col){
unsigned int index = 0;
unsigned int cell_index = row * N + col;
int char_index = cell_index / N;
while(true){
char c = gridchars[index];
int * numbers = get_box(c);
for(int i = 0; i < N; i++){
if(numbers[i] == cell_index){
return c;
}
}
index++;
}
return 0;
}
int * get_box_values(int grid[N][N],char c){
int * box = get_box(c);
static unsigned int values[N];
int * array = grid_to_array(grid);
//printf("HIERR\n");
for(unsigned int i = 0; i < N; i++){
printf("FROM ARRAY: %d\n", box[i]);
values[i] = array[box[i]];
}
return values;
}
void print_box(int * box){
unsigned int cols = 0;
for(int i = 0; i < N; i++){
printf("%d", box[i]);
cols++;
if(cols == N / 3){
printf("\n");
cols = 0;
}
}
}
int main(){
int grid[N][N]; // = grid_new();
memset(grid,0,N*N*sizeof(int));
int * box = get_box('d');
for(int i = 0; i < N; i++){
printf("%d\n",box[i]);
}
grid[4][2] = 9;
int * box_values = get_box_values(grid,'d');
print_box(box_values);
int row = 4;
int col = 0;
grid[row][col] = 8;
print_grid(grid,false);
printf("%c",get_box_char(row,col));
return 0;
}