isundil 10 lat temu
rodzic
commit
3dea0950f3
7 zmienionych plików z 106 dodań i 20 usunięć
  1. 1 2
      Makefile
  2. 2 2
      generator.c
  3. 8 2
      main.c
  4. 9 0
      output.c
  5. 0 9
      rubiks.c
  6. 2 1
      rubiks.h
  7. 84 4
      rubiks_transform.c

+ 1 - 2
Makefile

@@ -7,8 +7,7 @@ SRC=	main.c				\
 		generator.c			\
 		rubiks.c			\
 		rubiks_transform.c	\
-		\
-		debug.c
+		output.c
 
 OBJ=$(SRC:.c=.o)
 

+ 2 - 2
generator.c

@@ -14,7 +14,7 @@ static int move_random(t_rubiks *r, char lastMove)
 	return movment;
 }
 
-void doGenerate(t_params *params, FILE *output)
+t_rubiks *doGenerate(t_params *params)
 {
 	t_rubiks *rubiks = rubik_create("000000000111111111222222222333333333444444444555555555");
 	char lastMove = -1;
@@ -22,6 +22,6 @@ void doGenerate(t_params *params, FILE *output)
 
 	for (i=0; i < params->nbMovment; ++i)
 		lastMove = move_random(rubiks, lastMove);
-	free(rubiks);
+	return (rubiks);
 }
 

+ 8 - 2
main.c

@@ -3,6 +3,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <unistd.h>
 #include "rubiks.h"
 
 int generate(char **params, char *av0)
@@ -11,7 +12,7 @@ int generate(char **params, char *av0)
 	FILE *f;
 	int i;
 
-	srand(time(NULL));
+	srand(time(NULL) * getpid());
 	if (!parse_params(params, &p, av0))
 	{
 		xfree(p.output);
@@ -26,7 +27,12 @@ int generate(char **params, char *av0)
 		return -1;
 	}
 	for (i=0; i < p.count; i++)
-		doGenerate(&p, f);
+	{
+		t_rubiks *r = doGenerate(&p);
+		rubik_output(r, f);
+		fprintf(f, "\n");
+		free(r);
+	}
 	xfree(p.output);
 	return 0;
 }

+ 9 - 0
debug.c → output.c

@@ -1,7 +1,16 @@
 
+#include <string.h>
 #include <stdio.h>
 #include "rubiks.h"
 
