diff options
Diffstat (limited to '')
| -rw-r--r-- | src/cube_transform_with_switch.h | 6 | ||||
| -rw-r--r-- | src/solve_h48.h | 27 | ||||
| -rw-r--r-- | tools/gendata_h48/gendata_h48.c | 2 |
3 files changed, 10 insertions, 25 deletions
diff --git a/src/cube_transform_with_switch.h b/src/cube_transform_with_switch.h index 18c1c8c..d3a108c 100644 --- a/src/cube_transform_with_switch.h +++ b/src/cube_transform_with_switch.h | |||
| @@ -22,7 +22,7 @@ transform_edges(cube_t c, uint8_t t) | |||
| 22 | { | 22 | { |
| 23 | switch (t) { | 23 | switch (t) { |
| 24 | case _trans_UFr: | 24 | case _trans_UFr: |
| 25 | return _trans_edges_rotation(UFr, c); | 25 | return c; |
| 26 | case _trans_ULr: | 26 | case _trans_ULr: |
| 27 | return _trans_edges_rotation(ULr, c); | 27 | return _trans_edges_rotation(ULr, c); |
| 28 | case _trans_UBr: | 28 | case _trans_UBr: |
| @@ -128,7 +128,7 @@ transform_corners(cube_t c, uint8_t t) | |||
| 128 | { | 128 | { |
| 129 | switch (t) { | 129 | switch (t) { |
| 130 | case _trans_UFr: | 130 | case _trans_UFr: |
| 131 | return _trans_corners_rotation(UFr, c); | 131 | return c; |
| 132 | case _trans_ULr: | 132 | case _trans_ULr: |
| 133 | return _trans_corners_rotation(ULr, c); | 133 | return _trans_corners_rotation(ULr, c); |
| 134 | case _trans_UBr: | 134 | case _trans_UBr: |
| @@ -234,7 +234,7 @@ transform(cube_t c, uint8_t t) | |||
| 234 | { | 234 | { |
| 235 | switch (t) { | 235 | switch (t) { |
| 236 | case _trans_UFr: | 236 | case _trans_UFr: |
| 237 | return _trans_rotation(UFr, c); | 237 | return c; |
| 238 | case _trans_ULr: | 238 | case _trans_ULr: |
| 239 | return _trans_rotation(ULr, c); | 239 | return _trans_rotation(ULr, c); |
| 240 | case _trans_UBr: | 240 | case _trans_UBr: |
diff --git a/src/solve_h48.h b/src/solve_h48.h index ad865a7..1701268 100644 --- a/src/solve_h48.h +++ b/src/solve_h48.h | |||
| @@ -35,13 +35,14 @@ _t by _ttrep). | |||
| 35 | #define _foreach_h48sim(_cube, _cocsepdata, _selfsim, _h, _action) \ | 35 | #define _foreach_h48sim(_cube, _cocsepdata, _selfsim, _h, _action) \ |
| 36 | int64_t _cocsep = coord_cocsep(_cube); \ | 36 | int64_t _cocsep = coord_cocsep(_cube); \ |
| 37 | uint8_t _ttrep = TTREP(_cocsepdata[_cocsep]); \ | 37 | uint8_t _ttrep = TTREP(_cocsepdata[_cocsep]); \ |
| 38 | uint8_t _inverse_ttrep = inverse_trans(_ttrep); \ | ||
| 38 | int64_t _coclass = COCLASS(_cocsepdata[_cocsep]); \ | 39 | int64_t _coclass = COCLASS(_cocsepdata[_cocsep]); \ |
| 39 | cube_t _rep = transform(_cube, _ttrep); \ | 40 | cube_t _rep = transform(_cube, _ttrep); \ |
| 40 | uint64_t _sim = _selfsim[_coclass]; \ | 41 | uint64_t _sim = _selfsim[_coclass]; \ |
| 41 | for (uint8_t _t = 0; _t < 48 && _sim; _t++, _sim >>= 1) { \ | 42 | for (uint8_t _t = 0; _t < 48 && _sim; _t++, _sim >>= 1) { \ |
| 42 | if (!(_sim & 1)) continue; \ | 43 | if (!(_sim & 1)) continue; \ |
| 43 | _cube = transform(_rep, _t); \ | 44 | _cube = transform(_rep, _t); \ |
| 44 | _cube = transform(_cube, inverse_trans(_ttrep)); \ | 45 | _cube = transform(_cube, _inverse_ttrep); \ |
| 45 | _action \ | 46 | _action \ |
| 46 | } | 47 | } |
| 47 | 48 | ||
| @@ -512,7 +513,9 @@ gendata_h48h0k4_return_size: | |||
| 512 | _static int64_t | 513 | _static int64_t |
| 513 | gendata_h48h0k4_bfs(bfsarg_esep_t *arg) | 514 | gendata_h48h0k4_bfs(bfsarg_esep_t *arg) |
| 514 | { | 515 | { |
| 515 | if (2 * arg->done < (int64_t)ESEP_MAX(0)) | 516 | const uint8_t breakpoint = 10; /* Hand-picked optimal */ |
| 517 | |||
| 518 | if (arg->depth < breakpoint) | ||
| 516 | return gendata_h48h0k4_bfs_fromdone(arg); | 519 | return gendata_h48h0k4_bfs_fromdone(arg); |
| 517 | else | 520 | else |
| 518 | return gendata_h48h0k4_bfs_fromnew(arg); | 521 | return gendata_h48h0k4_bfs_fromnew(arg); |
| @@ -567,31 +570,13 @@ gendata_h48h0k4_bfs_fromnew(bfsarg_esep_t *arg) | |||
| 567 | x = get_esep_pval(arg->buf32, j); | 570 | x = get_esep_pval(arg->buf32, j); |
| 568 | if (x >= arg->depth) | 571 | if (x >= arg->depth) |
| 569 | continue; | 572 | continue; |
| 570 | #if 0 | ||
| 571 | cube_t transd; | ||
| 572 | int64_t t, cocsep_coord, sim; | ||
| 573 | |||
| 574 | set_esep_pval(arg->buf32, i, arg->depth); | ||
| 575 | cc++; | ||
| 576 | cocsep_coord = i / H48_ESIZE(0); | ||
| 577 | sim = arg->selfsim[cocsep_coord] >> 1; | ||
| 578 | for (t = 1; t < 48 && sim; t++) { | ||
| 579 | transd = transform(cube, t); | ||
| 580 | j = coord_h48(transd, arg->cocsepdata, 0); | ||
| 581 | x = get_esep_pval(arg->buf32, j); | ||
| 582 | set_esep_pval(arg->buf32, j, arg->depth); | ||
| 583 | cc += x == 0xF; | ||
| 584 | } | ||
| 585 | #else | ||
| 586 | _foreach_h48sim(cube, arg->cocsepdata, arg->selfsim, 0, | 573 | _foreach_h48sim(cube, arg->cocsepdata, arg->selfsim, 0, |
| 587 | j = coord_h48(cube, arg->cocsepdata, 0); | 574 | j = coord_h48(cube, arg->cocsepdata, 0); |
| 588 | x = get_esep_pval(arg->buf32, j); | 575 | x = get_esep_pval(arg->buf32, j); |
| 589 | set_esep_pval(arg->buf32, j, arg->depth); | 576 | set_esep_pval(arg->buf32, j, arg->depth); |
| 590 | cc += x == 0xF; | 577 | cc += x == 0xF; |
| 591 | ) | 578 | ) |
| 592 | #endif | 579 | break; /* Enough to find one, skip the rest */ |
| 593 | |||
| 594 | break; | ||
| 595 | } | 580 | } |
| 596 | } | 581 | } |
| 597 | 582 | ||
diff --git a/tools/gendata_h48/gendata_h48.c b/tools/gendata_h48/gendata_h48.c index c8a6d12..3f314aa 100644 --- a/tools/gendata_h48/gendata_h48.c +++ b/tools/gendata_h48/gendata_h48.c | |||
| @@ -23,7 +23,7 @@ void run(void) { | |||
| 23 | } else { | 23 | } else { |
| 24 | printf("Succesfully generated %" PRId64 " bytes. Table:\n", s); | 24 | printf("Succesfully generated %" PRId64 " bytes. Table:\n", s); |
| 25 | h48info = (uint32_t *)buf + (ETABLESIZE(HVALUE) + COCSEPSIZE) / 4; | 25 | h48info = (uint32_t *)buf + (ETABLESIZE(HVALUE) + COCSEPSIZE) / 4; |
| 26 | for (i = 0; i < MAXDEPTH+1; i++) | 26 | for (i = 0; i < MAXDEPTH+1 && h48info[i+1]; i++) |
| 27 | printf("%d:\t%" PRIu32 "\n", i, h48info[i+1]); | 27 | printf("%d:\t%" PRIu32 "\n", i, h48info[i+1]); |
| 28 | } | 28 | } |
| 29 | } | 29 | } |
