|
|
@@ -15,15 +15,15 @@ int generate(char **params, char *av0)
|
|
|
srand(time(NULL) * getpid());
|
|
|
if (!parse_params(params, &p, av0))
|
|
|
{
|
|
|
- xfree(p.output);
|
|
|
+ xfree(p.file);
|
|
|
return -1;
|
|
|
}
|
|
|
- if (p.output == NULL)
|
|
|
+ if (p.file == NULL)
|
|
|
f = stdout;
|
|
|
- else if ((f = fopen(p.output, "a+")) == NULL)
|
|
|
+ else if ((f = fopen(p.file, "a+")) == NULL)
|
|
|
{
|
|
|
- fprintf(stderr, "Cannot open %s for writting\n", p.output);
|
|
|
- free(p.output);
|
|
|
+ fprintf(stderr, "Cannot open %s for writting\n", p.file);
|
|
|
+ free(p.file);
|
|
|
return -1;
|
|
|
}
|
|
|
for (i=0; i < p.count; i++)
|
|
|
@@ -33,7 +33,47 @@ int generate(char **params, char *av0)
|
|
|
fprintf(f, "\n");
|
|
|
free(r);
|
|
|
}
|
|
|
- xfree(p.output);
|
|
|
+ if (p.file)
|
|
|
+ fclose(f);
|
|
|
+ xfree(p.file);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+int solve(char **params, char *av0)
|
|
|
+{
|
|
|
+ t_params p;
|
|
|
+ t_rubiks *output;
|
|
|
+ FILE *f;
|
|
|
+ char buffer[55];
|
|
|
+
|
|
|
+ if (!parse_params(params, &p, av0))
|
|
|
+ {
|
|
|
+ xfree(p.file);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ if (p.file == NULL)
|
|
|
+ f = stdin;
|
|
|
+ else if ((f = fopen(p.file, "r")) == NULL)
|
|
|
+ {
|
|
|
+ fprintf(stderr, "Cannot open %s for writting\n", p.file);
|
|
|
+ free(p.file);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ while (fread(buffer, 55, 1, f) == 1)
|
|
|
+ {
|
|
|
+ buffer[54] = '\0';
|
|
|
+ t_stack *result = doSolve(buffer, p.nbMovment);
|
|
|
+ output = rubik_create(buffer);
|
|
|
+ spatial_show(output);
|
|
|
+ rubik_output(output, stdout);
|
|
|
+ solution_output(result, stdout);
|
|
|
+ printf("\n");
|
|
|
+ free(output);
|
|
|
+ stack_destroy(result);
|
|
|
+ }
|
|
|
+ if (p.file)
|
|
|
+ fclose(f);
|
|
|
+ xfree(p.file);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
@@ -42,6 +82,8 @@ int main(int ac, char **av)
|
|
|
(void) ac;
|
|
|
if (av[1] && (!strcmp(av[1], "generate") || !strcmp(av[1], "gen")))
|
|
|
return generate(&av[2], av[0]);
|
|
|
+ else if (av[1] && !strcmp(av[1], "solve"))
|
|
|
+ return solve(&av[2], av[0]);
|
|
|
fprintf(stderr, "Expected valid action\n");
|
|
|
usage(av[0]);
|
|
|
return -1;
|