|
@@ -30,7 +30,6 @@ |
|
|
#define CORNER_BDL 22 |
|
|
#define CORNER_BDL 22 |
|
|
#define CORNER_RDB 23 |
|
|
#define CORNER_RDB 23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define EDGE_UF 0 |
|
|
#define EDGE_UF 0 |
|
|
#define EDGE_UR 1 |
|
|
#define EDGE_UR 1 |
|
|
#define EDGE_UB 2 |
|
|
#define EDGE_UB 2 |
|
@@ -84,6 +83,15 @@ static char *edge_cubie_str[] = {"UF", "UR", "UB", "UL", |
|
|
"FD", "RD", "BD", "LD", |
|
|
"FD", "RD", "BD", "LD", |
|
|
"RF", "LF", "RB", "LB"}; |
|
|
"RF", "LF", "RB", "LB"}; |
|
|
|
|
|
|
|
|
|
|
|
static int edge_cubie_color[] = { |
|
|
|
|
|
FACE_U, FACE_U, FACE_U, FACE_U, |
|
|
|
|
|
FACE_D, FACE_D, FACE_D, FACE_D, |
|
|
|
|
|
FACE_F, FACE_F, FACE_B, FACE_B, |
|
|
|
|
|
FACE_F, FACE_R, FACE_B, FACE_L, |
|
|
|
|
|
FACE_F, FACE_R, FACE_B, FACE_L, |
|
|
|
|
|
FACE_R, FACE_L, FACE_R, FACE_L |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
static char *corner_cubie_str[] = {"UFR", "URB", "UBL", "ULF", |
|
|
static char *corner_cubie_str[] = {"UFR", "URB", "UBL", "ULF", |
|
|
"DRF", "DFL", "DLB", "DBR", |
|
|
"DRF", "DFL", "DLB", "DBR", |
|
|
"FRU", "RBU", "BLU", "LFU", |
|
|
"FRU", "RBU", "BLU", "LFU", |
|
@@ -91,6 +99,14 @@ static char *corner_cubie_str[] = {"UFR", "URB", "UBL", "ULF", |
|
|
"RUF", "BUR", "LUB", "FUL", |
|
|
"RUF", "BUR", "LUB", "FUL", |
|
|
"FDR", "LDF", "BDL", "RDB"}; |
|
|
"FDR", "LDF", "BDL", "RDB"}; |
|
|
|
|
|
|
|
|
|
|
|
static int corner_cubie_color[] = { |
|
|
|
|
|
FACE_U, FACE_U, FACE_U, FACE_U, |
|
|
|
|
|
FACE_D, FACE_D, FACE_D, FACE_D, |
|
|
|
|
|
FACE_F, FACE_R, FACE_B, FACE_L, |
|
|
|
|
|
FACE_R, FACE_F, FACE_L, FACE_B, |
|
|
|
|
|
FACE_R, FACE_B, FACE_L, FACE_F, |
|
|
|
|
|
FACE_F, FACE_L, FACE_B, FACE_R}; |
|
|
|
|
|
|
|
|
/* ========================================================================= */ |
|
|
/* ========================================================================= */ |
|
|
void two_cycle(int array[], int ind0, int ind1) |
|
|
void two_cycle(int array[], int ind0, int ind1) |
|
|
/* ------------------------------------------------------------------------- */ |
|
|
/* ------------------------------------------------------------------------- */ |
|
@@ -192,54 +208,6 @@ perm_n_init(24, p_cube->corners); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/* ========================================================================= */ |
|
|
|
|
|
int cube_compare(Cube *cube0, Cube *cube1) |
|
|
|
|
|
/* ------------------------------------------------------------------------- */ |
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
int ii; |
|
|
|
|
|
|
|
|
|
|
|
for (ii = 0; ii < 6; ii++) |
|
|
|
|
|
{ |
|
|
|
|
|
if (cube0->centers[ii] < cube1->centers[ii]) |
|
|
|
|
|
return -1; |
|
|
|
|
|
else if (cube0->centers[ii] > cube1->centers[ii]) |
|
|
|
|
|
return 1; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
for (ii = 0; ii < 24; ii++) |
|
|
|
|
|
{ |
|
|
|
|
|
if (cube0->edges[ii] < cube1->edges[ii]) |
|
|
|
|
|
return -1; |
|
|
|
|
|
else if (cube0->edges[ii] > cube1->edges[ii]) |
|
|
|
|
|
return 1; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
for (ii = 0; ii < 24; ii++) |
|
|
|
|
|
{ |
|
|
|
|
|
if (cube0->corners[ii] < cube1->corners[ii]) |
|
|
|
|
|
return -1; |
|
|
|
|
|
else if (cube0->corners[ii] > cube1->corners[ii]) |
|
|
|
|
|
return 1; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#if 0 |
|
|
|
|
|
/* ========================================================================= */ |
|
|
|
|
|
void cube_compose(Cube *in_cube0, Cube *in_cube1, Cube *out_cube) |
|
|
|
|
|
/* ------------------------------------------------------------------------- */ |
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
perm_n_compose(6, in_cube0->centers, in_cube1->centers, out_cube->centers); |
|
|
|
|
|
perm_n_compose(24, in_cube0->edges, in_cube1->edges, out_cube->edges); |
|
|
|
|
|
perm_n_compose(24, in_cube0->corners, in_cube1->corners, out_cube->corners); |
|
|
|
|
|
|
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
/* ========================================================================= */ |
|
|
/* ========================================================================= */ |
|
|
int perm_n_check(int nn, int array_in[]) |
|
|
int perm_n_check(int nn, int array_in[]) |
|
|
/* ------------------------------------------------------------------------- */ |
|
|
/* ------------------------------------------------------------------------- */ |
|
@@ -562,63 +530,42 @@ while (line_str[0] == '\n') /* ignore blank lines */ |
|
|
return string_to_cube(line_str, p_cube, 1); |
|
|
return string_to_cube(line_str, p_cube, 1); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ========================================================================= */ |
|
|
/* ========================================================================= */ |
|
|
void pretty_print_unsigned_int(unsigned int nn) |
|
|
|
|
|
|
|
|
int compute_pixels_front(Cube *p_cube, int pixels[9]) |
|
|
/* ------------------------------------------------------------------------- */ |
|
|
/* ------------------------------------------------------------------------- */ |
|
|
|
|
|
|
|
|
{ |
|
|
{ |
|
|
int digits[4], ii, started; |
|
|
|
|
|
|
|
|
pixels[0] = corner_cubie_color[p_cube->corners[CORNER_FUL]]; |
|
|
|
|
|
pixels[1] = edge_cubie_color[p_cube->edges[EDGE_FU]]; |
|
|
|
|
|
pixels[2] = corner_cubie_color[p_cube->corners[CORNER_FRU]]; |
|
|
|
|
|
|
|
|
|
|
|
pixels[3] = edge_cubie_color[p_cube->edges[EDGE_FL]]; |
|
|
|
|
|
pixels[4] = p_cube->centers[FACE_F]; |
|
|
|
|
|
pixels[5] = edge_cubie_color[p_cube->edges[EDGE_FR]]; |
|
|
|
|
|
|
|
|
for (ii = 0; ii < 4; ii++) |
|
|
|
|
|
{ |
|
|
|
|
|
digits[ii] = nn % 1000; |
|
|
|
|
|
nn /= 1000; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
pixels[6] = corner_cubie_color[p_cube->corners[CORNER_FLD]]; |
|
|
|
|
|
pixels[7] = edge_cubie_color[p_cube->edges[EDGE_FD]]; |
|
|
|
|
|
pixels[8] = corner_cubie_color[p_cube->corners[CORNER_FDR]]; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
started = 0; |
|
|
|
|
|
|
|
|
|
|
|
for (ii = 3; ii >= 0; ii--) |
|
|
|
|
|
{ |
|
|
|
|
|
if (started) |
|
|
|
|
|
{ |
|
|
|
|
|
if (digits[ii] >= 100) |
|
|
|
|
|
printf("%3d", digits[ii]); |
|
|
|
|
|
else if (digits[ii] >= 10) |
|
|
|
|
|
printf("0%2d", digits[ii]); |
|
|
|
|
|
else |
|
|
|
|
|
printf("00%1d", digits[ii]); |
|
|
|
|
|
} |
|
|
|
|
|
else |
|
|
|
|
|
{ |
|
|
|
|
|
if (digits[ii] >= 100) |
|
|
|
|
|
{ |
|
|
|
|
|
printf("%3d", digits[ii]); |
|
|
|
|
|
started = 1; |
|
|
|
|
|
} |
|
|
|
|
|
else if (digits[ii] >= 10) |
|
|
|
|
|
{ |
|
|
|
|
|
printf(" %2d", digits[ii]); |
|
|
|
|
|
started = 1; |
|
|
|
|
|
} |
|
|
|
|
|
else if ((digits[ii] >= 1) || (ii == 0)) |
|
|
|
|
|
{ |
|
|
|
|
|
printf(" %1d", digits[ii]); |
|
|
|
|
|
started = 1; |
|
|
|
|
|
} |
|
|
|
|
|
else |
|
|
|
|
|
printf(" "); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
/* ========================================================================= */ |
|
|
|
|
|
int compute_pixels_back(Cube *p_cube, int pixels[9]) |
|
|
|
|
|
/* ------------------------------------------------------------------------- */ |
|
|
|
|
|
|
|
|
if (ii > 0) |
|
|
|
|
|
printf("%c", started ? ',' : ' '); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
pixels[0] = corner_cubie_color[p_cube->corners[CORNER_BUR]]; |
|
|
|
|
|
pixels[1] = edge_cubie_color[p_cube->edges[EDGE_BU]]; |
|
|
|
|
|
pixels[2] = corner_cubie_color[p_cube->corners[CORNER_BLU]]; |
|
|
|
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
pixels[3] = edge_cubie_color[p_cube->edges[EDGE_BR]]; |
|
|
|
|
|
pixels[4] = p_cube->centers[FACE_B]; |
|
|
|
|
|
pixels[5] = edge_cubie_color[p_cube->edges[EDGE_BL]]; |
|
|
|
|
|
|
|
|
|
|
|
pixels[6] = corner_cubie_color[p_cube->corners[CORNER_BRD]]; |
|
|
|
|
|
pixels[7] = edge_cubie_color[p_cube->edges[EDGE_BD]]; |
|
|
|
|
|
pixels[8] = corner_cubie_color[p_cube->corners[CORNER_BDL]]; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
/* ========================================================================= */ |
|
|
/* ========================================================================= */ |
|
|
int main(void) |
|
|
int main(void) |
|
@@ -627,12 +574,23 @@ return; |
|
|
{ |
|
|
{ |
|
|
Cube cube_struct; |
|
|
Cube cube_struct; |
|
|
int stat; |
|
|
int stat; |
|
|
|
|
|
int i; |
|
|
|
|
|
int pixels[9]; |
|
|
|
|
|
|
|
|
while (1) |
|
|
while (1) |
|
|
{ |
|
|
{ |
|
|
stat = user_enters_cube(&cube_struct); |
|
|
stat = user_enters_cube(&cube_struct); |
|
|
if (stat < 0) |
|
|
|
|
|
|
|
|
if (stat != 0) |
|
|
break; |
|
|
break; |
|
|
|
|
|
printf("cube looks fine\n"); |
|
|
|
|
|
compute_pixels_front(&cube_struct, pixels); |
|
|
|
|
|
for(i = 0; i<9; i++) |
|
|
|
|
|
printf("%d", pixels[i]); |
|
|
|
|
|
printf("\n"); |
|
|
|
|
|
compute_pixels_back(&cube_struct, pixels); |
|
|
|
|
|
for(i = 0; i<9; i++) |
|
|
|
|
|
printf("%d", pixels[i]); |
|
|
|
|
|
printf("\n"); |
|
|
} |
|
|
} |
|
|
exit(EXIT_SUCCESS); |
|
|
exit(EXIT_SUCCESS); |
|
|
|
|
|
|
|
|