Beispiel #1
0
static int _generate_corners(uint8_t * cornersOut) {
    Perm * p = rand_perm(8);

    srand(time(NULL));

    int i;
    for (i = 0; i < 8; i++) {
        int piece = p->map[i];
        int coset = cube_perm_corner_coset(piece, i);
        int perm = rand() % 3;
        if (perm != 0) perm += 3; // perms are 0, 4, and 5
        int orientation = symmetry_operation_compose(coset, perm);
        cornersOut[i] = piece | (orientation << 4);
    }

    while (!validate_corner_orientation(cornersOut)) {
        int sym = (cornersOut[7] >> 4) & 7;
        sym = symmetry_operation_compose(sym, 4);
        cornersOut[7] &= 0xf;
        cornersOut[7] |= (sym << 4);
    }

    int parity = perm_parity(p);
    perm_free(p);
    return parity;
}
Beispiel #2
0
int main( int argc, char ** argv)
{
	perm_t * u = perm_new();
	assert( u != NULL );
	printf("created perm %p\n",u);
	perm_set_name(u,"ken");
	printf("set perm %s\n",perm_get_name(u));
	assert( strcmp(perm_get_name(u),"ken") == 0 );
	perm_free(u);
	return 0;
}
Beispiel #3
0
static void _generate_edges(uint8_t * edgesOut, int cornerParity) {
    Perm * p = rand_perm(12);
    if (perm_parity(p) != cornerParity) {
        rand_change_parity(p);
    }
    uint16_t edgeOrientations = 0;
    int i;
    for (i = 0; i < 12; i++) {
        int piece = p->map[i];
        int s1, s2;
        cube_perm_edge_symmetries(piece, i, &s1, &s2);
        int sym = rand() % 2 == 0 ? s1 : s2;
        edgesOut[i] = piece | (sym << 4);
        if (i == 11) {
            if (!validate_edges(edgesOut)) {
                int newSym = sym == s1 ? s2 : s1;
                edgesOut[i] = piece | (newSym << 4);
            }
        }
    }

    perm_free(p);
}
Beispiel #4
0
void perm_release (Permissions_t perm)
{
	unsigned	h;

	perm_free (perm_lookup (perm, &h));
}