main.c 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #include <time.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <unistd.h>
  6. #include "rubiks.h"
  7. int generate(char **params, char *av0)
  8. {
  9. t_params p;
  10. FILE *f;
  11. int i;
  12. srand(time(NULL) * getpid());
  13. if (!parse_params(params, &p, av0))
  14. {
  15. xfree(p.file);
  16. return -1;
  17. }
  18. if (p.file == NULL)
  19. f = stdout;
  20. else if ((f = fopen(p.file, "a+")) == NULL)
  21. {
  22. fprintf(stderr, "Cannot open %s for writting\n", p.file);
  23. free(p.file);
  24. return -1;
  25. }
  26. for (i=0; i < p.count; i++)
  27. {
  28. t_rubiks *r = doGenerate(&p);
  29. rubik_output(r, f);
  30. fprintf(f, "\n");
  31. free(r);
  32. }
  33. if (p.file)
  34. fclose(f);
  35. xfree(p.file);
  36. return 0;
  37. }
  38. int solve(char **params, char *av0)
  39. {
  40. t_params p;
  41. t_rubiks *output;
  42. FILE *f;
  43. char buffer[55];
  44. if (!parse_params(params, &p, av0))
  45. {
  46. xfree(p.file);
  47. return -1;
  48. }
  49. if (p.file == NULL)
  50. f = stdin;
  51. else if ((f = fopen(p.file, "r")) == NULL)
  52. {
  53. fprintf(stderr, "Cannot open %s for writting\n", p.file);
  54. free(p.file);
  55. return -1;
  56. }
  57. while (fread(buffer, 55, 1, f) == 1)
  58. {
  59. buffer[54] = '\0';
  60. t_stack *result = doSolve(buffer, p.nbMovment);
  61. output = rubik_create(buffer);
  62. spatial_show(output);
  63. rubik_output(output, stdout);
  64. solution_output(result, stdout);
  65. printf("\n");
  66. free(output);
  67. stack_destroy(result);
  68. }
  69. if (p.file)
  70. fclose(f);
  71. xfree(p.file);
  72. return 0;
  73. }
  74. int main(int ac, char **av)
  75. {
  76. (void) ac;
  77. if (av[1] && (!strcmp(av[1], "generate") || !strcmp(av[1], "gen")))
  78. return generate(&av[2], av[0]);
  79. else if (av[1] && !strcmp(av[1], "solve"))
  80. return solve(&av[2], av[0]);
  81. fprintf(stderr, "Expected valid action\n");
  82. usage(av[0]);
  83. return -1;
  84. }