add seed
authorLaurent Mazet <mazet@softndesign.org>
Sat, 1 Mar 2025 22:49:03 +0000 (23:49 +0100)
committerLaurent Mazet <mazet@softndesign.org>
Sat, 1 Mar 2025 22:49:03 +0000 (23:49 +0100)
sudoku.c

index 5d2da5dcddc014aab0165e828eb6587d03e583fb..811770c377da92039bdb5e57c62f8eafa6936125 100644 (file)
--- a/sudoku.c
+++ b/sudoku.c
@@ -21,6 +21,7 @@ char *progname = NULL;
 char *version = "0.1";
 
 int length = 3;
+int seed = 0;
 int xoffset = 1;
 int yoffset = 1;
 
@@ -35,9 +36,10 @@ char *help =
 int usage (int ret)
 {
     FILE *fd = ret ? stderr : stdout;
-    fprintf (fd, "usage: %s [-h] [-l length] [-v level]\n", progname);
+    fprintf (fd, "usage: %s [-h] [-l length] [-s seed] [-v level]\n", progname);
     fprintf (fd, " -h: help message\n");
     fprintf (fd, " -l: box length (%d)\n", length);
+    fprintf (fd, " -s: random seed (%d)\n", seed);
     fprintf (fd, " -v: verbose level (%d)\n", verbose);
     fprintf (fd, "%s version %s\n", progname, version);
 
@@ -74,6 +76,14 @@ int main (int argc, char *argv[])
             }
             length = atoi (arg);
             break;
+        case 's':
+            arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
+            if (arg == NULL) {
+                VERBOSE (ERROR, fprintf (stderr, "%s: no seed specified\n", progname));
+                return usage (1);
+            }
+            seed = atoi (arg);
+            break;
         case 'v':
             arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
             if (arg == NULL) {
@@ -89,6 +99,7 @@ int main (int argc, char *argv[])
     }
 
     /* init board */
+    srand (seed);
     board_t *board = initboard (length * length);
     initplay (board);
 
@@ -135,6 +146,7 @@ int main (int argc, char *argv[])
 
 /* test: sudoku.exe -h | grep usage */
 /* test: sudoku.exe -l 2>&1 | grep length */
+/* test: sudoku.exe -s 2>&1 | grep seed */
 /* test: sudoku.exe -v 2>&1 | grep missing */
 /* test: sudoku.exe _ 2>&1 | grep invalid */