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 de70dc746f16607e2110f2c6acee8ed8ba2507f8
parent 6008855b28763f297f4379dfcdc23eacb303ee45
Author: Sebastiano Tronto <sebastiano@tronto.net>
Date:   Sun, 15 Dec 2024 16:07:12 +0100

Added more scrambles, found bug

Diffstat:
Atools/400_solvetest/scrambles.h | 62++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mtools/400_solvetest/solve_test.c | 38+++++++-------------------------------
2 files changed, 69 insertions(+), 31 deletions(-)

diff --git a/tools/400_solvetest/scrambles.h b/tools/400_solvetest/scrambles.h @@ -0,0 +1,62 @@ +struct { + char *scramble; + char *solutions; +} s[] = { +[0] = { + .scramble = "R' D R U R' D' R U'", + .solutions = + "U R' D R U' R' D' R\n" + "B' D2 B U' B' D2 B U\n" +}, +[1] = { + .scramble = "R' L U2 R L' B2", + .solutions = + "B2 R' L U2 R L'\n" + "R L' B2 R' L U2\n" + "R B2 R' L U2 L'\n" + "L' B2 R' L U2 R\n" +}, +[2] = { + .scramble = "R2 U2 R2 U2 R2 U2", + .solutions = + "U2 R2 U2 R2 U2 R2\n" + "D2 L2 U2 L2 D2 R2\n" + "U2 L2 D2 R2 D2 L2\n" + "D2 R2 D2 L2 U2 L2\n" + "R2 U2 R2 U2 R2 U2\n" + "L2 D2 R2 D2 L2 U2\n" + "R2 D2 L2 U2 L2 D2\n" + "L2 U2 L2 D2 R2 D2\n" +}, +[3] = { + .scramble = "R U2 R' U' R U2 L' U R' U' L", /* J-perm */ + .solutions = + "R2 D' R' D R' B2 L U' L' B2\n" + "B2 L U L' B2 R D' R D R2\n" +}, +[4] = { + .scramble = "R' U' F D2 L2 F R2 U2 R2 B D2 L B2" + "D' B2 L' R' B D2 B U2 L U2 R' U' F", /* FMC2019 A1 */ + .solutions = + "D2 F' U2 D2 F' L2 D R2 D F B2 R' L2 F' U' D\n" +}, +[5] = { + .scramble = "L B' D2 R2 L2 B' U2 D2 R L' U F2", /* Taken from 6 */ + .solutions = + "B2 R2 L2 D F2 B2 R' L F' U2 B L'\n" + "F2 U' R' L U2 D2 B R2 L2 D2 B L'\n" +}, +[6] = { + .scramble = "R L' B R L' D R L' F R L' U" + "R' L F R L' D R L' B R L' U", /* Random thing */ + .solutions = + "U' R L' B' D2 F R' L F2 B2 U' F2 R2 L2 U2\n" + "U' R L' B' R2 L2 U2 B' U2 D2 R' L D B2 U2\n" + "D2 R' L F R' B' R U B U L F' U' F' D\n" + "D' R' L B' U2 F R L' F2 B2 D' R2 L2 B2 D2\n" + "D' R' L B' D2 R2 L2 B' U2 D2 R L' U F2 D2\n" +}, +{ + .scramble = "", /* End-of-list signal */ +} +}; diff --git a/tools/400_solvetest/solve_test.c b/tools/400_solvetest/solve_test.c @@ -1,35 +1,12 @@ #include "../tool.h" +#include "scrambles.h" -#define SOL_BUFFER_LEN 10000 - -typedef struct { - char *scramble; - char *solutions; -} scramblesol_t; +#define SOL_BUFFER_LEN 100000 char *solver; int64_t size = 0; char *buf; -scramblesol_t s[] = { -[0] = { - .scramble = "R' D R U R' D' R U'", - .solutions = - "U R' D R U' R' D' R\n" - "B' D2 B U' B' D2 B U\n" -}, -[1] = { - .scramble = "R' L U2 R L' B2", - .solutions = - "B2 R' L U2 R L'\n" - "R L' B2 R' L U2\n" - "R B2 R' L U2 L'\n" - "L' B2 R' L U2 R\n" -}, -{ - .scramble = "", /* End-of-list signal */ -} -}; bool check_one(char *actual, char *expected) { unsigned i; @@ -83,14 +60,13 @@ void run(void) { n = nissy_solve(cube, solver, NISSY_NISSFLAG_NORMAL, 0, 20, 1, -1, 0, size, buf, SOL_BUFFER_LEN, sol, stats); if (n == 0) { - printf("Error! No solution found for scramble %s\n", - s[i].scramble); + printf("Error: no solution\n"); return; } if (check_one(sol, s[i].solutions)) { - printf("Single solution for scramble %d is correct\n", i); + printf("Single solution is correct\n"); } else { - printf("Error! Scramble %d: %s\n", i, s[i].scramble); + printf("Error!\n"); printf("Found solution(s):\n%s", sol); printf("Valid solution(s):\n%s", s[i].solutions); return; @@ -105,9 +81,9 @@ void run(void) { n = nissy_solve(cube, solver, NISSY_NISSFLAG_NORMAL, 0, 20, 100, 0, 0, size, buf, SOL_BUFFER_LEN, sol, stats); if (check_all(sol, s[i].solutions)) { - printf("All solutions for scramble %d are correct\n", i); + printf("All solutions are correct\n"); } else { - printf("Error! Scramble %s\n", s[i].scramble); + printf("Error!\n"); printf("Found solution(s):\n%s", sol); printf("Valid solution(s):\n%s", s[i].solutions); return;