nissy-core

The "engine" of nissy, including the H48 optimal solver.
git clone https://git.tronto.net/nissy-core
Download | Log | Files | Refs | README | LICENSE

solvers.md (5400B)


      1 # Solvers
      2 
      3 This document contains a list cube solvers supported by this library.
      4 Some solvers require the cube to be in a certain state before they can
      5 be used - see below for details.
      6 
      7 ## The H48 optimal solver
      8 
      9 An HTM-optimal solver using fully-symmetric pruning tables. For details
     10 about how this solver works, see [h48.md](./h48.md). For benchmarks see
     11 [benchmarks/benchmarks.md](../benchmarks/benchmarks.md).
     12 
     13 * Name: of the form `h8hXk2` for `X` from 0 to 11, or `h48h0k4`. The name
     14   `optimal` is an alias for `h48h7k2`.
     15 * Requisites: none.
     16 * Moveset: HTM (all 18 basic moves).
     17 * Data size: 59MB for `h48h0k4`, from 115MB to 59GB for `h48hXk2`
     18   (roughly 59MB + 2<sup>X</sup>*56MB).
     19 
     20 ## Coordinate solvers
     21 
     22 Various solvers to solve different substeps, commonly used for Fewest
     23 Moves solving.
     24 
     25 The names start either with `coord_` or with `mcoord_`, and the last two
     26 letters denote a transformation to adjust the starting orientation. For
     27 example, `coord_EO_UR` solves the edge orientation on the RL axis.
     28 
     29 For simplicity and for compatibility with nissy-classic, some aliases
     30 are provided.
     31 
     32 ### Edge orientation
     33 
     34 Solve the edge orientation on the FB axis. NISS can be used.
     35 
     36 * Name: `coord_EO_xx`, where `xx` denotes the rotation.
     37   Provided aliases are:
     38   * `eofb` for `coord_EO_UF` (EO on FB)
     39   * `eorl` for `coord_EO_UR` (EO on RL)
     40   * `eoud` for `coord_EO_FD` (EO on UD)
     41 * Requisites: none.
     42 * Moveset: HTM (all 18 basic moves). The ending quarter turns are
     43   always clockwise.
     44 * Data size: 1.5KB.
     45 
     46 ### Domino reduction
     47 
     48 Solve the domino reduction on the UD axis. NISS can be used.
     49 
     50 * Name: `coord_DR_xx`, where `xx` denotes the rotation.
     51   Provided aliases are:
     52   * `drud` for `coord_DR_UF` (DR on UD)
     53   * `drrl` for `coord_DR_RF` (DR on RL)
     54   * `drfb` for `coord_DR_FD` (DR on FB)
     55 * Requisites: none.
     56 * Moveset: HTM (all 18 basic moves). The ending quarter turns are
     57   always clockwise.
     58 * Data size: 72MB.
     59 
     60 ### Domino reduction from edge orientation
     61 
     62 Solve the domino reduction on UD from edge orientation on FB.
     63 NISS can be used.
     64 
     65 * Name: `coord_DREO_xx`, where `xx` denotes the rotation.
     66   Provided aliases are:
     67   * `drud-eofb` for `coord_DREO_UF` (DR on UD from EO on FB)
     68   * `drrl-eofb` for `coord_DREO_RF` (DR on RL from EO on FB)
     69   * `drud-eorl` for `coord_DREO_UR` (DR on UD from EO on RL)
     70   * `drfb-eorl` for `coord_DREO_RU` (DR on FB from EO on RL)
     71   * `drrl-eoud` for `coord_DREO_FR` (DR on RL from EO on UD)
     72   * `drfb-eoud` for `coord_DREO_FD` (DR on FB from EO on UD)
     73 * Requisites: edge orientation must be solved on FB.
     74 * Moveset: {U, U', U2, D, D', D2, R2, L2, F2, B2}.
     75   The ending quarter turns are always clockwise.
     76 * Data size: 91KB.
     77 
     78 ### HTR from domino reduction
     79 
     80 Solve the half turn reduction from domino reduction on UD.
     81 NISS can be used.
     82 
     83 * Name: `coord_HTR_xx`, where `xx` denotes the rotation.
     84   Provided aliases are:
     85   * `htr-drud` for `coord_DR_UF` (HTR from DR on UD)
     86   * `htr-drrl` for `coord_DR_LF` (HTR from DR on RL)
     87   * `htr-drfb` for `coord_DR_BU` (HTR from DR on FB)
     88 * Requisites: domino reduction is solved on UD.
     89 * Moveset: {U, U', U2, D, R2, L2, F2, B2}. The ending quarter turns are
     90   always clockwise. Moreover, solutions are filtered so that at most
     91   one D move is used, and it will always appear before any U or U' move.
     92   Solutions with consecutive U / U2 / U' / D moves are also filtered out.
     93   This solver will produce therefore fewer solutions than nissy-classic.
     94 * Data size: 265KB.
     95 
     96 ### Leave slice from domino reduction
     97 
     98 Solve all but the E-layer from domino reduction on UD.
     99 The E-layer centers may not be solved. NISS will not be used.
    100 
    101 * Name: `coord_DRSLICE_xx`, where `xx` denotes the rotation.
    102   Provided aliases are:
    103   * `drudslice` for `coord_DRSLICE_UF` (Leave slice from DR on UD)
    104   * `drrlslice` for `coord_DRSLICE_LF` (Leave slice from DR on RL)
    105   * `drfbslice` for `coord_DRSLICE_BU` (Leave slice from DR on FB)
    106 * Requisites: domino reduction is solved on UD.
    107 * Moveset: {U, U', U2, R2, L2, F2, B2}.
    108 * Data size: 54MB.
    109 
    110 ### Solve all from domino reduction
    111 
    112 Solve the whole cube from domino reduction on UD.
    113 NISS will not be used.
    114 
    115 * Name: `coord_DRFIN_xx`, where `xx` denotes the rotation.
    116   Provided aliases are:
    117   * `drudfin` for `coord_DRSLICE_UF` (Solve from DR on UD)
    118   * `drrlfin` for `coord_DRSLICE_LF` (Solve from DR on RL)
    119   * `drfbfin` for `coord_DRSLICE_BU` (Solve from DR on FB)
    120 * Requisites: domino reduction is solved on UD.
    121 * Moveset: {U, U', U2, D, D', D2, R2, L2, F2, B2}.
    122 * Data size: 54MB.
    123 
    124 ### Undocumented coordinate solvers
    125 
    126 There are some coordinate solvers that have not been listed above. These
    127 are generally not very useful on their own, but instead they are combined
    128 to produce some of the more complex coordinate solvers above.
    129 
    130 These solvers include:
    131 
    132 * `coord_CPEPE_xx`: solve the permutation of the corners and of the E-layer
    133   edges. Requires DR to be solved on UD.
    134 * `coord_DRFINNOE_xx`: like the "leave slice" solver, but the U and D
    135   layers are going to be adjusted so that centers are solved. We chose
    136   to use `coord_DRSLICE_xx` as described above as it may produce shorter
    137   solutions, and it is easier to filter out duplicates (solutions that
    138   differ only by how they affect the E-layer).
    139 
    140 ## Planned future solvers
    141 
    142 The following solvers are planned to be introduced in the future:
    143 
    144 * Finish from HTR
    145 * JZP / Axial reduction, from EO or direct
    146 * Finish / leave double slice from JZP