From 121aaa819958473e12197ff48933f7ca8cc4e7bc Mon Sep 17 00:00:00 2001 From: sumuel Date: Thu, 6 Aug 2026 13:54:49 +0100 Subject: init --- Makefile | 22 +++++++++++++++++++ README | 1 + board.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ board.h | 12 ++++++++++ main.c | 46 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 158 insertions(+) create mode 100644 Makefile create mode 100644 README create mode 100644 board.c create mode 100644 board.h create mode 100644 main.c diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..a4ccc66 --- /dev/null +++ b/Makefile @@ -0,0 +1,22 @@ +PREFIX = /usr/local + +CFLAGS = -std=c99 -pedantic -Wall -Wno-deprecated-declarations -O3 +NCURSES = -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -lncurses -ltinfo + +CC = cc + +SRC = main.c board.c +TARGET = sudoku + +all: + ${CC} ${SRC} -o ${TARGET} ${CFLAGS} ${NCURSES} + +install: all + ${CC} ${NCURSES} ${CFLAGS} ${SRC} -o ${TARGET} + cp -f sudoku ${DESTDIR}${PREFIX}/bin + chmod 755 ${DESTDIR}${PREFIX}/bin/${TARGET} + +uninstall: + rm -f ${DESTDIR}${PREFIX}/bin/${TARGET} + + diff --git a/README b/README new file mode 100644 index 0000000..364063d --- /dev/null +++ b/README @@ -0,0 +1 @@ +This is a very slow and predictable sudoku puzzle generator diff --git a/board.c b/board.c new file mode 100644 index 0000000..4b9fb7c --- /dev/null +++ b/board.c @@ -0,0 +1,77 @@ +#include +#include +#include +#include "board.h" + +int puzzle[81]; +int total = 0; + +void puzzle_swap(int puzzle[81]); + +void generate_first_line(int puzzle[81]) { + srand ( time(NULL) ); + for (int i=0; i < 9; i++) { + puzzle[i] = i + 1; + } + + for (int i=0; i < 9; i++) { + int random = (rand() % 9); + int swap; + + swap = puzzle[random]; + puzzle[random] = puzzle[i]; + puzzle[i] = swap; + + } +} + +void print_puzzle(int puzzle[81], bool reveal) { + for (int i=0; i < 81; i++) { + if ( i == 0 ) printw(" SUDOKU"); + if ( i % 9 == 0 ) printw("\n"); + else if ( i % 3 == 0 ) printw("|"); + if ( i != 0 && i % 27 == 0 ) printw(" ===========================\n"); + + if (puzzle[i] & 2) printw("%2d ", puzzle[i]); + else if ( reveal == true ) printw("%2d ", puzzle[i]); + else printw(" "); + } +} + +void generate_puzzle(int puzzle[81]){ + for (int i=9; i < 81; i++){ + /* way too much nonsense to make a valid board + * "The seed row method" -> https://sudokupulse.com/articles/how-to-create-sudoku-puzzles/ + * row 2 */ + if ( i < 15) puzzle[i] = puzzle[i-6]; + else if ( i >= 15 && i < 18 ) puzzle[i] = puzzle[i-15]; + /* row 3 */ + else if ( i >= 18 && i < 24 ) puzzle[i] = puzzle[i-6]; + else if ( i >= 24 && i < 27 ) puzzle[i] = puzzle[i-15]; + /* row 4 */ + else if ( i >= 27 && i < 35 ) puzzle[i] = puzzle[i-26]; + else if ( i == 35 ) puzzle[i] = puzzle[i-35]; + /* row 5 */ + else if ( i >= 36 && i < 42 ) puzzle[i] = puzzle[i-6]; + else if ( i >= 42 && i < 45 ) puzzle[i] = puzzle[i-15]; + /* row 6 */ + else if ( i >= 45 && i < 51 ) puzzle[i] = puzzle[i-6]; + else if ( i >= 51 && i < 54 ) puzzle[i] = puzzle[i-15]; + /* row 7 */ + else if ( i >= 54 && i < 62 ) puzzle[i] = puzzle[i-26]; + else if ( i == 62 ) puzzle[i] = puzzle[i-35]; + /* row 8 */ + else if ( i >= 63 && i < 69 ) puzzle[i] = puzzle[i-6]; + else if ( i >= 69 && i < 72 ) puzzle[i] = puzzle[i-15]; + /* row 9 */ + else if ( i >= 72 && i < 78 ) puzzle[i] = puzzle[i-6]; + else if ( i >= 78 && i < 81 ) puzzle[i] = puzzle[i-15]; + + puzzle_swap(puzzle); + + } +} + +void puzzle_swap(int puzzle[81]) { + +} diff --git a/board.h b/board.h new file mode 100644 index 0000000..becb68e --- /dev/null +++ b/board.h @@ -0,0 +1,12 @@ +#ifndef BOARD_H_ /* Include guard */ +#define BOARD_H_ + +extern int puzzle[81]; + +void generate_first_line(int puzzle[81]); +void generate_puzzle(int puzzle[81]); + +void print_puzzle(int puzzle[81], bool reveal); + +#endif // BOARD_H_ + diff --git a/main.c b/main.c new file mode 100644 index 0000000..b79f16d --- /dev/null +++ b/main.c @@ -0,0 +1,46 @@ +#include +#include +#include "board.h" + +int main(void) { + initscr(); /* Start curses mode */ + if(has_colors() == FALSE) + { endwin(); + printf("Your terminal does not support colour\n"); + return 1; + } + start_color(); /* Start color */ + noecho(); + curs_set(0); + /* End of ncurses init nonsense */ + + int ch; + bool reveal = false; + generate_first_line(puzzle); + generate_puzzle(puzzle); + + while (1) { + print_puzzle(puzzle, reveal); + + ch = getch(); + switch (ch) { + case 'q': + endwin(); + return 1; + break; + case 'g': + reveal = false; + generate_first_line(puzzle); + generate_puzzle(puzzle); + break; + case 'r': + if ( reveal == true ) reveal = false; + else reveal = true; + break; + } + clear(); + }; + + endwin(); /* End curses mode */ + return 0; +} -- cgit v1.2.3