+void rubik_output(t_rubiks *rub, FILE *f)
+{
+	char out[55];
+	memcpy(out, rub->grid, sizeof(rub->grid));
+	out[54] = 0;
+	fprintf(f, "%s", out);
+}
+
 void spatial_show(t_rubiks *rub)
 {
 	printf("    +---+\n");

+ 0 - 9
rubiks.c

@@ -35,15 +35,6 @@
 **/
 void rubik_applyVect(t_rubiks *r, char v[3])
 {
-	rubik_applyX(r, (char[]) { 'X', '0', '+' });
-	spatial_show(r);
-	rubik_applyX(r, (char[]) { 'X', '1', '+' });
-	spatial_show(r);
-	rubik_applyX(r, (char[]) { 'X', '2', '+' });
-	spatial_show(r);
-	exit(0);
-
-	return;
 	switch (v[0])
 	{
 		case 'X':

+ 2 - 1
rubiks.h

@@ -17,7 +17,7 @@ void usage(char*);
 int parse_params(char **, t_params *, char *);
 
 /* generator.c */
-void doGenerate(t_params *, FILE *);
+t_rubiks *doGenerate(t_params *);
 
 /* std */
 void xfree(void *);
@@ -35,4 +35,5 @@ void rubik_apply(t_rubiks *, char movment);
 
 /* debug.h */
 void spatial_show(t_rubiks *);
+void rubik_output(t_rubiks *, FILE *);
 

+ 84 - 4
rubiks_transform.c

@@ -66,9 +66,9 @@ void rubik_applyX(t_rubiks *rubiks, char move[3])
 	rubiks->grid[4][0][1] = tmpMatrix[1][2];
 	rubiks->grid[4][1][1] = tmpMatrix[1][1];
 	rubiks->grid[4][2][1] = tmpMatrix[1][0];
-	rubiks->grid[4][0][2] = tmpMatrix[0][2];
-	rubiks->grid[4][1][2] = tmpMatrix[0][1];
-	rubiks->grid[4][2][2] = tmpMatrix[0][0];
+	rubiks->grid[4][0][2] = tmpMatrix[2][2];
+	rubiks->grid[4][1][2] = tmpMatrix[2][1];
+	rubiks->grid[4][2][2] = tmpMatrix[2][0];
 	memcpy(tmpMatrix, rubiks->grid[5], sizeof(tmpMatrix));
 	rubiks->grid[5][0][0] = tmpMatrix[2][2];
 	rubiks->grid[5][1][0] = tmpMatrix[1][2];
@@ -83,7 +83,87 @@ void rubik_applyX(t_rubiks *rubiks, char move[3])
 
 void rubik_applyY(t_rubiks *rubiks, char move[3])
 {
-		/* TODO */
+	char tmpMatrix[3][3];
+
+	memcpy(tmpMatrix, rubiks->grid[5], sizeof(tmpMatrix));
+	memcpy(rubiks->grid[5], rubiks->grid[4], sizeof(tmpMatrix));
+	memcpy(rubiks->grid[4], rubiks->grid[0], sizeof(tmpMatrix));
+	memcpy(rubiks->grid[0], rubiks->grid[2], sizeof(tmpMatrix));
+	memcpy(rubiks->grid[2], tmpMatrix, sizeof(tmpMatrix));
+
+	memcpy(tmpMatrix, rubiks->grid[1], sizeof(tmpMatrix));
+	rubiks->grid[1][0][0] = tmpMatrix[0][2];
+	rubiks->grid[1][0][1] = tmpMatrix[1][2];
+	rubiks->grid[1][0][2] = tmpMatrix[2][2];
+	rubiks->grid[1][1][0] = tmpMatrix[0][1];
+	rubiks->grid[1][1][1] = tmpMatrix[1][1];
+	rubiks->grid[1][1][2] = tmpMatrix[2][1];
+	rubiks->grid[1][2][0] = tmpMatrix[0][0];
+	rubiks->grid[1][2][1] = tmpMatrix[1][0];
+	rubiks->grid[1][2][2] = tmpMatrix[2][0];
+
+	memcpy(tmpMatrix, rubiks->grid[3], sizeof(tmpMatrix));
+	rubiks->grid[3][0][0] = tmpMatrix[2][0];
+	rubiks->grid[3][1][0] = tmpMatrix[2][1];
+	rubiks->grid[3][2][0] = tmpMatrix[2][2];
+	rubiks->grid[3][0][1] = tmpMatrix[1][0];
+	rubiks->grid[3][1][1] = tmpMatrix[1][1];
+	rubiks->grid[3][2][1] = tmpMatrix[1][2];
+	rubiks->grid[3][0][2] = tmpMatrix[0][0];
+	rubiks->grid[3][1][2] = tmpMatrix[0][1];
+	rubiks->grid[3][2][2] = tmpMatrix[0][2];
+
+	memcpy(tmpMatrix, rubiks->grid[2], sizeof(tmpMatrix));
+	rubiks->grid[2][0][0] = tmpMatrix[2][2];
+	rubiks->grid[2][1][0] = tmpMatrix[1][2];
+	rubiks->grid[2][2][0] = tmpMatrix[0][2];
+	rubiks->grid[2][0][1] = tmpMatrix[2][1];
+	rubiks->grid[2][1][1] = tmpMatrix[1][1];
+	rubiks->grid[2][2][1] = tmpMatrix[0][1];
+	rubiks->grid[2][0][2] = tmpMatrix[2][0];
+	rubiks->grid[2][1][2] = tmpMatrix[1][0];
+	rubiks->grid[2][2][2] = tmpMatrix[0][0];
+
+	rubik_applyZ(rubiks, (char [3]) { 'Z', move[1], move[2] });
+
+	memcpy(tmpMatrix, rubiks->grid[0], sizeof(tmpMatrix));
+	memcpy(rubiks->grid[0], rubiks->grid[4], sizeof(tmpMatrix));
+	memcpy(rubiks->grid[4], rubiks->grid[5], sizeof(tmpMatrix));
+	memcpy(rubiks->grid[5], rubiks->grid[2], sizeof(tmpMatrix));
+	memcpy(rubiks->grid[2], tmpMatrix, sizeof(tmpMatrix));
+
+	memcpy(tmpMatrix, rubiks->grid[1], sizeof(tmpMatrix));
+	rubiks->grid[1][0][0] = tmpMatrix[2][0];
+	rubiks->grid[1][1][0] = tmpMatrix[2][1];
+	rubiks->grid[1][2][0] = tmpMatrix[2][2];
+	rubiks->grid[1][0][1] = tmpMatrix[1][0];
+	rubiks->grid[1][1][1] = tmpMatrix[1][1];
+	rubiks->grid[1][2][1] = tmpMatrix[1][2];
+	rubiks->grid[1][0][2] = tmpMatrix[0][0];
+	rubiks->grid[1][1][2] = tmpMatrix[0][1];
+	rubiks->grid[1][2][2] = tmpMatrix[0][2];
+
+	memcpy(tmpMatrix, rubiks->grid[3], sizeof(tmpMatrix));
+	rubiks->grid[3][0][0] = tmpMatrix[0][2];
+	rubiks->grid[3][1][0] = tmpMatrix[0][1];
+	rubiks->grid[3][2][0] = tmpMatrix[0][0];
+	rubiks->grid[3][0][1] = tmpMatrix[1][2];
+	rubiks->grid[3][1][1] = tmpMatrix[1][1];
+	rubiks->grid[3][2][1] = tmpMatrix[1][0];
+	rubiks->grid[3][0][2] = tmpMatrix[2][2];
+	rubiks->grid[3][1][2] = tmpMatrix[2][1];
+	rubiks->grid[3][2][2] = tmpMatrix[2][0];
+
+	memcpy(tmpMatrix, rubiks->grid[5], sizeof(tmpMatrix));
+	rubiks->grid[5][0][0] = tmpMatrix[2][2];
+	rubiks->grid[5][1][0] = tmpMatrix[1][2];
+	rubiks->grid[5][2][0] = tmpMatrix[0][2];
+	rubiks->grid[5][0][1] = tmpMatrix[2][1];
+	rubiks->grid[5][1][1] = tmpMatrix[1][1];
+	rubiks->grid[5][2][1] = tmpMatrix[0][1];
+	rubiks->grid[5][0][2] = tmpMatrix[2][0];
+	rubiks->grid[5][1][2] = tmpMatrix[1][0];
+	rubiks->grid[5][2][2] = tmpMatrix[0][0];
 }
 
 void rubik_applyZ(t_rubiks *rubiks, char move[3])