commit 989e933fc557cbc1e9e16e45033387816ee6075e
parent 2a8d66906dde19ffb7315fb3f60a396a71612037
Author: Sebastiano Tronto <sebastiano@tronto.net>
Date: Fri, 27 Oct 2023 17:16:58 +0200
Improved transformations and cleaned up
Diffstat:
6 files changed, 492 insertions(+), 200 deletions(-)
diff --git a/src/cube.c b/src/cube.c
@@ -42,6 +42,78 @@
#define _eflip 0x10U
#define _error 0xFFU
+move_t inverse_move[] = {
+ [U] = U3,
+ [U2] = U2,
+ [U3] = U,
+ [D] = D3,
+ [D2] = D2,
+ [D3] = D,
+ [R] = R3,
+ [R2] = R2,
+ [R3] = R,
+ [L] = L3,
+ [L2] = L2,
+ [L3] = L,
+ [F] = F3,
+ [F2] = F2,
+ [F3] = F,
+ [B] = B3,
+ [B2] = B2,
+ [B3] = B,
+};
+
+trans_t inverse_trans[] = {
+ [UFr] = UFr,
+ [ULr] = URr,
+ [UBr] = UBr,
+ [URr] = URr,
+ [DFr] = DFr,
+ [DLr] = DLr,
+ [DRr] = DRr,
+ [DBr] = DBr,
+ [RUr] = FRr,
+ [RFr] = LFr,
+ [RDr] = BLr,
+ [RBr] = RBr,
+ [LUr] = FLr,
+ [LFr] = RFr,
+ [LDr] = BRr,
+ [LBr] = LBr,
+ [FUr] = FUr,
+ [FRr] = RUr,
+ [FDr] = BUr,
+ [FLr] = LUr,
+ [BUr] = FDr,
+ [BLr] = RDr,
+ [BDr] = BDr,
+ [BRr] = LDr,
+ [UFm] = UFm,
+ [ULm] = ULm,
+ [UBm] = UBm,
+ [URm] = ULm,
+ [DFm] = DFm,
+ [DLm] = DRm,
+ [DRm] = DLm,
+ [DBm] = DBm,
+ [RUm] = FLm,
+ [RFm] = RFm,
+ [RDm] = BRm,
+ [RBm] = LBm,
+ [LUm] = FRm,
+ [LFm] = LFm,
+ [LDm] = BLm,
+ [LBm] = RBm,
+ [FUm] = FUm,
+ [FRm] = LUm,
+ [FDm] = BUm,
+ [FLm] = RUm,
+ [BUm] = FDm,
+ [BLm] = LDm,
+ [BDm] = BDm,
+ [BRm] = RDm,
+};
+
static char *cornerstr[] = {
[_c_ufr] = "UFR",
[_c_ubl] = "UBL",
@@ -894,200 +966,7 @@ flipallcorners(cube_t c)
cube_t
transform(cube_t c, trans_t t)
{
- static cube_t trans_move_cube[] = {
- [UFr] = {
- .c = {0, 1, 2, 3, 4, 5, 6, 7},
- .e = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
- },
- [ULr] = {
- .c = {4, 5, 7, 6, 1, 0, 2, 3},
- .e = {5, 4, 7, 6, 0, 1, 2, 3, 25, 26, 27, 24}
- },
- [UBr] = {
- .c = {1, 0, 3, 2, 5, 4, 7, 6},
- .e = {1, 0, 3, 2, 5, 4, 7, 6, 10, 11, 8, 9}
- },
- [URr] = {
- .c = {5, 4, 6, 7, 0, 1, 3, 2},
- .e = {4, 5, 6, 7, 1, 0, 3, 2, 27, 24, 25, 26}
- },
- [DFr] = {
- .c = {2, 3, 0, 1, 6, 7, 4, 5},
- .e = {3, 2, 1, 0, 6, 7, 4, 5, 9, 8, 11, 10}
- },
- [DLr] = {
- .c = {7, 6, 4, 5, 2, 3, 1, 0},
- .e = {6, 7, 4, 5, 2, 3, 0, 1, 26, 25, 24, 27}
- },
- [DBr] = {
- .c = {3, 2, 1, 0, 7, 6, 5, 4},
- .e = {2, 3, 0, 1, 7, 6, 5, 4, 11, 10, 9, 8}
- },
- [DRr] = {
- .c = {6, 7, 5, 4, 3, 2, 0, 1},
- .e = {7, 6, 5, 4, 3, 2, 1, 0, 24, 27, 26, 25}
- },
- [RUr] = {
- .c = {64, 67, 65, 66, 37, 38, 36, 39},
- .e = {20, 23, 22, 21, 24, 27, 26, 25, 0, 1, 2, 3}
- },
- [RFr] = {
- .c = {38, 37, 36, 39, 64, 67, 66, 65},
- .e = {24, 27, 26, 25, 23, 20, 21, 22, 19, 16, 17, 18}
- },
- [RDr] = {
- .c = {67, 64, 66, 65, 38, 37, 39, 36},
- .e = {23, 20, 21, 22, 27, 24, 25, 26, 2, 3, 0, 1}
- },
- [RBr] = {
- .c = {37, 38, 39, 36, 67, 64, 65, 66},
- .e = {27, 24, 25, 26, 20, 23, 22, 21, 17, 18, 19, 16}
- },
- [LUr] = {
- .c = {65, 66, 64, 67, 36, 39, 37, 38},
- .e = {21, 22, 23, 20, 26, 25, 24, 27, 1, 0, 3, 2}
- },
- [LFr] = {
- .c = {36, 39, 38, 37, 66, 65, 64, 67},
- .e = {25, 26, 27, 24, 21, 22, 23, 20, 16, 19, 18, 17}
- },
- [LDr] = {
- .c = {66, 65, 67, 64, 39, 36, 38, 37},
- .e = {22, 21, 20, 23, 25, 26, 27, 24, 3, 2, 1, 0}
- },
- [LBr] = {
- .c = {39, 36, 37, 38, 65, 66, 67, 64},
- .e = {26, 25, 24, 27, 22, 21, 20, 23, 18, 17, 16, 19}
- },
- [FUr] = {
- .c = {68, 70, 69, 71, 32, 34, 33, 35},
- .e = {16, 19, 18, 17, 9, 8, 11, 10, 5, 4, 7, 6}
- },
- [FRr] = {
- .c = {32, 34, 35, 33, 70, 68, 69, 71},
- .e = {8, 9, 10, 11, 16, 19, 18, 17, 20, 23, 22, 21}
- },
- [FDr] = {
- .c = {70, 68, 71, 69, 34, 32, 35, 33},
- .e = {19, 16, 17, 18, 8, 9, 10, 11, 7, 6, 5, 4}
- },
- [FLr] = {
- .c = {34, 32, 33, 35, 68, 70, 71, 69},
- .e = {9, 8, 11, 10, 19, 16, 17, 18, 22, 21, 20, 23}
- },
- [BUr] = {
- .c = {69, 71, 68, 70, 33, 35, 32, 34},
- .e = {17, 18, 19, 16, 11, 10, 9, 8, 4, 5, 6, 7}
- },
- [BRr] = {
- .c = {35, 33, 32, 34, 69, 71, 70, 68},
- .e = {11, 10, 9, 8, 18, 17, 16, 19, 23, 20, 21, 22}
- },
- [BDr] = {
- .c = {71, 69, 70, 68, 35, 33, 34, 32},
- .e = {18, 17, 16, 19, 10, 11, 8, 9, 6, 7, 4, 5}
- },
- [BLr] = {
- .c = {33, 35, 34, 32, 71, 69, 68, 70},
- .e = {10, 11, 8, 9, 17, 18, 19, 16, 21, 22, 23, 20}
- },
- [UFm] = {
- .c = {4, 5, 6, 7, 0, 1, 2, 3},
- .e = {0, 1, 2, 3, 5, 4, 7, 6, 9, 8, 11, 10}
- },
- [ULm] = {
- .c = {0, 1, 3, 2, 5, 4, 6, 7},
- .e = {4, 5, 6, 7, 0, 1, 2, 3, 24, 27, 26, 25}
- },
- [UBm] = {
- .c = {5, 4, 7, 6, 1, 0, 3, 2},
- .e = {1, 0, 3, 2, 4, 5, 6, 7, 11, 10, 9, 8}
- },
- [URm] = {
- .c = {1, 0, 2, 3, 4, 5, 7, 6},
- .e = {5, 4, 7, 6, 1, 0, 3, 2, 26, 25, 24, 27}
- },
- [DFm] = {
- .c = {6, 7, 4, 5, 2, 3, 0, 1},
- .e = {3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11}
- },
- [DLm] = {
- .c = {3, 2, 0, 1, 6, 7, 5, 4},
- .e = {7, 6, 5, 4, 2, 3, 0, 1, 27, 24, 25, 26}
- },
- [DBm] = {
- .c = {7, 6, 5, 4, 3, 2, 1, 0},
- .e = {2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9}
- },
- [DRm] = {
- .c = {2, 3, 1, 0, 7, 6, 4, 5},
- .e = {6, 7, 4, 5, 3, 2, 1, 0, 25, 26, 27, 24}
- },
- [RUm] = {
- .c = {68, 71, 69, 70, 33, 34, 32, 35},
- .e = {21, 22, 23, 20, 25, 26, 27, 24, 0, 1, 2, 3}
- },
- [RFm] = {
- .c = {34, 33, 32, 35, 68, 71, 70, 69},
- .e = {25, 26, 27, 24, 22, 21, 20, 23, 19, 16, 17, 18}
- },
- [RDm] = {
- .c = {71, 68, 70, 69, 34, 33, 35, 32},
- .e = {22, 21, 20, 23, 26, 25, 24, 27, 2, 3, 0, 1}
- },
- [RBm] = {
- .c = {33, 34, 35, 32, 71, 68, 69, 70},
- .e = {26, 25, 24, 27, 21, 22, 23, 20, 17, 18, 19, 16}
- },
- [LUm] = {
- .c = {69, 70, 68, 71, 32, 35, 33, 34},
- .e = {20, 23, 22, 21, 27, 24, 25, 26, 1, 0, 3, 2}
- },
- [LFm] = {
- .c = {32, 35, 34, 33, 70, 69, 68, 71},
- .e = {24, 27, 26, 25, 20, 23, 22, 21, 16, 19, 18, 17}
- },
- [LDm] = {
- .c = {70, 69, 71, 68, 35, 32, 34, 33},
- .e = {23, 20, 21, 22, 24, 27, 26, 25, 3, 2, 1, 0}
- },
- [LBm] = {
- .c = {35, 32, 33, 34, 69, 70, 71, 68},
- .e = {27, 24, 25, 26, 23, 20, 21, 22, 18, 17, 16, 19}
- },
- [FUm] = {
- .c = {64, 66, 65, 67, 36, 38, 37, 39},
- .e = {16, 19, 18, 17, 8, 9, 10, 11, 4, 5, 6, 7}
- },
- [FRm] = {
- .c = {36, 38, 39, 37, 66, 64, 65, 67},
- .e = {9, 8, 11, 10, 16, 19, 18, 17, 21, 22, 23, 20}
- },
- [FDm] = {
- .c = {66, 64, 67, 65, 38, 36, 39, 37},
- .e = {19, 16, 17, 18, 9, 8, 11, 10, 6, 7, 4, 5}
- },
- [FLm] = {
- .c = {38, 36, 37, 39, 64, 66, 67, 65},
- .e = {8, 9, 10, 11, 19, 16, 17, 18, 23, 20, 21, 22}
- },
- [BUm] = {
- .c = {65, 67, 64, 66, 37, 39, 36, 38},
- .e = {17, 18, 19, 16, 10, 11, 8, 9, 5, 4, 7, 6}
- },
- [BRm] = {
- .c = {39, 37, 36, 38, 65, 67, 66, 64},
- .e = {10, 11, 8, 9, 18, 17, 16, 19, 22, 21, 20, 23}
- },
- [BDm] = {
- .c = {67, 65, 66, 64, 39, 37, 38, 36},
- .e = {18, 17, 16, 19, 11, 10, 9, 8, 7, 6, 5, 4}
- },
- [BLm] = {
- .c = {37, 39, 38, 36, 67, 65, 64, 66},
- .e = {11, 10, 9, 8, 17, 18, 19, 16, 20, 23, 22, 21}
- },
- };
+#include "trans_move_arr.h"
cube_t ret;
@@ -1104,8 +983,7 @@ transform(cube_t c, trans_t t)
ret = compose(solvedcube, trans_move_cube[t]);
ret = compose(ret, c);
- /* TODO: pre-compute inverse for performance */
- ret = compose(ret, inverse(trans_move_cube[t]));
+ ret = compose(ret, trans_move_cube_inverse[t]);
/* TODO: work out a better way to do this */
if (t >= 24)
diff --git a/src/cube.h b/src/cube.h
@@ -10,6 +10,8 @@ typedef struct {
typedef uint8_t move_t;
typedef uint8_t trans_t;
+extern move_t inverse_move[];
+extern trans_t inverse_trans[];
extern cube_t solvedcube;
/* Functions *****************************************************************/
diff --git a/src/trans_move_arr.h b/src/trans_move_arr.h
@@ -0,0 +1,389 @@
+static cube_t trans_move_cube[] = {
+ [UFr] = {
+ .c = {0, 1, 2, 3, 4, 5, 6, 7},
+ .e = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
+ },
+ [ULr] = {
+ .c = {4, 5, 7, 6, 1, 0, 2, 3},
+ .e = {5, 4, 7, 6, 0, 1, 2, 3, 25, 26, 27, 24}
+ },
+ [UBr] = {
+ .c = {1, 0, 3, 2, 5, 4, 7, 6},
+ .e = {1, 0, 3, 2, 5, 4, 7, 6, 10, 11, 8, 9}
+ },
+ [URr] = {
+ .c = {5, 4, 6, 7, 0, 1, 3, 2},
+ .e = {4, 5, 6, 7, 1, 0, 3, 2, 27, 24, 25, 26}
+ },
+ [DFr] = {
+ .c = {2, 3, 0, 1, 6, 7, 4, 5},
+ .e = {3, 2, 1, 0, 6, 7, 4, 5, 9, 8, 11, 10}
+ },
+ [DLr] = {
+ .c = {7, 6, 4, 5, 2, 3, 1, 0},
+ .e = {6, 7, 4, 5, 2, 3, 0, 1, 26, 25, 24, 27}
+ },
+ [DBr] = {
+ .c = {3, 2, 1, 0, 7, 6, 5, 4},
+ .e = {2, 3, 0, 1, 7, 6, 5, 4, 11, 10, 9, 8}
+ },
+ [DRr] = {
+ .c = {6, 7, 5, 4, 3, 2, 0, 1},
+ .e = {7, 6, 5, 4, 3, 2, 1, 0, 24, 27, 26, 25}
+ },
+ [RUr] = {
+ .c = {64, 67, 65, 66, 37, 38, 36, 39},
+ .e = {20, 23, 22, 21, 24, 27, 26, 25, 0, 1, 2, 3}
+ },
+ [RFr] = {
+ .c = {38, 37, 36, 39, 64, 67, 66, 65},
+ .e = {24, 27, 26, 25, 23, 20, 21, 22, 19, 16, 17, 18}
+ },
+ [RDr] = {
+ .c = {67, 64, 66, 65, 38, 37, 39, 36},
+ .e = {23, 20, 21, 22, 27, 24, 25, 26, 2, 3, 0, 1}
+ },
+ [RBr] = {
+ .c = {37, 38, 39, 36, 67, 64, 65, 66},
+ .e = {27, 24, 25, 26, 20, 23, 22, 21, 17, 18, 19, 16}
+ },
+ [LUr] = {
+ .c = {65, 66, 64, 67, 36, 39, 37, 38},
+ .e = {21, 22, 23, 20, 26, 25, 24, 27, 1, 0, 3, 2}
+ },
+ [LFr] = {
+ .c = {36, 39, 38, 37, 66, 65, 64, 67},
+ .e = {25, 26, 27, 24, 21, 22, 23, 20, 16, 19, 18, 17}
+ },
+ [LDr] = {
+ .c = {66, 65, 67, 64, 39, 36, 38, 37},
+ .e = {22, 21, 20, 23, 25, 26, 27, 24, 3, 2, 1, 0}
+ },
+ [LBr] = {
+ .c = {39, 36, 37, 38, 65, 66, 67, 64},
+ .e = {26, 25, 24, 27, 22, 21, 20, 23, 18, 17, 16, 19}
+ },
+ [FUr] = {
+ .c = {68, 70, 69, 71, 32, 34, 33, 35},
+ .e = {16, 19, 18, 17, 9, 8, 11, 10, 5, 4, 7, 6}
+ },
+ [FRr] = {
+ .c = {32, 34, 35, 33, 70, 68, 69, 71},
+ .e = {8, 9, 10, 11, 16, 19, 18, 17, 20, 23, 22, 21}
+ },
+ [FDr] = {
+ .c = {70, 68, 71, 69, 34, 32, 35, 33},
+ .e = {19, 16, 17, 18, 8, 9, 10, 11, 7, 6, 5, 4}
+ },
+ [FLr] = {
+ .c = {34, 32, 33, 35, 68, 70, 71, 69},
+ .e = {9, 8, 11, 10, 19, 16, 17, 18, 22, 21, 20, 23}
+ },
+ [BUr] = {
+ .c = {69, 71, 68, 70, 33, 35, 32, 34},
+ .e = {17, 18, 19, 16, 11, 10, 9, 8, 4, 5, 6, 7}
+ },
+ [BRr] = {
+ .c = {35, 33, 32, 34, 69, 71, 70, 68},
+ .e = {11, 10, 9, 8, 18, 17, 16, 19, 23, 20, 21, 22}
+ },
+ [BDr] = {
+ .c = {71, 69, 70, 68, 35, 33, 34, 32},
+ .e = {18, 17, 16, 19, 10, 11, 8, 9, 6, 7, 4, 5}
+ },
+ [BLr] = {
+ .c = {33, 35, 34, 32, 71, 69, 68, 70},
+ .e = {10, 11, 8, 9, 17, 18, 19, 16, 21, 22, 23, 20}
+ },
+ [UFm] = {
+ .c = {4, 5, 6, 7, 0, 1, 2, 3},
+ .e = {0, 1, 2, 3, 5, 4, 7, 6, 9, 8, 11, 10}
+ },
+ [ULm] = {
+ .c = {0, 1, 3, 2, 5, 4, 6, 7},
+ .e = {4, 5, 6, 7, 0, 1, 2, 3, 24, 27, 26, 25}
+ },
+ [UBm] = {
+ .c = {5, 4, 7, 6, 1, 0, 3, 2},
+ .e = {1, 0, 3, 2, 4, 5, 6, 7, 11, 10, 9, 8}
+ },
+ [URm] = {
+ .c = {1, 0, 2, 3, 4, 5, 7, 6},
+ .e = {5, 4, 7, 6, 1, 0, 3, 2, 26, 25, 24, 27}
+ },
+ [DFm] = {
+ .c = {6, 7, 4, 5, 2, 3, 0, 1},
+ .e = {3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11}
+ },
+ [DLm] = {
+ .c = {3, 2, 0, 1, 6, 7, 5, 4},
+ .e = {7, 6, 5, 4, 2, 3, 0, 1, 27, 24, 25, 26}
+ },
+ [DBm] = {
+ .c = {7, 6, 5, 4, 3, 2, 1, 0},
+ .e = {2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9}
+ },
+ [DRm] = {
+ .c = {2, 3, 1, 0, 7, 6, 4, 5},
+ .e = {6, 7, 4, 5, 3, 2, 1, 0, 25, 26, 27, 24}
+ },
+ [RUm] = {
+ .c = {68, 71, 69, 70, 33, 34, 32, 35},
+ .e = {21, 22, 23, 20, 25, 26, 27, 24, 0, 1, 2, 3}
+ },
+ [RFm] = {
+ .c = {34, 33, 32, 35, 68, 71, 70, 69},
+ .e = {25, 26, 27, 24, 22, 21, 20, 23, 19, 16, 17, 18}
+ },
+ [RDm] = {
+ .c = {71, 68, 70, 69, 34, 33, 35, 32},
+ .e = {22, 21, 20, 23, 26, 25, 24, 27, 2, 3, 0, 1}
+ },
+ [RBm] = {
+ .c = {33, 34, 35, 32, 71, 68, 69, 70},
+ .e = {26, 25, 24, 27, 21, 22, 23, 20, 17, 18, 19, 16}
+ },
+ [LUm] = {
+ .c = {69, 70, 68, 71, 32, 35, 33, 34},
+ .e = {20, 23, 22, 21, 27, 24, 25, 26, 1, 0, 3, 2}
+ },
+ [LFm] = {
+ .c = {32, 35, 34, 33, 70, 69, 68, 71},
+ .e = {24, 27, 26, 25, 20, 23, 22, 21, 16, 19, 18, 17}
+ },
+ [LDm] = {
+ .c = {70, 69, 71, 68, 35, 32, 34, 33},
+ .e = {23, 20, 21, 22, 24, 27, 26, 25, 3, 2, 1, 0}
+ },
+ [LBm] = {
+ .c = {35, 32, 33, 34, 69, 70, 71, 68},
+ .e = {27, 24, 25, 26, 23, 20, 21, 22, 18, 17, 16, 19}
+ },
+ [FUm] = {
+ .c = {64, 66, 65, 67, 36, 38, 37, 39},
+ .e = {16, 19, 18, 17, 8, 9, 10, 11, 4, 5, 6, 7}
+ },
+ [FRm] = {
+ .c = {36, 38, 39, 37, 66, 64, 65, 67},
+ .e = {9, 8, 11, 10, 16, 19, 18, 17, 21, 22, 23, 20}
+ },
+ [FDm] = {
+ .c = {66, 64, 67, 65, 38, 36, 39, 37},
+ .e = {19, 16, 17, 18, 9, 8, 11, 10, 6, 7, 4, 5}
+ },
+ [FLm] = {
+ .c = {38, 36, 37, 39, 64, 66, 67, 65},
+ .e = {8, 9, 10, 11, 19, 16, 17, 18, 23, 20, 21, 22}
+ },
+ [BUm] = {
+ .c = {65, 67, 64, 66, 37, 39, 36, 38},
+ .e = {17, 18, 19, 16, 10, 11, 8, 9, 5, 4, 7, 6}
+ },
+ [BRm] = {
+ .c = {39, 37, 36, 38, 65, 67, 66, 64},
+ .e = {10, 11, 8, 9, 18, 17, 16, 19, 22, 21, 20, 23}
+ },
+ [BDm] = {
+ .c = {67, 65, 66, 64, 39, 37, 38, 36},
+ .e = {18, 17, 16, 19, 11, 10, 9, 8, 7, 6, 5, 4}
+ },
+ [BLm] = {
+ .c = {37, 39, 38, 36, 67, 65, 64, 66},
+ .e = {11, 10, 9, 8, 17, 18, 19, 16, 20, 23, 22, 21}
+ },
+};
+
+static cube_t trans_move_cube_inverse[] = {
+ [UFr] = {
+ .c = {0, 1, 2, 3, 4, 5, 6, 7},
+ .e = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
+ },
+ [ULr] = {
+ .c = {5, 4, 6, 7, 0, 1, 3, 2},
+ .e = {4, 5, 6, 7, 1, 0, 3, 2, 27, 24, 25, 26}
+ },
+ [UBr] = {
+ .c = {1, 0, 3, 2, 5, 4, 7, 6},
+ .e = {1, 0, 3, 2, 5, 4, 7, 6, 10, 11, 8, 9}
+ },
+ [URr] = {
+ .c = {4, 5, 7, 6, 1, 0, 2, 3},
+ .e = {5, 4, 7, 6, 0, 1, 2, 3, 25, 26, 27, 24}
+ },
+ [DFr] = {
+ .c = {2, 3, 0, 1, 6, 7, 4, 5},
+ .e = {3, 2, 1, 0, 6, 7, 4, 5, 9, 8, 11, 10}
+ },
+ [DLr] = {
+ .c = {7, 6, 4, 5, 2, 3, 1, 0},
+ .e = {6, 7, 4, 5, 2, 3, 0, 1, 26, 25, 24, 27}
+ },
+ [DBr] = {
+ .c = {3, 2, 1, 0, 7, 6, 5, 4},
+ .e = {2, 3, 0, 1, 7, 6, 5, 4, 11, 10, 9, 8}
+ },
+ [DRr] = {
+ .c = {6, 7, 5, 4, 3, 2, 0, 1},
+ .e = {7, 6, 5, 4, 3, 2, 1, 0, 24, 27, 26, 25}
+ },
+ [RUr] = {
+ .c = {32, 34, 35, 33, 70, 68, 69, 71},
+ .e = {8, 9, 10, 11, 16, 19, 18, 17, 20, 23, 22, 21}
+ },
+ [RFr] = {
+ .c = {36, 39, 38, 37, 66, 65, 64, 67},
+ .e = {25, 26, 27, 24, 21, 22, 23, 20, 16, 19, 18, 17}
+ },
+ [RDr] = {
+ .c = {33, 35, 34, 32, 71, 69, 68, 70},
+ .e = {10, 11, 8, 9, 17, 18, 19, 16, 21, 22, 23, 20}
+ },
+ [RBr] = {
+ .c = {37, 38, 39, 36, 67, 64, 65, 66},
+ .e = {27, 24, 25, 26, 20, 23, 22, 21, 17, 18, 19, 16}
+ },
+ [LUr] = {
+ .c = {34, 32, 33, 35, 68, 70, 71, 69},
+ .e = {9, 8, 11, 10, 19, 16, 17, 18, 22, 21, 20, 23}
+ },
+ [LFr] = {
+ .c = {38, 37, 36, 39, 64, 67, 66, 65},
+ .e = {24, 27, 26, 25, 23, 20, 21, 22, 19, 16, 17, 18}
+ },
+ [LDr] = {
+ .c = {35, 33, 32, 34, 69, 71, 70, 68},
+ .e = {11, 10, 9, 8, 18, 17, 16, 19, 23, 20, 21, 22}
+ },
+ [LBr] = {
+ .c = {39, 36, 37, 38, 65, 66, 67, 64},
+ .e = {26, 25, 24, 27, 22, 21, 20, 23, 18, 17, 16, 19}
+ },
+ [FUr] = {
+ .c = {68, 70, 69, 71, 32, 34, 33, 35},
+ .e = {16, 19, 18, 17, 9, 8, 11, 10, 5, 4, 7, 6}
+ },
+ [FRr] = {
+ .c = {64, 67, 65, 66, 37, 38, 36, 39},
+ .e = {20, 23, 22, 21, 24, 27, 26, 25, 0, 1, 2, 3}
+ },
+ [FDr] = {
+ .c = {69, 71, 68, 70, 33, 35, 32, 34},
+ .e = {17, 18, 19, 16, 11, 10, 9, 8, 4, 5, 6, 7}
+ },
+ [FLr] = {
+ .c = {65, 66, 64, 67, 36, 39, 37, 38},
+ .e = {21, 22, 23, 20, 26, 25, 24, 27, 1, 0, 3, 2}
+ },
+ [BUr] = {
+ .c = {70, 68, 71, 69, 34, 32, 35, 33},
+ .e = {19, 16, 17, 18, 8, 9, 10, 11, 7, 6, 5, 4}
+ },
+ [BRr] = {
+ .c = {66, 65, 67, 64, 39, 36, 38, 37},
+ .e = {22, 21, 20, 23, 25, 26, 27, 24, 3, 2, 1, 0}
+ },
+ [BDr] = {
+ .c = {71, 69, 70, 68, 35, 33, 34, 32},
+ .e = {18, 17, 16, 19, 10, 11, 8, 9, 6, 7, 4, 5}
+ },
+ [BLr] = {
+ .c = {67, 64, 66, 65, 38, 37, 39, 36},
+ .e = {23, 20, 21, 22, 27, 24, 25, 26, 2, 3, 0, 1}
+ },
+ [UFm] = {
+ .c = {4, 5, 6, 7, 0, 1, 2, 3},
+ .e = {0, 1, 2, 3, 5, 4, 7, 6, 9, 8, 11, 10}
+ },
+ [ULm] = {
+ .c = {0, 1, 3, 2, 5, 4, 6, 7},
+ .e = {4, 5, 6, 7, 0, 1, 2, 3, 24, 27, 26, 25}
+ },
+ [UBm] = {
+ .c = {5, 4, 7, 6, 1, 0, 3, 2},
+ .e = {1, 0, 3, 2, 4, 5, 6, 7, 11, 10, 9, 8}
+ },
+ [URm] = {
+ .c = {1, 0, 2, 3, 4, 5, 7, 6},
+ .e = {5, 4, 7, 6, 1, 0, 3, 2, 26, 25, 24, 27}
+ },
+ [DFm] = {
+ .c = {6, 7, 4, 5, 2, 3, 0, 1},
+ .e = {3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11}
+ },
+ [DLm] = {
+ .c = {2, 3, 1, 0, 7, 6, 4, 5},
+ .e = {6, 7, 4, 5, 3, 2, 1, 0, 25, 26, 27, 24}
+ },
+ [DBm] = {
+ .c = {7, 6, 5, 4, 3, 2, 1, 0},
+ .e = {2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9}
+ },
+ [DRm] = {
+ .c = {3, 2, 0, 1, 6, 7, 5, 4},
+ .e = {7, 6, 5, 4, 2, 3, 0, 1, 27, 24, 25, 26}
+ },
+ [RUm] = {
+ .c = {70, 68, 69, 71, 32, 34, 35, 33},
+ .e = {8, 9, 10, 11, 19, 16, 17, 18, 23, 20, 21, 22}
+ },
+ [RFm] = {
+ .c = {66, 65, 64, 67, 36, 39, 38, 37},
+ .e = {25, 26, 27, 24, 22, 21, 20, 23, 19, 16, 17, 18}
+ },
+ [RDm] = {
+ .c = {71, 69, 68, 70, 33, 35, 34, 32},
+ .e = {10, 11, 8, 9, 18, 17, 16, 19, 22, 21, 20, 23}
+ },
+ [RBm] = {
+ .c = {67, 64, 65, 66, 37, 38, 39, 36},
+ .e = {27, 24, 25, 26, 23, 20, 21, 22, 18, 17, 16, 19}
+ },
+ [LUm] = {
+ .c = {68, 70, 71, 69, 34, 32, 33, 35},
+ .e = {9, 8, 11, 10, 16, 19, 18, 17, 21, 22, 23, 20}
+ },
+ [LFm] = {
+ .c = {64, 67, 66, 65, 38, 37, 36, 39},
+ .e = {24, 27, 26, 25, 20, 23, 22, 21, 16, 19, 18, 17}
+ },
+ [LDm] = {
+ .c = {69, 71, 70, 68, 35, 33, 32, 34},
+ .e = {11, 10, 9, 8, 17, 18, 19, 16, 20, 23, 22, 21}
+ },
+ [LBm] = {
+ .c = {65, 66, 67, 64, 39, 36, 37, 38},
+ .e = {26, 25, 24, 27, 21, 22, 23, 20, 17, 18, 19, 16}
+ },
+ [FUm] = {
+ .c = {32, 34, 33, 35, 68, 70, 69, 71},
+ .e = {16, 19, 18, 17, 8, 9, 10, 11, 4, 5, 6, 7}
+ },
+ [FRm] = {
+ .c = {37, 38, 36, 39, 64, 67, 65, 66},
+ .e = {20, 23, 22, 21, 27, 24, 25, 26, 1, 0, 3, 2}
+ },
+ [FDm] = {
+ .c = {33, 35, 32, 34, 69, 71, 68, 70},
+ .e = {17, 18, 19, 16, 10, 11, 8, 9, 5, 4, 7, 6}
+ },
+ [FLm] = {
+ .c = {36, 39, 37, 38, 65, 66, 64, 67},
+ .e = {21, 22, 23, 20, 25, 26, 27, 24, 0, 1, 2, 3}
+ },
+ [BUm] = {
+ .c = {34, 32, 35, 33, 70, 68, 71, 69},
+ .e = {19, 16, 17, 18, 9, 8, 11, 10, 6, 7, 4, 5}
+ },
+ [BRm] = {
+ .c = {39, 36, 38, 37, 66, 65, 67, 64},
+ .e = {22, 21, 20, 23, 26, 25, 24, 27, 2, 3, 0, 1}
+ },
+ [BDm] = {
+ .c = {35, 33, 34, 32, 71, 69, 70, 68},
+ .e = {18, 17, 16, 19, 11, 10, 9, 8, 7, 6, 5, 4}
+ },
+ [BLm] = {
+ .c = {38, 37, 39, 36, 67, 64, 66, 65},
+ .e = {23, 20, 21, 22, 24, 27, 26, 25, 3, 2, 1, 0}
+ },
+};
diff --git a/utils/gentranscode.sh b/utils/gentranscode.sh
@@ -1,12 +1,17 @@
#!/bin/sh
-gcc -DDEBUG h48_to_src.c ../src/cube.c
+gcc -DDEBUG h48_to_src.c ../src/cube.c -o h48_to_src
+gcc -DDEBUG invert.c ../src/cube.c -o invert
for f in transform_??_???.txt; do
trans="$(echo $f | sed 's/.*_// ; s/\.txt//')"
printf '[%s] = ' "$trans"
- ./a.out <"$f"
+ if [ "$1" = "-i" ]; then
+ ./invert <"$f" | ./h48_to_src
+ else
+ ./h48_to_src <"$f"
+ fi
printf ',\n'
done
-rm a.out
+rm -f h48_to_src invert
diff --git a/utils/h48_to_src.c b/utils/h48_to_src.c
@@ -14,7 +14,6 @@ int main() {
cube = readcube(H48, str);
writecube(SRC, cube, str);
fputs(str, stdout);
- /* putc('\n', stdout); */
return 0;
}
diff --git a/utils/invert.c b/utils/invert.c
@@ -0,0 +1,19 @@
+#include <stdio.h>
+#include <inttypes.h>
+#include <stdbool.h>
+
+#include "../src/cube.h"
+
+#define STRLENMAX 1000
+
+int main() {
+ char str[STRLENMAX];
+ cube_t cube;
+
+ fgets(str, STRLENMAX, stdin);
+ cube = readcube(H48, str);
+ writecube(H48, inverse(cube), str);
+ fputs(str, stdout);
+
+ return 0;
+}