]> git.itanic.dy.fi Git - sudoku/commitdiff
generator: Add some basic placeholders for having sudoku generator
authorTimo Kokkonen <kaapeli@itanic.dy.fi>
Sat, 20 Jun 2009 09:07:30 +0000 (12:07 +0300)
committerTimo Kokkonen <kaapeli@itanic.dy.fi>
Sat, 20 Jun 2009 09:08:20 +0000 (12:08 +0300)
.gitignore
Makefile
generator.cpp [new file with mode: 0644]
random.cpp [new file with mode: 0644]
random.h [new file with mode: 0644]
sudoku.cpp
sudoku.h

index c0e1426b62eea4ee8724ceb24a860e351f678232..0e4e5973ff5f844bf668e0d927e365f5fa76576a 100644 (file)
@@ -3,3 +3,4 @@
 .*.o.d
 *~
 sudokusolver
+sudokugenerator
index 29afb26cd7d96e1c838a383476ec62eda2c5d9d2..a5d8c8178f1edfa21371e442cfadc9643566bbf9 100644 (file)
--- 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 (file)
index 0000000..a578118
--- /dev/null
@@ -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 (file)
index 0000000..62419c4
--- /dev/null
@@ -0,0 +1,46 @@
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <string.h>
+#include <unistd.h>
+
+#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 (file)
index 0000000..f9c92c0
--- /dev/null
+++ b/random.h
@@ -0,0 +1,6 @@
+#ifndef _RANDOM_H
+#define _RANDOM_H
+
+int get_random(void);
+
+#endif
index 7c4e208c8d73aa131c3b45557bca318497aecb12..3848d6ec1d0276ad26965f4f48876a3ea95e63dd 100644 (file)
@@ -3,6 +3,7 @@
 
 #include "sudoku.h"
 #include "debug.h"
+#include "random.h"
 
 #define EMPTY ' '
 
@@ -475,3 +476,7 @@ std::vector<sudoku> sudoku::solve_all()
        return sudokus;
 }
 
+void sudoku::generate(int min_guesses)
+{
+
+}
index 9575e7cb2b35aebdd1342c75fc46d8dff85c9f28..a0b8971f4fe077babc1db2454220f50231752095 100644 (file)
--- a/sudoku.h
+++ b/sudoku.h
@@ -2,6 +2,7 @@
 #define SUDOKU_H
 
 #include <vector>
+#include <string>
 
 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<sudoku> solve_all();
+       std::vector<sudoku> solve_all(void);
+       void generate(int min_guesses);
 
        int recursion_depth;
        int guesses;