1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# TODO list
This is a list of things that I would like to add or change at some point.
It's more of a personal reminder than anything else.
## Commands
### Commands that are available in nissy 1.0, but not in this version (yet):
* drcorners (solve corners after dr)
* search and improve non-optimal subsequences
* unniss (rewrite A (B) -> B' A)
* scramble [dr, corners only, edges only, htr, ...]
* save and edit algs as "variables"
* invert an alg
### More steps for `solve`
* "slow" optimal solver, using drud table but all the tricks
of khuge (+ trick to avoid 180° moves when one of the inverse
probes returns exactly the target value)
* QTM optimal solving
* Block-building steps (cross, roux blocks, ...)
* Other common steps (LSE, ...)
### Improvements to currently implemented commands
* solve should re-orient first if needed and not just give up if centers are off
* solve should try up to a small bound without loading the large pruning table
* drfin for HTR scrambles should try all 3 axis and pick the best solutions;
in general every step that automatically detects orientation should do this
### New features
* cleanup: translate an alg to the standard HTM moveset + reorient at the end
* batch mode: read list of commands from stdin or a file and exec them
one after the other non-interactively
* configurability: add an `alias` command, run config file at startup
## Distribution
* make env.c compatible with Windows (and check that it works with
BSD/MacOS)
* default to current directory for tables; this will work on any OS, up to
using the correct #ifdef guards to avoid checking for posix directories
in non-posix systems
* better man page
* find a better way to distribute the large tables, especially khuge
(or just generate them quickly, see below)
* webapp (cgi)
## Technical stuff
## Performance (optimal solver)
* Khuge optimal solver: change direction of search when doing so leads to
less branching (like nxopt). Need to add some info to EstimateData or to
DfsData (like last moves on inverse/other scramble) and to change some of
the logic of niss (allow for switching multiple times).
* Light optimal solver: use drud table instead of khuge, with tricks as above
and one more trick: if the last move is 180° avoid computing inverse cube
and just use previous values for all 3 axes.
## Coordinates, symmetries, pruning tables
* use multiple threads to search for solutions in parallel
* Faster pruning table generation: keep track of which positions are "nasty"
(i.e. self-symmetric with respect to the base symmetry coordinate but not
self-symmetric overall) by adding a function to struct coord and some datafield
to struct symdata.
* Faster pruning table generation: multithreading (divide table into large
sections and use one mutex for each section to avoid too much locking)
* Cleanup symcoord.c: some coordinates and symdata are never actually used;
remove also sd_eofbepos and just use sd_coud for khuge (this changes the
coordinate so the whole table must be generated again!)
* Use pruning values mod 4 instead of mod 16 (or maybe not, I like the
current system)
### Memory management
* fail gracefully when there is not enough memory to load a large table
* free tables from memory when not used
* optionally run in low-memory friendly version (no tables above a few Mb);
this can be useful e.g. for embedded devices
### Structural changes
* client/server architecture: run a server process in the background so that
multiple client processess can send it queries and get results; this would
open up the door for a web-based version or graphical clients
|