1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
typedef enum {
U, U2, U3, D, D2, D3,
R, R2, R3, L, L2, L3,
F, F2, F3, B, B2, B3
} move_t;
typedef enum {
UFr, ULr, UBr, URr, DFr, DLr, DBr, DRr,
RUr, RFr, RDr, RBr, LUr, LFr, LDr, LBr,
FUr, FRr, FDr, FLr, BUr, BRr, BDr, BLr,
UFm, ULm, UBm, URm, DFm, DLm, DBm, DRm,
RUm, RFm, RDm, RBm, LUm, LFm, LDm, LBm,
FUm, FRm, FDm, FLm, BUm, BRm, BDm, BLm
} trans_t;
typedef struct {
uint8_t corner[8];
uint8_t edge[12];
} cube_t;
cube_t cube_new(void);
cube_t cube_clone(cube_t);
bool cube_consistent(cube_t);
bool cube_solvable(cube_t);
bool cube_solved(cube_t);
bool cube_equal(cube_t, cube_t);
bool cube_error(cube_t);
cube_t cube_compose(cube_t, cube_t);
cube_t cube_inverse(cube_t);
cube_t cube_move(cube_t, move_t);
cube_t cube_transform(cube_t, trans_t);
int64_t cube_coord_co(cube_t);
int64_t cube_coord_eo(cube_t);
cube_t cube_read(char *format, char *buf);
void cube_write(char *format, cube_t cube, char *buf);
int cube_readmoves(char *, move_t *);
char *cube_movestr(move_t);
trans_t cube_readtrans(char *);
char *cube_transstr(trans_t);
move_t cube_inversemove(move_t);
trans_t cube_inversetrans(trans_t);
|