diff options
| author | Sebastiano Tronto <sebastiano.tronto@gmail.com> | 2021-12-03 12:22:01 +0100 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano.tronto@gmail.com> | 2021-12-03 12:22:01 +0100 |
| commit | d2e83077e9bbfcb7f8b4f9506d81cc98397f2e0a (patch) | |
| tree | 636afd425a5882773a056bc9fdc2888fabd2671c | |
| parent | a39efe5206ba5d4fd2d21694835dd26d949caadb (diff) | |
| download | nissy-d2e83077e9bbfcb7f8b4f9506d81cc98397f2e0a.tar.gz nissy-d2e83077e9bbfcb7f8b4f9506d81cc98397f2e0a.zip | |
Moved a bunch of commented code to the bottom of the file. I still don't want to throw it away and it makes sense to keep it in this file for quick lookup.
Diffstat (limited to '')
| -rw-r--r-- | src/pruning.c | 237 |
1 files changed, 116 insertions, 121 deletions
diff --git a/src/pruning.c b/src/pruning.c index 2c6f348..40f273d 100644 --- a/src/pruning.c +++ b/src/pruning.c | |||
| @@ -91,59 +91,6 @@ pd_khuge_HTM = { | |||
| 91 | .moveset = moveset_HTM, | 91 | .moveset = moveset_HTM, |
| 92 | }; | 92 | }; |
| 93 | 93 | ||
| 94 | /* | ||
| 95 | void | ||
| 96 | genptable(PruneData *pd) | ||
| 97 | { | ||
| 98 | Move *ms; | ||
| 99 | uint64_t j, oldn; | ||
| 100 | DfsData dd; | ||
| 101 | |||
| 102 | if (pd->generated) | ||
| 103 | return; | ||
| 104 | |||
| 105 | pd->ptable = malloc(ptablesize(pd) * sizeof(uint8_t)); | ||
| 106 | |||
| 107 | if (read_ptable_file(pd)) { | ||
| 108 | pd->generated = true; | ||
| 109 | return; | ||
| 110 | } | ||
| 111 | pd->generated = true; | ||
| 112 | |||
| 113 | fprintf(stderr, "Cannot load %s, generating it\n", pd->filename); | ||
| 114 | |||
| 115 | ms = malloc(NMOVES * sizeof(Move)); | ||
| 116 | moveset_to_list(pd->moveset, ms); | ||
| 117 | |||
| 118 | for (j = 0; j < pd->coord->max; j++) | ||
| 119 | ptable_update_index(pd, j, 15); | ||
| 120 | |||
| 121 | dd = (DfsData) { .m = 0 }; | ||
| 122 | dd.visited = malloc((ptablesize(pd)/4 + 1) * sizeof(uint8_t)); | ||
| 123 | dd.sorted_moves = malloc(NMOVES * sizeof(Move)); | ||
| 124 | moveset_to_list(pd->moveset, dd.sorted_moves); | ||
| 125 | oldn = 0; | ||
| 126 | pd->n = 0; | ||
| 127 | |||
| 128 | for (dd.d = 0; dd.d < 15 && pd->n < pd->coord->max; dd.d++) { | ||
| 129 | for (j = 0; j < pd->coord->max; j++) | ||
| 130 | dfs_set_visited_index(&dd, j, false); | ||
| 131 | genptable_dfs((Cube){0}, pd, &dd); | ||
| 132 | fprintf(stderr, "Depth %d done, generated %" | ||
| 133 | PRIu64 "\t(%" PRIu64 "/%" PRIu64 ")\n", | ||
| 134 | dd.d+1, pd->n - oldn, pd->n, pd->coord->max); | ||
| 135 | oldn = pd->n; | ||
| 136 | } | ||
| 137 | |||
| 138 | if (!write_ptable_file(pd)) | ||
| 139 | fprintf(stderr, "Error writing ptable file\n"); | ||
| 140 | |||
| 141 | free(ms); | ||
| 142 | free(dd.visited); | ||
| 143 | free(dd.sorted_moves); | ||
| 144 | } | ||
| 145 | */ | ||
| 146 | |||
| 147 | void | 94 | void |
| 148 | genptable(PruneData *pd) | 95 | genptable(PruneData *pd) |
| 149 | { | 96 | { |
| @@ -194,74 +141,6 @@ genptable(PruneData *pd) | |||
| 194 | free(ms); | 141 | free(ms); |
| 195 | } | 142 | } |
| 196 | 143 | ||
| 197 | /* | ||
| 198 | static void | ||
| 199 | genptable_dfs(Cube c, PruneData *pd, DfsData *dd) | ||
| 200 | { | ||
| 201 | int i, j, pv; | ||
| 202 | Move mm; | ||
| 203 | Cube cc; | ||
| 204 | |||
| 205 | pv = ptableval(pd, c); | ||
| 206 | |||
| 207 | if (pv < dd->m || dd->m > dd->d) | ||
| 208 | return; | ||
| 209 | |||
| 210 | if (dfs_get_visited(pd, dd, c)) | ||
| 211 | return; | ||
| 212 | dfs_set_visited(pd, dd, c, true); | ||
| 213 | |||
| 214 | if (pv != dd->m) | ||
| 215 | ptable_update(pd, c, dd->m); | ||
| 216 | |||
| 217 | for (i = 0; i < pd->coord->ntrans; i++) { | ||
| 218 | cc = i == 0 ? c : | ||
| 219 | apply_trans(pd->coord->trans[i], c); | ||
| 220 | for (j = 0; dd->sorted_moves[j] != NULLMOVE; j++) { | ||
| 221 | mm = dd->sorted_moves[j]; | ||
| 222 | dd->m++; | ||
| 223 | genptable_dfs(apply_move(mm, cc), pd, dd); | ||
| 224 | dd->m--; | ||
| 225 | } | ||
| 226 | } | ||
| 227 | } | ||
| 228 | */ | ||
| 229 | |||
| 230 | /* | ||
| 231 | static bool | ||
| 232 | dfs_get_visited(PruneData *pd, DfsData *dd, Cube c) | ||
| 233 | { | ||
| 234 | return dfs_get_visited_index(dd, pd->coord->index(c)); | ||
| 235 | } | ||
| 236 | */ | ||
| 237 | |||
| 238 | /* | ||
| 239 | static bool | ||
| 240 | dfs_get_visited_index(DfsData *dd, uint64_t ind) | ||
| 241 | { | ||
| 242 | return dd->visited[ind/8] & ((uint8_t)1 << (ind % 8)); | ||
| 243 | } | ||
| 244 | */ | ||
| 245 | |||
| 246 | /* | ||
| 247 | static void | ||
| 248 | dfs_set_visited(PruneData *pd, DfsData *dd, Cube c, bool b) | ||
| 249 | { | ||
| 250 | dfs_set_visited_index(dd, pd->coord->index(c), b); | ||
| 251 | } | ||
| 252 | */ | ||
| 253 | |||
| 254 | /* | ||
| 255 | static void | ||
| 256 | dfs_set_visited_index(DfsData *dd, uint64_t ind, bool b) | ||
| 257 | { | ||
| 258 | if (b) | ||
| 259 | dd->visited[ind/8] |= ((uint8_t)1 << (ind % 8)); | ||
| 260 | else | ||
| 261 | dd->visited[ind/8] &= ~((uint8_t)1 << (ind % 8)); | ||
| 262 | } | ||
| 263 | */ | ||
| 264 | |||
| 265 | static void | 144 | static void |
| 266 | genptable_bfs(PruneData *pd, int d, Move *ms) | 145 | genptable_bfs(PruneData *pd, int d, Move *ms) |
| 267 | { | 146 | { |
| @@ -397,3 +276,119 @@ write_ptable_file(PruneData *pd) | |||
| 397 | return written == ptablesize(pd); | 276 | return written == ptablesize(pd); |
| 398 | } | 277 | } |
| 399 | 278 | ||
| 279 | /* | ||
| 280 | I'll put here all the leftover code from the genptable-dfs attempt. | ||
| 281 | Might be useful in the future. | ||
| 282 | */ | ||
| 283 | |||
| 284 | /* | ||
| 285 | void | ||
| 286 | genptable(PruneData *pd) | ||
| 287 | { | ||
| 288 | Move *ms; | ||
| 289 | uint64_t j, oldn; | ||
| 290 | DfsData dd; | ||
| 291 | |||
| 292 | if (pd->generated) | ||
| 293 | return; | ||
| 294 | |||
| 295 | pd->ptable = malloc(ptablesize(pd) * sizeof(uint8_t)); | ||
| 296 | |||
| 297 | if (read_ptable_file(pd)) { | ||
| 298 | pd->generated = true; | ||
| 299 | return; | ||
| 300 | } | ||
| 301 | pd->generated = true; | ||
| 302 | |||
| 303 | fprintf(stderr, "Cannot load %s, generating it\n", pd->filename); | ||
| 304 | |||
| 305 | ms = malloc(NMOVES * sizeof(Move)); | ||
| 306 | moveset_to_list(pd->moveset, ms); | ||
| 307 | |||
| 308 | for (j = 0; j < pd->coord->max; j++) | ||
| 309 | ptable_update_index(pd, j, 15); | ||
| 310 | |||
| 311 | dd = (DfsData) { .m = 0 }; | ||
| 312 | dd.visited = malloc((ptablesize(pd)/4 + 1) * sizeof(uint8_t)); | ||
| 313 | dd.sorted_moves = malloc(NMOVES * sizeof(Move)); | ||
| 314 | moveset_to_list(pd->moveset, dd.sorted_moves); | ||
| 315 | oldn = 0; | ||
| 316 | pd->n = 0; | ||
| 317 | |||
| 318 | for (dd.d = 0; dd.d < 15 && pd->n < pd->coord->max; dd.d++) { | ||
| 319 | for (j = 0; j < pd->coord->max; j++) | ||
| 320 | dfs_set_visited_index(&dd, j, false); | ||
| 321 | genptable_dfs((Cube){0}, pd, &dd); | ||
| 322 | fprintf(stderr, "Depth %d done, generated %" | ||
| 323 | PRIu64 "\t(%" PRIu64 "/%" PRIu64 ")\n", | ||
| 324 | dd.d+1, pd->n - oldn, pd->n, pd->coord->max); | ||
| 325 | oldn = pd->n; | ||
| 326 | } | ||
| 327 | |||
| 328 | if (!write_ptable_file(pd)) | ||
| 329 | fprintf(stderr, "Error writing ptable file\n"); | ||
| 330 | |||
| 331 | free(ms); | ||
| 332 | free(dd.visited); | ||
| 333 | free(dd.sorted_moves); | ||
| 334 | } | ||
| 335 | |||
| 336 | static void | ||
| 337 | genptable_dfs(Cube c, PruneData *pd, DfsData *dd) | ||
| 338 | { | ||
| 339 | int i, j, pv; | ||
| 340 | Move mm; | ||
| 341 | Cube cc; | ||
| 342 | |||
| 343 | pv = ptableval(pd, c); | ||
| 344 | |||
| 345 | if (pv < dd->m || dd->m > dd->d) | ||
| 346 | return; | ||
| 347 | |||
| 348 | if (dfs_get_visited(pd, dd, c)) | ||
| 349 | return; | ||
| 350 | dfs_set_visited(pd, dd, c, true); | ||
| 351 | |||
| 352 | if (pv != dd->m) | ||
| 353 | ptable_update(pd, c, dd->m); | ||
| 354 | |||
| 355 | for (i = 0; i < pd->coord->ntrans; i++) { | ||
| 356 | cc = i == 0 ? c : | ||
| 357 | apply_trans(pd->coord->trans[i], c); | ||
| 358 | for (j = 0; dd->sorted_moves[j] != NULLMOVE; j++) { | ||
| 359 | mm = dd->sorted_moves[j]; | ||
| 360 | dd->m++; | ||
| 361 | genptable_dfs(apply_move(mm, cc), pd, dd); | ||
| 362 | dd->m--; | ||
| 363 | } | ||
| 364 | } | ||
| 365 | } | ||
| 366 | |||
| 367 | static bool | ||
| 368 | dfs_get_visited(PruneData *pd, DfsData *dd, Cube c) | ||
| 369 | { | ||
| 370 | return dfs_get_visited_index(dd, pd->coord->index(c)); | ||
| 371 | } | ||
| 372 | |||
| 373 | static bool | ||
| 374 | dfs_get_visited_index(DfsData *dd, uint64_t ind) | ||
| 375 | { | ||
| 376 | return dd->visited[ind/8] & ((uint8_t)1 << (ind % 8)); | ||
| 377 | } | ||
| 378 | |||
| 379 | static void | ||
| 380 | dfs_set_visited(PruneData *pd, DfsData *dd, Cube c, bool b) | ||
| 381 | { | ||
| 382 | dfs_set_visited_index(dd, pd->coord->index(c), b); | ||
| 383 | } | ||
| 384 | |||
| 385 | static void | ||
| 386 | dfs_set_visited_index(DfsData *dd, uint64_t ind, bool b) | ||
| 387 | { | ||
| 388 | if (b) | ||
| 389 | dd->visited[ind/8] |= ((uint8_t)1 << (ind % 8)); | ||
| 390 | else | ||
| 391 | dd->visited[ind/8] &= ~((uint8_t)1 << (ind % 8)); | ||
| 392 | } | ||
| 393 | |||
| 394 | */ | ||
