#include #include #include #include #include #include "rubiks.h" int generate(char **params, char *av0) { t_params p; FILE *f; int i; srand(time(NULL) * getpid()); if (!parse_params(params, &p, av0)) { xfree(p.file); return -1; } if (p.file == NULL) f = stdout; else if ((f = fopen(p.file, "a+")) == NULL) { fprintf(stderr, "Cannot open %s for writting\n", p.file); free(p.file); return -1; } for (i=0; i < p.count; i++) { t_rubiks *r = doGenerate(&p); rubik_output(r, f); fprintf(f, "\n"); free(r); } 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; } 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; }