diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2025-07-31 08:38:37 +0200 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2025-07-31 08:38:37 +0200 |
| commit | e2b154c40acaac4e7a7b3e379ada0404519c3750 (patch) | |
| tree | 2ddca6533b03180eee1cd199d1c5a56586211a65 | |
| parent | 36c317ebd1cf1dba8a8cbec494f4d3971e6cefd3 (diff) | |
| download | nissy-core-e2b154c40acaac4e7a7b3e379ada0404519c3750.tar.gz nissy-core-e2b154c40acaac4e7a7b3e379ada0404519c3750.zip | |
Added solvetest for EO (broken for now)
| -rw-r--r-- | tools/400_solvetest_optimal/scrambles.h (renamed from tools/400_solvetest/scrambles.h) | 0 | ||||
| -rw-r--r-- | tools/400_solvetest_optimal/solvetest.c | 8 | ||||
| -rw-r--r-- | tools/401_solvetest_opt0_EO_FB/scrambles.h | 300 | ||||
| -rw-r--r-- | tools/401_solvetest_opt0_EO_FB/solvetest.c | 8 | ||||
| -rw-r--r-- | tools/solvetest.h (renamed from tools/400_solvetest/solve_test.c) | 30 | ||||
| -rwxr-xr-x | utils/solvetest_gen.sh | 23 |
6 files changed, 343 insertions, 26 deletions
diff --git a/tools/400_solvetest/scrambles.h b/tools/400_solvetest_optimal/scrambles.h index 59037be..59037be 100644 --- a/tools/400_solvetest/scrambles.h +++ b/tools/400_solvetest_optimal/scrambles.h | |||
diff --git a/tools/400_solvetest_optimal/solvetest.c b/tools/400_solvetest_optimal/solvetest.c new file mode 100644 index 0000000..0b6575f --- /dev/null +++ b/tools/400_solvetest_optimal/solvetest.c | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | #define NISSFLAG NISSY_NISSFLAG_NORMAL | ||
| 2 | #define MINMOVES 0 | ||
| 3 | #define MAXMOVES 20 | ||
| 4 | #define MAXSOLUTIONS 100 | ||
| 5 | #define OPTIMAL 0 | ||
| 6 | |||
| 7 | #include "scrambles.h" | ||
| 8 | #include "../solvetest.h" | ||
diff --git a/tools/401_solvetest_opt0_EO_FB/scrambles.h b/tools/401_solvetest_opt0_EO_FB/scrambles.h new file mode 100644 index 0000000..09cde32 --- /dev/null +++ b/tools/401_solvetest_opt0_EO_FB/scrambles.h | |||
| @@ -0,0 +1,300 @@ | |||
| 1 | struct { | ||
| 2 | char *scramble; | ||
| 3 | char *solutions; | ||
| 4 | } s[] = { | ||
| 5 | [0] = { | ||
| 6 | .scramble = "B R' F2 D' B' R B' L U R2 U' B2 U L2 B2 L2 U' D R2 U B2 R2", | ||
| 7 | .solutions = | ||
| 8 | "L F' U' F\n" | ||
| 9 | "L' F D F\n" | ||
| 10 | "R B' U' B\n" | ||
| 11 | "R' B D B\n" | ||
| 12 | "(U2 F' L2 F)\n" | ||
| 13 | "(L2 F U2 F)\n" | ||
| 14 | "(U B' U' B)\n" | ||
| 15 | "(U2 B' U2 B)\n" | ||
| 16 | "(U' B' U B)\n" | ||
| 17 | "(L B L' B)\n" | ||
| 18 | "(L2 B L2 B)\n" | ||
| 19 | "(L' B L B)\n" | ||
| 20 | "B (U D' B)\n" | ||
| 21 | "B R' B (B)\n" | ||
| 22 | }, | ||
| 23 | [1] = { | ||
| 24 | .scramble = "U2 L F' B R2 B2 D' B R L2 D' L2 B2 L2 U' F2 U' L2 D2 B2 U' L2", | ||
| 25 | .solutions = | ||
| 26 | "(B U D2 F)\n" | ||
| 27 | "R B (U' B)\n" | ||
| 28 | "R L B (B)\n" | ||
| 29 | "B (B R B)\n" | ||
| 30 | }, | ||
| 31 | [2] = { | ||
| 32 | .scramble = "U2 F U D' L2 U' B U L U R2 D2 B2 D' F2 U' L2 U2 F2 R2 F2", | ||
| 33 | .solutions = | ||
| 34 | "(D' B D2 F)\n" | ||
| 35 | "(D' F L2 B)\n" | ||
| 36 | "(F D' L2 B)\n" | ||
| 37 | "(F L D' B)\n" | ||
| 38 | }, | ||
| 39 | [3] = { | ||
| 40 | .scramble = "F2 R B' U D' F U L2 D2 R F L2 U2 B' R2 D2 F2 B' D2 L2 F2", | ||
| 41 | .solutions = | ||
| 42 | "B R F (U2 F)\n" | ||
| 43 | "B R' F (U F)\n" | ||
| 44 | "B' R F (U2 F)\n" | ||
| 45 | "B' R' F (U F)\n" | ||
| 46 | "B (B2 U F B)\n" | ||
| 47 | "B (B2 U' F B)\n" | ||
| 48 | "F B (U R' F)\n" | ||
| 49 | "F B (R' U2 F)\n" | ||
| 50 | }, | ||
| 51 | [4] = { | ||
| 52 | .scramble = "R' U' D' B D2 R' U L' D' F U L2 B2 U F2 U D L2 F2 L2 F2", | ||
| 53 | .solutions = | ||
| 54 | "D L' B (B)\n" | ||
| 55 | "L' D B (B)\n" | ||
| 56 | }, | ||
| 57 | [5] = { | ||
| 58 | .scramble = "D' B R B2 L' F R U' R2 B' R2 F2 D' L2 U' L2 U B2 D F2 D' F2 L2", | ||
| 59 | .solutions = | ||
| 60 | "U F (R2 B)\n" | ||
| 61 | }, | ||
| 62 | [6] = { | ||
| 63 | .scramble = "L2 B' U D2 R2 D' B' L' U L2 U' F2 R2 D B2 L2 U2 D B2", | ||
| 64 | .solutions = | ||
| 65 | "F' B U F\n" | ||
| 66 | "F' B' U F\n" | ||
| 67 | "(D B' U2 F)\n" | ||
| 68 | "(D' B' U2 F)\n" | ||
| 69 | "(D F' L2 B)\n" | ||
| 70 | "(D' F' L2 B)\n" | ||
| 71 | "B (F D F)\n" | ||
| 72 | }, | ||
| 73 | [7] = { | ||
| 74 | .scramble = "F2 D' L2 B L F L B2 U' F2 R2 L2 U2 L2 F L2 B2 R2 B U2", | ||
| 75 | .solutions = | ||
| 76 | "F U' L' D' F\n" | ||
| 77 | "F' U' R D F\n" | ||
| 78 | "F' R U' D F\n" | ||
| 79 | "(B D B L F)\n" | ||
| 80 | "(B D B' L F)\n" | ||
| 81 | "(B D' B L F)\n" | ||
| 82 | "(B D' B' L F)\n" | ||
| 83 | "(D F U2 R B)\n" | ||
| 84 | "(D' F U2 R B)\n" | ||
| 85 | "(L' B D F B)\n" | ||
| 86 | "(L' B D' F B)\n" | ||
| 87 | "(B L' D F B)\n" | ||
| 88 | "(B L' D' F B)\n" | ||
| 89 | "U F (D2 L' F)\n" | ||
| 90 | "U2 F (D' L' F)\n" | ||
| 91 | "U2 F (F2 R F)\n" | ||
| 92 | "U2 D' F (L2 F)\n" | ||
| 93 | "U2 R F (L F)\n" | ||
| 94 | "U' F (F D' F)\n" | ||
| 95 | "R U2 F (L F)\n" | ||
| 96 | "F (U D' L F)\n" | ||
| 97 | "F (U L D' F)\n" | ||
| 98 | "F (D' F2 R' F)\n" | ||
| 99 | "F (F D' R' F)\n" | ||
| 100 | "F (F2 U R F)\n" | ||
| 101 | "F' D L2 B (F)\n" | ||
| 102 | "F' L2 D B (F)\n" | ||
| 103 | }, | ||
| 104 | [8] = { | ||
| 105 | .scramble = "D L2 F2 L U B R2 L' F U R2 U F2 D2 B2 R2 D' R2 U' F2 L2 D'", | ||
| 106 | .solutions = | ||
| 107 | "R' B U' R2 F\n" | ||
| 108 | "R' B R2 U' F\n" | ||
| 109 | "(F R2 U' D' F)\n" | ||
| 110 | "(U F L2 D' B)\n" | ||
| 111 | "(F L2 U' D' B)\n" | ||
| 112 | "(F2 B U F B)\n" | ||
| 113 | "(F2 B U' F B)\n" | ||
| 114 | "U' R D F (F)\n" | ||
| 115 | "D F (F U B)\n" | ||
| 116 | "D F (F' U B)\n" | ||
| 117 | "R F (D2 L F)\n" | ||
| 118 | "R F (L D2 F)\n" | ||
| 119 | "R U' D F (F)\n" | ||
| 120 | "F (B L2 D F)\n" | ||
| 121 | "B U' F (D' B)\n" | ||
| 122 | "B' U' F (D' B)\n" | ||
| 123 | "U2 F R B (B)\n" | ||
| 124 | "U2 F' R B (B)\n" | ||
| 125 | "F U R B (B)\n" | ||
| 126 | "F B2 L' B (B)\n" | ||
| 127 | "F' U R B (B)\n" | ||
| 128 | "F' B2 L' B (B)\n" | ||
| 129 | }, | ||
| 130 | [9] = { | ||
| 131 | .scramble = "F R L2 U2 L' U2 R D' L F D2 L2 F R2 D2 B R2 U2 F2 R2 F", | ||
| 132 | .solutions = | ||
| 133 | "D2 B (F)\n" | ||
| 134 | }, | ||
| 135 | [10] = { | ||
| 136 | .scramble = "R' U' R2 L2 D' L' F' B R2 D' F' U2 D2 L2 U2 F' U2 B2 R2 B D2", | ||
| 137 | .solutions = | ||
| 138 | "U' B R2 D' F\n" | ||
| 139 | "F U B R2 F\n" | ||
| 140 | "F U' B R2 F\n" | ||
| 141 | "F2 U B' L2 F\n" | ||
| 142 | "F2 U' B' L2 F\n" | ||
| 143 | "F U F D2 B\n" | ||
| 144 | "F U' F D2 B\n" | ||
| 145 | "F2 U F' D2 B\n" | ||
| 146 | "F2 U' F' D2 B\n" | ||
| 147 | "(B L B U F)\n" | ||
| 148 | "(B L B' U F)\n" | ||
| 149 | "(B L' B U F)\n" | ||
| 150 | "(B L' B' U F)\n" | ||
| 151 | "(L F R2 D B)\n" | ||
| 152 | "(L' F R2 D B)\n" | ||
| 153 | "(U' B L F B)\n" | ||
| 154 | "(U' B L' F B)\n" | ||
| 155 | "(B U' L F B)\n" | ||
| 156 | "(B U' L' F B)\n" | ||
| 157 | "U' R' F (L F)\n" | ||
| 158 | "R' F (D L F)\n" | ||
| 159 | "F2 L F (L F)\n" | ||
| 160 | "F2 L2 F (L' F)\n" | ||
| 161 | "B2 R2 F (L' F)\n" | ||
| 162 | "U2 B (D' L B)\n" | ||
| 163 | "U2 B (L D2 B)\n" | ||
| 164 | }, | ||
| 165 | [11] = { | ||
| 166 | .scramble = "U B D R' L2 U' L' F2 L' B' R2 B2 L2 B2 D R2 F2 D R2 F2 D' L2", | ||
| 167 | .solutions = | ||
| 168 | "D R F\n" | ||
| 169 | "F2 L' F\n" | ||
| 170 | }, | ||
| 171 | [12] = { | ||
| 172 | .scramble = "U2 L' U L U' L2 U F' R F U2 F2 D' B2 D' F2 R2 U' F2 R2 U", | ||
| 173 | .solutions = | ||
| 174 | "F L F\n" | ||
| 175 | "(F' R F)\n" | ||
| 176 | }, | ||
| 177 | [13] = { | ||
| 178 | .scramble = "U2 D R L U' R L F' R F D2 B L2 F' L2 D2 F U2 D2 F D2", | ||
| 179 | .solutions = | ||
| 180 | "U R2 B (F)\n" | ||
| 181 | "R2 U B (F)\n" | ||
| 182 | "B (U' D F)\n" | ||
| 183 | }, | ||
| 184 | [14] = { | ||
| 185 | .scramble = "L' B L F D' L U R' F2 B' R2 U2 B R2 U2 B U2 B' L2 U2 B2", | ||
| 186 | .solutions = | ||
| 187 | "U D F B\n" | ||
| 188 | "U D' F B\n" | ||
| 189 | "U' D F B\n" | ||
| 190 | "U' D' F B\n" | ||
| 191 | "D2 F (F B)\n" | ||
| 192 | }, | ||
| 193 | [15] = { | ||
| 194 | .scramble = "B D F L2 D2 L' B' R B' R2 L2 U' B2 U F2 U' D' B2 U' F2", | ||
| 195 | .solutions = | ||
| 196 | "U' F R L B\n" | ||
| 197 | "U' F' R L B\n" | ||
| 198 | "L' U' F R B\n" | ||
| 199 | "L' U' F' R B\n" | ||
| 200 | "L' F R U B\n" | ||
| 201 | "L' F' R U B\n" | ||
| 202 | "F R U L B\n" | ||
| 203 | "F' R U L B\n" | ||
| 204 | "(D' R' B D' F)\n" | ||
| 205 | "(D' R' B' D' F)\n" | ||
| 206 | "(R B D R' F)\n" | ||
| 207 | "(R B R' D F)\n" | ||
| 208 | "(R B' D R' F)\n" | ||
| 209 | "(R B' R' D F)\n" | ||
| 210 | "(R2 D' B R F)\n" | ||
| 211 | "(R2 D' B' R F)\n" | ||
| 212 | "(R2 B R D F)\n" | ||
| 213 | "(R2 B' R D F)\n" | ||
| 214 | "(D F D' R B)\n" | ||
| 215 | "(D F R D' B)\n" | ||
| 216 | "(D F' D' R B)\n" | ||
| 217 | "(D F' R D' B)\n" | ||
| 218 | "(D2 R' F D B)\n" | ||
| 219 | "(D2 R' F' D B)\n" | ||
| 220 | "(D2 F D R B)\n" | ||
| 221 | "(D2 F' D R B)\n" | ||
| 222 | "(R' D' F R' B)\n" | ||
| 223 | "(R' D' F' R' B)\n" | ||
| 224 | "U B' D2 F (F)\n" | ||
| 225 | "U' F (D R' F)\n" | ||
| 226 | "U' F (R' D F)\n" | ||
| 227 | "U' D2 F (D F)\n" | ||
| 228 | "U' B' D2 F (F)\n" | ||
| 229 | "D2 F (U2 D F)\n" | ||
| 230 | "R' L' F (R B)\n" | ||
| 231 | "L' F (R L B)\n" | ||
| 232 | "F (U D R' F)\n" | ||
| 233 | "F (U R' D F)\n" | ||
| 234 | "F (D R' U2 F)\n" | ||
| 235 | "F (R' U2 D F)\n" | ||
| 236 | "F (D' R L2 B)\n" | ||
| 237 | "F (R D' L2 B)\n" | ||
| 238 | "F (R L D' B)\n" | ||
| 239 | "F (L D' R B)\n" | ||
| 240 | "U F' R2 B (F)\n" | ||
| 241 | "U' R' B (F B)\n" | ||
| 242 | "U' F' R2 B (F)\n" | ||
| 243 | "R B (F R' B)\n" | ||
| 244 | "R B (F' R' B)\n" | ||
| 245 | }, | ||
| 246 | [16] = { | ||
| 247 | .scramble = "D F2 R L B D' F' R' B L' D2 L' U2 R U2 B2 L F2 L2 B2", | ||
| 248 | .solutions = | ||
| 249 | "R F B (B)\n" | ||
| 250 | "R' F B (B)\n" | ||
| 251 | }, | ||
| 252 | [17] = { | ||
| 253 | .scramble = "R U2 F' L B' R' D2 L' F' D' R2 D' R2 D' F2 R2 F2 D R2", | ||
| 254 | .solutions = | ||
| 255 | "R' F (L B)\n" | ||
| 256 | }, | ||
| 257 | [18] = { | ||
| 258 | .scramble = "B' R2 B2 R D' R U' F2 U2 D L2 F' D2 R2 F2 D2 R2 L2 B' D2 B", | ||
| 259 | .solutions = | ||
| 260 | "B' U' D2 F\n" | ||
| 261 | "(U2 B' R2 F)\n" | ||
| 262 | "(R2 B U2 F)\n" | ||
| 263 | "(U2 F' U2 B)\n" | ||
| 264 | "(R2 F R2 B)\n" | ||
| 265 | "F D2 F (B)\n" | ||
| 266 | "B R2 B (B)\n" | ||
| 267 | }, | ||
| 268 | [19] = { | ||
| 269 | .scramble = "B L U' R2 D2 F B L U2 F' R2 F2 R2 L2 D' B2 L2 D2 L2 D' L2", | ||
| 270 | .solutions = | ||
| 271 | "U L' B D2 F\n" | ||
| 272 | "U B D L' F\n" | ||
| 273 | "U B L' D2 F\n" | ||
| 274 | "U' L' B D2 F\n" | ||
| 275 | "U' B D L' F\n" | ||
| 276 | "U' B L' D2 F\n" | ||
| 277 | "U L' F L2 B\n" | ||
| 278 | "U' L' F L2 B\n" | ||
| 279 | "F' U F L B\n" | ||
| 280 | "F' U F' L B\n" | ||
| 281 | "F' U' F L B\n" | ||
| 282 | "F' U' F' L B\n" | ||
| 283 | "F' L' U F B\n" | ||
| 284 | "F' L' U' F B\n" | ||
| 285 | "(R' L B U2 F)\n" | ||
| 286 | "(R' L' B U2 F)\n" | ||
| 287 | "(L B U R' F)\n" | ||
| 288 | "(L B R' U2 F)\n" | ||
| 289 | "(L' B U R' F)\n" | ||
| 290 | "(L' B R' U2 F)\n" | ||
| 291 | "(R' L F R2 B)\n" | ||
| 292 | "(R' L' F R2 B)\n" | ||
| 293 | "(F L F R B)\n" | ||
| 294 | "(F L F' R B)\n" | ||
| 295 | "(F L' F R B)\n" | ||
| 296 | "(F L' F' R B)\n" | ||
| 297 | "(R F L F B)\n" | ||
| 298 | "(R F L' F B)\n" | ||
| 299 | }, | ||
| 300 | }; | ||
diff --git a/tools/401_solvetest_opt0_EO_FB/solvetest.c b/tools/401_solvetest_opt0_EO_FB/solvetest.c new file mode 100644 index 0000000..5b30590 --- /dev/null +++ b/tools/401_solvetest_opt0_EO_FB/solvetest.c | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | #define NISSFLAG NISSY_NISSFLAG_ALL | ||
| 2 | #define MINMOVES 0 | ||
| 3 | #define MAXMOVES 20 | ||
| 4 | #define MAXSOLUTIONS 500 | ||
| 5 | #define OPTIMAL 0 | ||
| 6 | |||
| 7 | #include "scrambles.h" | ||
| 8 | #include "../solvetest.h" | ||
diff --git a/tools/400_solvetest/solve_test.c b/tools/solvetest.h index 73e6e8e..4a36736 100644 --- a/tools/400_solvetest/solve_test.c +++ b/tools/solvetest.h | |||
| @@ -1,5 +1,4 @@ | |||
| 1 | #include "../tool.h" | 1 | #include "tool.h" |
| 2 | #include "scrambles.h" | ||
| 3 | 2 | ||
| 4 | #define SOL_BUFFER_LEN 100000 | 3 | #define SOL_BUFFER_LEN 100000 |
| 5 | 4 | ||
| @@ -50,36 +49,15 @@ void run(void) { | |||
| 50 | for (i = 0; s[i].scramble[0]; i++) { | 49 | for (i = 0; s[i].scramble[0]; i++) { |
| 51 | printf("\n%d. %s\n", i, s[i].scramble); | 50 | printf("\n%d. %s\n", i, s[i].scramble); |
| 52 | 51 | ||
| 53 | /* Single solution */ | ||
| 54 | if (nissy_applymoves(NISSY_SOLVED_CUBE, s[i].scramble, cube) | ||
| 55 | == -1) { | ||
| 56 | printf("Invalid scramble\n"); | ||
| 57 | continue; | ||
| 58 | } | ||
| 59 | n = nissy_solve(cube, solver, NISSY_NISSFLAG_NORMAL, | ||
| 60 | 0, 20, 1, -1, 0, size, buf, SOL_BUFFER_LEN, sol, stats, | ||
| 61 | NULL, NULL); | ||
| 62 | if (n == 0) { | ||
| 63 | printf("Error: no solution\n"); | ||
| 64 | return; | ||
| 65 | } | ||
| 66 | if (check_one(sol, s[i].solutions)) { | ||
| 67 | printf("Single solution is correct\n"); | ||
| 68 | } else { | ||
| 69 | printf("Error!\n"); | ||
| 70 | printf("Found solution(s):\n%s", sol); | ||
| 71 | printf("Valid solution(s):\n%s", s[i].solutions); | ||
| 72 | return; | ||
| 73 | } | ||
| 74 | |||
| 75 | /* Multiple solutions */ | 52 | /* Multiple solutions */ |
| 76 | if (nissy_applymoves(NISSY_SOLVED_CUBE, s[i].scramble, cube) | 53 | if (nissy_applymoves(NISSY_SOLVED_CUBE, s[i].scramble, cube) |
| 77 | == -1) { | 54 | == -1) { |
| 78 | printf("Invalid scramble\n"); | 55 | printf("Invalid scramble\n"); |
| 79 | continue; | 56 | continue; |
| 80 | } | 57 | } |
| 81 | n = nissy_solve(cube, solver, NISSY_NISSFLAG_NORMAL, | 58 | n = nissy_solve(cube, solver, |
| 82 | 0, 20, 100, 0, 0, size, buf, SOL_BUFFER_LEN, sol, stats, | 59 | NISSFLAG, MINMOVES, MAXMOVES, MAXSOLUTIONS, OPTIMAL, |
| 60 | 0, size, buf, SOL_BUFFER_LEN, sol, stats, | ||
| 83 | NULL, NULL); | 61 | NULL, NULL); |
| 84 | if (check_all(sol, s[i].solutions)) { | 62 | if (check_all(sol, s[i].solutions)) { |
| 85 | printf("All solutions are correct\n"); | 63 | printf("All solutions are correct\n"); |
diff --git a/utils/solvetest_gen.sh b/utils/solvetest_gen.sh new file mode 100755 index 0000000..c782ed8 --- /dev/null +++ b/utils/solvetest_gen.sh | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | |||
| 3 | args="$@" | ||
| 4 | |||
| 5 | getsolutions() { | ||
| 6 | nissy solve -p $args "$1" | | ||
| 7 | while read -r solution; do | ||
| 8 | printf '\t\t"%s\\n"\n' "$solution" | ||
| 9 | done | ||
| 10 | } | ||
| 11 | |||
| 12 | printf "struct {\n\tchar *scramble;\n\tchar *solutions;\n} s[] = {\n" | ||
| 13 | |||
| 14 | i=0 | ||
| 15 | while read -r scramble; do | ||
| 16 | solutions="$(getsolutions "$scramble")" | ||
| 17 | printf '[%s] = {\n\t.scramble = "%s",\n' "$i" "$scramble" | ||
| 18 | printf '\t.solutions =\n%s\n' "$solutions" | ||
| 19 | printf '},\n' | ||
| 20 | i=$((i+1)) | ||
| 21 | done | ||
| 22 | |||
| 23 | printf "};\n" | ||
