diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2023-11-09 22:27:56 +0100 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2023-11-09 22:27:56 +0100 |
| commit | 04c3ee1f5acac47650be8d0ffbf90e238df0d12b (patch) | |
| tree | 0d66725ef3b7d29b612b4dfe7a92cb99b8ce1843 | |
| parent | 5bdf6e73179cf944ce82606545beb0b0d63a59a3 (diff) | |
| download | nissy-core-04c3ee1f5acac47650be8d0ffbf90e238df0d12b.tar.gz nissy-core-04c3ee1f5acac47650be8d0ffbf90e238df0d12b.zip | |
Added TODOs
Diffstat (limited to '')
| -rw-r--r-- | TODO.txt | 92 |
1 files changed, 78 insertions, 14 deletions
| @@ -1,3 +1,58 @@ | |||
| 1 | ## Big changes | ||
| 2 | |||
| 3 | ### cube type changess | ||
| 4 | |||
| 5 | * rename cube_t to cube_internal_t and cube_array_t to cube_t | ||
| 6 | * include only cube_t typedef in cube.h, remove ifdef from cube.h | ||
| 7 | * rework public functions: for many the simple implementation | ||
| 8 | in the first section of cube.c is fine, other should first | ||
| 9 | convert and then call the internal function | ||
| 10 | * for CO: move to bits 5 and 6, no need for padding bit | ||
| 11 | |||
| 12 | ### Remove stuff from API, use more strings | ||
| 13 | |||
| 14 | * Remove move_t and trans_t | ||
| 15 | * Remove all functions related to trans, not useful for users | ||
| 16 | (or maybe keep and let use transform? can see some use | ||
| 17 | for it, in strange cases) | ||
| 18 | * Removes functions that read or write moves | ||
| 19 | * All functions should take strings instead of moves | ||
| 20 | * Performance is worse, more stuff must be done internally, | ||
| 21 | expose only stuf that users are likely to use | ||
| 22 | * Benchmark: add some simple benchmarking functions to nissy.h, | ||
| 23 | bench.c becomes very short | ||
| 24 | |||
| 25 | ### More for moves | ||
| 26 | |||
| 27 | * keep move(cube_t, move), but prefer direct inline moves over it | ||
| 28 | * define macro to loop over moves e.g. #define FOREACHMOVE(action) | ||
| 29 | |||
| 30 | ### API goals: | ||
| 31 | |||
| 32 | * manipulate move sequences (invert, unniss, cleanup, mirror / transform...) | ||
| 33 | * solvers (optimal, generic, coordinates) | ||
| 34 | * print cube (in various formats) | ||
| 35 | * print ptables (or layout data in such a way that can be printed | ||
| 36 | easily, e.g. first bytes are null-terminated strig and can be | ||
| 37 | printed by user) | ||
| 38 | |||
| 39 | ### Solvers | ||
| 40 | |||
| 41 | * Actually do A*, no fixed depth | ||
| 42 | * Use threading (see below) | ||
| 43 | * Return strings, newline separated (see nissy_ffi) | ||
| 44 | * Instead of depth, I need the following parameters: | ||
| 45 | int minmoves | ||
| 46 | int maxmoves | ||
| 47 | a parameter for all solutions / nmax / optimal / -O n | ||
| 48 | * How to make the above nicer? can it be done with a minimal | ||
| 49 | amount of parameters (e.g. at most 2)? | ||
| 50 | |||
| 51 | ### Rename to libnissy | ||
| 52 | |||
| 53 | * prefix public functions with libnissy_ or something similar | ||
| 54 | * move() that takes a string (alg) as input | ||
| 55 | |||
| 1 | ## Solving | 56 | ## Solving |
| 2 | 57 | ||
| 3 | ### Generic solver | 58 | ### Generic solver |
| @@ -8,6 +63,8 @@ | |||
| 8 | 63 | ||
| 9 | ### Coordinates | 64 | ### Coordinates |
| 10 | 65 | ||
| 66 | TODO: specify in the comments that coordinates return 0 if solved | ||
| 67 | |||
| 11 | * [done] eo | 68 | * [done] eo |
| 12 | * co | 69 | * co |
| 13 | * ep | 70 | * ep |
| @@ -42,22 +99,17 @@ What about symcoord? | |||
| 42 | 99 | ||
| 43 | * Reconsider going corners-first, so there is no need to sumco() | 100 | * Reconsider going corners-first, so there is no need to sumco() |
| 44 | 101 | ||
| 45 | ## cube.h changes | 102 | ### Pruning tables |
| 46 | 103 | ||
| 47 | * better documentation: add parameter names, one-line comment | 104 | * ptable should contain some extra data at the beginning: |
| 48 | for each function | 105 | an integer (size) |
| 49 | * prefix public functions with libnissy_ or something similar | 106 | a checksum |
| 50 | * move() that takes a string (alg) as input | 107 | some summary info, maybe even in text form |
| 51 | * readtrans() should work like readmoves (read multiple, return n) | ||
| 52 | * Add single moves and transformations to the interface? (performance!) | ||
| 53 | * More I/O: | ||
| 54 | nissy | ||
| 55 | ascii art (color = 1 letter) | ||
| 56 | twizzle binary https://www.experiments.cubing.net/cubing.js/spec/binary/ | ||
| 57 | reid? | ||
| 58 | 108 | ||
| 59 | ## Optimizations | 109 | ## Optimizations |
| 60 | 110 | ||
| 111 | ### General things | ||
| 112 | |||
| 61 | * Trans: don't do full compose, for some trans composing perm is enough. | 113 | * Trans: don't do full compose, for some trans composing perm is enough. |
| 62 | Split out sumco() as a separate function and refactor, optimize. | 114 | Split out sumco() as a separate function and refactor, optimize. |
| 63 | * Use multi-move (up to 4/5 moves at once) | 115 | * Use multi-move (up to 4/5 moves at once) |
| @@ -68,13 +120,26 @@ What about symcoord? | |||
| 68 | * find a better way for computing the inverse? | 120 | * find a better way for computing the inverse? |
| 69 | * Improve avx2 instructions in general | 121 | * Improve avx2 instructions in general |
| 70 | 122 | ||
| 123 | ### Threading | ||
| 124 | |||
| 125 | * THREADS build time option for the number of threads. If set to one, | ||
| 126 | do not include any threading library or code. Try detecting at build | ||
| 127 | time, or set to a sane default (e.g. 8? 16?) for generic builds. | ||
| 128 | * pthread or threads.h? I am more familiar with pthread, but threads.h | ||
| 129 | is standard (from C11, so it requires switching to it from C99). | ||
| 130 | Does using threads.h help in any way (e.g. building on Windows)? | ||
| 131 | |||
| 71 | ## Improvements and other things | 132 | ## Improvements and other things |
| 72 | 133 | ||
| 73 | * NISS: Add mask to moves (e.g. U | NISS where NISS = 32 or something); | 134 | * NISS: Add mask to moves (e.g. U | NISS where NISS = 32 or something); |
| 74 | adapt readmoves and writemoves. | 135 | adapt readmoves and writemoves. |
| 75 | * Consider adding centers and other moves (for avx2: centers in the | 136 | * Consider adding centers and other moves (for avx2: centers in the |
| 76 | same lane as corners, numbered from 9 to 14) | 137 | same lane as corners, numbered from 9 to 14) |
| 77 | * rename to: libnissy? (also change all references to cube.c in doc) | 138 | * More I/O: |
| 139 | nissy | ||
| 140 | ascii art (color = 1 letter) | ||
| 141 | twizzle binary https://www.experiments.cubing.net/cubing.js/spec/binary/ | ||
| 142 | reid? | ||
| 78 | 143 | ||
| 79 | ## "Front-end" | 144 | ## "Front-end" |
| 80 | 145 | ||
| @@ -85,4 +150,3 @@ What about symcoord? | |||
| 85 | dart ffi, js | 150 | dart ffi, js |
| 86 | java | 151 | java |
| 87 | * add also example code (e.g. an optimal solver) in examples/ | 152 | * add also example code (e.g. an optimal solver) in examples/ |
| 88 | * solver in C: use pthread_cancel | ||
