From 74abcececfd3bb2098d6538fa4b079116e1b98ba Mon Sep 17 00:00:00 2001 From: Timo Kokkonen Date: Sat, 20 Jun 2009 12:07:30 +0300 Subject: [PATCH] generator: Add some basic placeholders for having sudoku generator --- .gitignore | 1 + Makefile | 14 +++++++++----- generator.cpp | 6 ++++++ random.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++++++ random.h | 6 ++++++ sudoku.cpp | 5 +++++ sudoku.h | 4 +++- 7 files changed, 76 insertions(+), 6 deletions(-) create mode 100644 generator.cpp create mode 100644 random.cpp create mode 100644 random.h diff --git a/.gitignore b/.gitignore index c0e1426..0e4e597 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ .*.o.d *~ sudokusolver +sudokugenerator diff --git a/Makefile b/Makefile index 29afb26..a5d8c81 100644 --- a/Makefile +++ b/Makefile @@ -2,14 +2,18 @@ CC=g++ LD=ld CFLAGS=-Wall -O2 -g -SUDOKUSOLVER_OBJS= solver.o sudoku.o +SOLVER_OBJS= solver.o sudoku.o random.o +GENERATOR_OBJS= generator.o sudoku.o random.o -all: sudokusolver +all: sudokusolver sudokugenerator -sudokusolver: $(SUDOKUSOLVER_OBJS) - $(CC) $(SUDOKUSOLVER_OBJS) -o sudokusolver +sudokusolver: $(SOLVER_OBJS) + $(CC) $(SOLVER_OBJS) -o sudokusolver -.cpp.o: +sudokugenerator: $(GENERATOR_OBJS) + $(CC) $(GENERATOR_OBJS) -o sudokugenerator + +cpp.o: $(CC) -MMD -MF .$@.d $(CFLAGS) -c $< -o $@ clean: diff --git a/generator.cpp b/generator.cpp new file mode 100644 index 0000000..a578118 --- /dev/null +++ b/generator.cpp @@ -0,0 +1,6 @@ +#include "sudoku.h" + +int main(int argc, char *argv[]) +{ + return 0; +} diff --git a/random.cpp b/random.cpp new file mode 100644 index 0000000..62419c4 --- /dev/null +++ b/random.cpp @@ -0,0 +1,46 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "random.h" + +#define RAND_BUF_SIZE 1024 +#define RND_DEV "/dev/urandom" + +int get_random(void) +{ + static int rndbuf[RAND_BUF_SIZE]; + static int index = RAND_BUF_SIZE; + int fd, error, i = 0, ret; + + if (index < RAND_BUF_SIZE) + return rndbuf[index++]; + + fd = open(RND_DEV, O_RDONLY); + if (fd < 0) { + error = errno; + fprintf(stderr, "Error opening file %s: %s\n", + RND_DEV, strerror(error)); + return -1; + } + + do { + ret = read(fd, rndbuf + i, + RAND_BUF_SIZE * (sizeof(rndbuf[0]) - i)); + + if (ret <= 0) { + error = errno; + fprintf(stderr, "Error reading file %s: %s\n", + RND_DEV, strerror(error)); + goto out; + } + + i += ret; + } while (i < RAND_BUF_SIZE * sizeof(rndbuf[0])); + out: + close(fd); +} diff --git a/random.h b/random.h new file mode 100644 index 0000000..f9c92c0 --- /dev/null +++ b/random.h @@ -0,0 +1,6 @@ +#ifndef _RANDOM_H +#define _RANDOM_H + +int get_random(void); + +#endif diff --git a/sudoku.cpp b/sudoku.cpp index 7c4e208..3848d6e 100644 --- a/sudoku.cpp +++ b/sudoku.cpp @@ -3,6 +3,7 @@ #include "sudoku.h" #include "debug.h" +#include "random.h" #define EMPTY ' ' @@ -475,3 +476,7 @@ std::vector sudoku::solve_all() return sudokus; } +void sudoku::generate(int min_guesses) +{ + +} diff --git a/sudoku.h b/sudoku.h index 9575e7c..a0b8971 100644 --- a/sudoku.h +++ b/sudoku.h @@ -2,6 +2,7 @@ #define SUDOKU_H #include +#include extern int verbose; @@ -20,7 +21,8 @@ public: std::string get_legal_numbers(const int col, const int row); sudoku solve(int &solvable); - std::vector solve_all(); + std::vector solve_all(void); + void generate(int min_guesses); int recursion_depth; int guesses; -- 2.45.0