@@ -38,10 +38,52 @@ void init(state *pState)
38
38
}
39
39
40
40
static const char _Arg_Benchmark[] = " --bench" ;
41
+ static const char _Arg_PreferPreSolve[] = " --prefer-pre-solve" ;
42
+ static const char _Arg_PreferGuessSolve[] = " --prefer-guess-solve" ;
41
43
42
44
int32_t main (const int32_t argc, char **ppArgv)
43
45
{
44
- ERROR_IF (argc <= 1 , " Usage: ook <filename> [--bench]" );
46
+ bool benchmark = false ;
47
+ bool preferPreSolve = false ;
48
+ bool preferGuessSolve = false ;
49
+
50
+ if (argc <= 1 )
51
+ {
52
+ puts (" Usage: ook <filename>" );
53
+ printf (" \t [ % 25s ]: \t Run Benchmark\n " , _Arg_Benchmark);
54
+ printf (" \t [ % 25s ]: \t Prefer Advanced Solver before guessing Values\n " , _Arg_PreferPreSolve);
55
+ printf (" \t [ % 25s ]: \t Prefer Advanced Solver when guessing Values\n " , _Arg_PreferGuessSolve);
56
+
57
+ return EXIT_FAILURE;
58
+ }
59
+
60
+ int32_t argIndex = 2 ;
61
+
62
+ while (argIndex < argc)
63
+ {
64
+ const int32_t argsLeft = argc - argIndex;
65
+ (void )argsLeft; // currently none of the arguments have additional parameters.
66
+
67
+ if (strncmp (ppArgv[argIndex], _Arg_Benchmark, sizeof (_Arg_Benchmark)) == 0 )
68
+ {
69
+ benchmark = true ;
70
+ }
71
+ else if (strncmp (ppArgv[argIndex], _Arg_PreferPreSolve, sizeof (_Arg_PreferPreSolve)) == 0 )
72
+ {
73
+ preferPreSolve = true ;
74
+ }
75
+ else if (strncmp (ppArgv[argIndex], _Arg_PreferGuessSolve, sizeof (_Arg_PreferGuessSolve)) == 0 )
76
+ {
77
+ preferGuessSolve = true ;
78
+ }
79
+ else
80
+ {
81
+ printf (" Invalid Argument'%s'. Aborting.\n " , ppArgv[argIndex]);
82
+ return EXIT_FAILURE;
83
+ }
84
+
85
+ argIndex++;
86
+ }
45
87
46
88
state s;
47
89
init (&s);
@@ -62,19 +104,19 @@ int32_t main(const int32_t argc, char **ppArgv)
62
104
63
105
print (&s);
64
106
65
- if (argc > 2 && strncmp (ppArgv[ 2 ], _Arg_Benchmark, sizeof (_Arg_Benchmark)) == 0 )
107
+ if (benchmark )
66
108
{
67
109
// Dry Run.
68
110
{
69
111
puts (" Dry Run..." );
70
112
71
113
state s1 = s;
72
- simple_solve (&s1);
114
+ (preferPreSolve ? simple_solve_advanced : simple_solve) (&s1);
73
115
74
116
if (s1.blocks != 0b111111111 )
75
117
{
76
118
size_t _0, _1;
77
- recursive_guess (&s1, &_0, &_1);
119
+ (preferGuessSolve ? recursive_guess_advanced : recursive_guess) (&s1, &_0, &_1);
78
120
}
79
121
}
80
122
@@ -98,12 +140,12 @@ int32_t main(const int32_t argc, char **ppArgv)
98
140
for (size_t i = 0 ; i < 1000 ; i++)
99
141
{
100
142
state s1 = s;
101
- simple_solve (&s1);
143
+ (preferPreSolve ? simple_solve_advanced : simple_solve) (&s1);
102
144
103
145
if (s1.blocks != 0b111111111 )
104
146
{
105
147
size_t _0, _1;
106
- recursive_guess (&s1, &_0, &_1);
148
+ (preferGuessSolve ? recursive_guess_advanced : recursive_guess) (&s1, &_0, &_1);
107
149
}
108
150
}
109
151
@@ -154,7 +196,7 @@ int32_t main(const int32_t argc, char **ppArgv)
154
196
fputs (" Simple Solve..." , stdout);
155
197
156
198
const uint64_t before = _get_ticks ();
157
- simple_solve (&s);
199
+ (preferPreSolve ? simple_solve_advanced : simple_solve) (&s);
158
200
const uint64_t after = _get_ticks ();
159
201
160
202
printf (" (Completed in %9.6f ms)\n " , _ticks_to_ns (after - before) * 1e-6f );
@@ -175,7 +217,7 @@ int32_t main(const int32_t argc, char **ppArgv)
175
217
const uint64_t before = _get_ticks ();
176
218
177
219
size_t guesses = 0 , total = 0 ;
178
- ERROR_IF (!recursive_guess (&s, &guesses, &total), " Failed to solve by guessing." );
220
+ ERROR_IF (!(preferGuessSolve ? recursive_guess_advanced : recursive_guess) (&s, &guesses, &total), " Failed to solve by guessing." );
179
221
180
222
const uint64_t after = _get_ticks ();
181
223
0 commit comments