h48

A prototype for an optimal Rubik's cube solver, work in progress.
git clone https://git.tronto.net/h48
Download | Log | Files | Refs | README | LICENSE

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:
Msrc/cube.c | 270++++++++++++++++++++++---------------------------------------------------------
Msrc/cube.h | 2++
Asrc/trans_move_arr.h | 389+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mutils/gentranscode.sh | 11++++++++---
Mutils/h48_to_src.c | 1-
Autils/invert.c | 19+++++++++++++++++++
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; +}