nissy-fmc

A Rubik's cube FMC assistant
git clone https://git.tronto.net/nissy-fmc
Download | Log | Files | Refs | README | LICENSE

commit 2feaa43610b63c190762ad4b233ad648e30636d6
parent 2b1b1970f774aa451f4fae197c0b1177118f3570
Author: Sebastiano Tronto <sebastiano@tronto.net>
Date:   Wed,  1 Jun 2022 20:30:16 +0200

Version 2.0.2

Diffstat:
M.gitignore | 3+++
MINSTALL | 93++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------
MMakefile | 1+
MTODO.md | 3+++
Dadhoc/README | 3---
Dadhoc/compile.sh | 15---------------
Dadhoc/cornersdrhtr.c | 128-------------------------------------------------------------------------------
Dadhoc/run | 0
Ddoc/nissy.html | 314-------------------------------------------------------------------------------
Ddoc/nissy.pdf | 0
Dnissy | 0
Msrc/pruning.c | 4----
Mwww/download/index.html | 73+++++++++++++++++++++++++++++++------------------------------------------
13 files changed, 95 insertions(+), 542 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -1 +1,4 @@ nissy +nissy-* +doc/*.html +doc/*.pdf diff --git a/INSTALL b/INSTALL @@ -4,57 +4,78 @@ Nissy is available at https://nissy.tronto.net # Requirements -A full installation of nissy requires about 3Gb of space, -of which 2.3Gb are occupied by the huge pruning table for fast optimal solving, -and running it requires the same amount of RAM. -One can choose to never use this function and not to install the relative -pruning table. There is an alternative (slower) -optimal solving function that uses about 500Mb of RAM. +A full installation of nissy requires about 3Gb of space, of which +2.3Gb are occupied by the huge pruning table for fast optimal solving, +and running it requires the same amount of RAM. One can choose to never +use this function and not to install the relative pruning table. There +is an alternative (slower) optimal solving function that uses about +500Mb of RAM. When generating the pruning tables automatically (see +the section Tables below), at least 5.3Gb or RAM are required. # Installation ## On Windows Try downloading and executing in a terminal the file nissy.exe, then -follow the instructions in the Tables section below for -installing the pruning tables. -If nissy.exe does not work, you can try following the UNIX instructions -in WSL (Windows Subsystem for Linux) or in a similar environment. - -Sorry for the inconvenience, I don't have a Windows machine to test this on. +follow the instructions in the Tables section below for installing the +pruning tables. If nissy.exe does not work, you can try following the +UNIX instructions in WSL (Windows Subsystem for Linux) or in a similar +environment. ## On a UNIX system: -Edit the Makefile to match your local configuration (usually not necessary, but you -may want to change the PREFIX variable) and run make, followed by make install. -Follow the instructions below to install the pruning tables. +Download the source archive (.tar.gz). Extract it with your favorite +archive program, for example with + + tar -xvzf nissy-VERSION.tar.gz + +Open a terminal in the directory just extracted. If you wish, edit the +Makefile to match your local configuration (this is usually not necessary, +but you may want to change the PREFIX variable to change the installation +path) and run + + make + +followed by + + make install + +Then follow the instructions below to install the pruning tables. ## Tables -Nissy needs to generate certain large tables to work. These tables are by default -generated the first time they are needed (e.g the first time you ask to solve a -certain step) and then saved to a file. Whenever these tables are needed again, -nissy simply loads the corresponding file from the hard disk. -The very large table for optimal solving can take some time to generate -(about 1.5 hours on my fairly old but decent laptop, using 8 CPU threads). -In order to generate it you need at least 5Gb of RAM. -All other tables are much faster. +Once you have installed nissy, run -You can ask nissy to generate all the tables it will ever need with the gen -command. It is recommended to use more than one thread, if your CPU has them. -For example, you can run: + nissy gen -nissy gen -t 8 +to generate all the tables that Nissy will ever need. Running this +command requires around 5.3Gb of RAM, and it can take some time (about +40 minutes on my fairly old but decent laptop, with 8 CPU threads). -to generate all tables using 8 threads. +Some unnecessary technical detail: by default this command is going to +use at most 64 threads. If you want you can choose to use more threads +(if your CPU is very powerful) or fewer threads (if you for example +want to run this command in the background while you do other stuff) +with the -t option, for example nissy gen -t 1. -Alternatively, you can simply download all the tables and copy them into the -correct folder (see manual page, ENVIRONMENT section). On UNIX operating -systems this folder is either .nissy/tables in the user's home directory or -$XDG_DATA_HOME/nissy/tables if the XDG variable is configured. On Windows -it is the same directory as the nissy.exe executable file. +Alternatively, you can download all the tables (1.7Gb) and copy them +into the correct folder (see manual page, ENVIRONMENT section). On UNIX +operating systems this folder is either .nissy/tables in the user's +home directory or $XDG_DATA_HOME/nissy/tables if the XDG variable +is configured. On Windows it is the same directory as the nissy.exe +executable file. You can downloads all the tables from the following link: - https://nissy.tronto.net/nissy-tables-2.0.zip -The version 2.0 at the end of the file name is only indicative. -Later versions will use the same tables, unless otherwise specified. + + https://nissy.tronto.net/nissy-tables-2.0.2.zip + +# Upgrading + +If you already have nissy installed and you want to upgrade to a more +recent version, you can simply repeat the installation process: +* On Windows: simply replace nissy.exe with the new file with the same name. +* On UNIX systems: download the new version of the source code, extract it + in a new folder and run make and make install again. + +Between each version new table files might have been added, or old ones +may be not used anymore. Nissy will deal with this automatically. diff --git a/Makefile b/Makefile @@ -27,6 +27,7 @@ debug: clean: rm -rf nissy nissy*.exe nissy*.tar.gz + rm doc/nissy.html doc/nissy.pdf dist: clean nissy.exe mkdir -p nissy-${VERSION} diff --git a/TODO.md b/TODO.md @@ -4,6 +4,8 @@ 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. ## Version 2.0.2 +### Website +* now gen takes 40 minutes ### Changelog * Only improved table generation speed, but this required huge changes in coordinates.c and symcoord.c (+ some minor changes in other parts). @@ -44,6 +46,7 @@ It's more of a personal reminder than anything else. ### Tables management * Check files in tables directory, add command to remove old / extraneous files * Add checksum to check that tables are generated / downloaded correctly +* Edit download page update instructions to tell what to do when changing tables ## Commands diff --git a/adhoc/README b/adhoc/README @@ -1,3 +0,0 @@ -This folder contains some ad-hoc code that is not included in the main nissy -program. You probably don't need it, but it may be worth looking into if you -are trying to extend nissy by writing your own steps or other functions. diff --git a/adhoc/compile.sh b/adhoc/compile.sh @@ -1,15 +0,0 @@ -#/!bin/sh - -mkdir build -cd build -cp -R ../../src ./ -rm src/shell.c -cp ../$1 src/ -cp ../../Makefile ./ -make -cp nissy ../run -rm src/* -rmdir src -rm * -cd .. -rmdir build diff --git a/adhoc/cornersdrhtr.c b/adhoc/cornersdrhtr.c @@ -1,128 +0,0 @@ -#include "commands.h" - -/* Some of the following functions are new, some are copied from steps.c */ -bool -allowed(Move m) -{ - return base_move(m) == U || m == R2 || m == F2; -} - -bool -allowed_next(Move l2, Move l1, Move m) -{ - return base_move(m) != base_move(l1); -} - -bool -check_cornershtr(Cube c) -{ - return coord_cornershtr.index(c) == 0; -} - -bool -check_coud_and_dbl(Cube c) -{ - return c.coud == 0 && what_corner_at(c, DBL) == DBL; -} - -static int -estimate_cornershtr_HTM(DfsArg *arg) -{ - return ptableval(&pd_cornershtr_HTM, arg->cube); -} - -static bool -validate_singlecw_ending(Alg *alg) -{ - int i; - bool nor, inv; - Move l2 = NULLMOVE, l1 = NULLMOVE, l2i = NULLMOVE, l1i = NULLMOVE; - - for (i = 0; i < alg->len; i++) { - if (alg->inv[i]) { - l2i = l1i; - l1i = alg->move[i]; - } else { - l2 = l1; - l1 = alg->move[i]; - } - } - - nor = l1 ==base_move(l1) && (!commute(l1, l2) ||l2 ==base_move(l2)); - inv = l1i==base_move(l1i) && (!commute(l1i,l2i)||l2i==base_move(l2i)); - - return nor && inv; -} - -int -main() -{ - Moveset moveset_UR2F2 = { - .allowed = allowed, - .allowed_next = allowed_next, - }; - - init_moveset(&moveset_UR2F2); - - /* - * This step is the same as cornershtr_HTM in steps.c, except for - * the ready() function (which is not relevant anyway, it is there - * more for testing than anything else) and the moveset. - */ - Step step = { - .final = false, - .is_done = check_cornershtr, - .estimate = estimate_cornershtr_HTM, - .ready = check_coud_and_dbl, - .is_valid = validate_singlecw_ending, - .moveset = &moveset_UR2F2, - - .pre_trans = uf, - - .tables = {&pd_cornershtr_HTM}, - .ntables = 1, - }; - - SolveOptions opts = { - .min_moves = 0, - .max_moves = 20, - .max_solutions = 1, - .nthreads = 4, - .optimal = 0, - .can_niss = false, - .verbose = false, - .all = false, - .print_number = false, - .count_only = false - }; - - init_symcoord(); - - bool cphtr_state_done[BINOM8ON4*6]; - for (unsigned long int i = 0; i < BINOM8ON4*6; i++) - cphtr_state_done[i] = false; - - for (unsigned long int i = 0; i < FACTORIAL8; i++) { - AlgList *sols; - Cube c = {0}; - c.cp = i; /* inconsistent state because of side CO */ - - if (what_corner_at(c, DBL) != DBL || - cphtr_state_done[coord_cphtr.index(c)]) - continue; - - fprintf(stderr, "Doing cp %ld (cphtr state %ld)\n", - i, coord_cphtr.index(c)); - - cphtr_state_done[coord_cphtr.index(c)] = true; - /* Comment next two lines to get non-reduced list */ - Cube mirror = apply_trans(ur_mirror, c); - cphtr_state_done[coord_cphtr.index(mirror)] = true; - - sols = solve(c, &step, &opts); - printf("%.2d\t", sols->first->alg->len); - print_alglist(sols, opts.print_number); - } - - return 0; -} diff --git a/adhoc/run b/adhoc/run Binary files differ. diff --git a/doc/nissy.html b/doc/nissy.html @@ -1,314 +0,0 @@ -<!-- Creator : groff version 1.22.4 --> -<!-- CreationDate: Mon Feb 21 22:56:07 2022 --> -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" -"http://www.w3.org/TR/html4/loose.dtd"> -<html> -<head> -<meta name="generator" content="groff -Thtml, see www.gnu.org"> -<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> -<meta name="Content-Style" content="text/css"> -<style type="text/css"> - p { margin-top: 0; margin-bottom: 0; vertical-align: top } - pre { margin-top: 0; margin-bottom: 0; vertical-align: top } - table { margin-top: 0; margin-bottom: 0; vertical-align: top } - h1 { text-align: center } -</style> -<title></title> -</head> -<body> - -<hr> - - -<p>NISSY(1) BSD General Commands Manual NISSY(1)</p> - -<p style="margin-top: 1em"><b>NAME</b></p> - -<p style="margin-left:6%;"><b>nissy</b> &mdash; a -Rubik&rsquo;s cube solver and FMC assistant</p> - -<p style="margin-top: 1em"><b>SYNOPSIS</b></p> - -<p style="margin-left:14%;"><b>nissy</b> [<b>&minus;b</b>] -<b><br> -nissy</b> <i>command</i> [options...]</p> - -<p style="margin-top: 1em"><b>DESCRIPTION</b></p> - -<p style="margin-left:6%;"><b>nissy</b> is a Rubik&rsquo;s -Cube solver. It uses techniques from Herbert -Kociemba&rsquo;s Cube Explorer and Tomas Rokicki&rsquo;s -nxopt. With 4 cores at 2.5GHz and using less than 3Gb of -RAM, Nissy can find the optimal solution for a random -Rubik&rsquo;s cube position in about a minute on average. -Nissy can also solve different substeps of the -Thistlethwaite&rsquo;s algorithm and more.</p> - -<p style="margin-left:6%; margin-top: 1em">When run without -any argument an interactive shell is launched, otherwise the -provided <i>command</i> is executed and nissy terminates. If -the option <b>&minus;b</b> is given, every argument after it -is ignored and the shell is launched without any prompt or -welcome message. This can be used to run nissy in batch -mode, for example writing a list of commands in a -<i>file</i> (one per line) and running <i>nissy -b &lt; -file</i></p> - -<p style="margin-left:6%; margin-top: 1em">The commands -that can be run in the interactive shell are the same that -can be run non-interactively and are provided below.</p> - -<p style="margin-top: 1em"><b>COMMANDS</b></p> - -<p style="margin-left:6%;">The available <i>commands</i> -are the following:</p> - -<p style="margin-top: 1em"><b>commands</b></p> - -<p style="margin-left:17%;">List all available -commands.</p> - -<p style="margin-top: 1em"><b>gen</b> [<b>&minus;t</b> -<i>N</i>]</p> - -<p style="margin-left:17%;">Generate all tables used by -nissy. Run this to complete your installation. If <i>N</i> -is specified, <i>N</i> CPU threads will be used (defaults to -1).</p> - -<p style="margin-top: 1em"><b>help</b> [<i>command</i>]</p> - -<p style="margin-left:17%;">Display help. If no -<i>command</i> is given, a generic help message is printed, -otherwise a specific help relative to <i>command</i> is -returned.</p> - -<p style="margin-top: 1em"><b>invert</b> -<i>scramble</i></p> - -<p style="margin-left:17%;">Invert the given scramble.</p> - -<p style="margin-top: 1em"><b>print</b> <i>scramble</i></p> - -<p style="margin-left:17%;">Display a text-only description -of the cube obtained after applying <i>scramble</i>.</p> - -<p style="margin-top: 1em"><b>quit</b></p> - -<p style="margin-left:17%; margin-top: 1em">Quit nissy.</p> - -<p style="margin-top: 1em"><b>scramble</b> [ <b><br> -&minus;n</b> <i>N</i>] [ <i><br> -type</i>]</p> - -<p style="margin-left:17%;">Print a randomly-generated -(random position) scramble If <i>N</i> is given, it produces -<i>N</i> scrambles. <i>type</i> can be specified to be one -of the following:</p> - -<p style="margin-top: 1em"><i>eo</i></p> - -<p style="margin-left:27%; margin-top: 1em">Scramble with -solved EO on F/B axis.</p> - -<p style="margin-top: 1em"><i>corners</i></p> - -<p style="margin-left:27%;">Scramble with solved edges -(only cornes are scrambled).</p> - -<p style="margin-top: 1em"><i>edges</i></p> - -<p style="margin-left:27%; margin-top: 1em">Scramble with -solved corners (only edges are scrambled).</p> - -<p style="margin-top: 1em"><b>solve</b> <i>step</i> [ -<i><br> -options</i>] <i>scramble.</i></p> - -<p style="margin-left:17%;">Solve the given <i>step</i> on -the given <i>scramble.</i> By default it finds only one -(shortest) solution, without using niss, and it displays the -number of moves at the end of the line. The options for the -<i>solve</i> command are the following:</p> - -<p style="margin-top: 1em"><b>&minus;a</b></p> - -<p style="margin-left:27%; margin-top: 1em">Print all -solutions: some solutions are filtered out by default for -some steps, for examples EOs that finish with F', with this -options they are not.</p> - -<p style="margin-top: 1em"><b>&minus;c</b></p> - -<p style="margin-left:27%; margin-top: 1em">Display only -the number of solutions found, not the solutions -themselves.</p> - -<p style="margin-top: 1em"><b>&minus;m</b> <i>min</i></p> - -<p style="margin-left:27%; margin-top: 1em">Only look for -solution that are at least <i>min</i> moves long.</p> - -<p style="margin-top: 1em"><b>&minus;M</b> <i>MAX</i></p> - -<p style="margin-left:27%; margin-top: 1em">Only look for -solution that are at most <i>MAX</i> moves long.</p> - -<p style="margin-top: 1em"><b>&minus;n</b> <i>N</i></p> - -<p style="margin-left:27%; margin-top: 1em">Try to find -<i>N</i> solutions. By default and unless the -<b>&minus;M</b> or <b>&minus;o</b> options are used, at most -one solution is returned. If at least one of <b>&minus;M</b> -and <b>&minus;o</b> is used, all the solutions found within -the given bounds are returned. The option <b>&minus;s</b> -overwrites these default behaviors and at most <i>N</i> -solutions are returned, still satisfiyng the other -constraints.</p> - -<p style="margin-top: 1em"><b>&minus;N</b></p> - -<p style="margin-left:27%; margin-top: 1em">Allow use of -NISS.</p> - -<p style="margin-top: 1em"><b>&minus;o</b></p> - -<p style="margin-left:27%; margin-top: 1em">Only find -solutions that require the minimum number of moves.</p> - -<p style="margin-top: 1em"><b>&minus;O</b> <i>N</i></p> - -<p style="margin-left:27%; margin-top: 1em">Only find -solutions that require at most <i>N</i> moves more than the -optimal solution. If <i>N</i> is 0, this is equivalent to -<b>&minus;o</b></p> - -<p style="margin-top: 1em"><b>&minus;p</b></p> - -<p style="margin-left:27%; margin-top: 1em">Plain style: do -not print the number of moves.</p> - -<p style="margin-top: 1em"><b>&minus;t</b> <i>N</i></p> - -<p style="margin-left:27%; margin-top: 1em">Use <i>N</i> -CPU threads. By default nissy uses only 1 thread. Using more -than one thread will improve performance, but the optimal -number depends on your machine and operating system. -Generally, using one less than the number of threads of your -CPU works quite well.</p> - -<p style="margin-top: 1em"><b>&minus;v</b></p> - -<p style="margin-left:27%; margin-top: 1em">Verbose mode: -print some information during the search and print each -solution as it is found instead of only printing them all -together at the end.</p> - -<p style="margin-top: 1em"><b>steps</b></p> - -<p style="margin-left:17%; margin-top: 1em">List all -available <i>steps</i> for the <i>solve</i> command.</p> - -<p style="margin-top: 1em"><b>twophase</b> -<i>scramble</i></p> - -<p style="margin-left:17%;">Find a solution using a -two-phase method. This does not guarantee to return an -optimal solution (and in fact most often it does not), but -it is very fast.</p> - -<p style="margin-top: 1em"><b>unniss</b> -<i>scramble</i></p> - -<p style="margin-left:17%;">Rewrite the scramble without -using NISS.</p> - -<p style="margin-top: 1em"><b>version</b></p> - -<p style="margin-left:17%;">Display version -information.</p> - -<p style="margin-top: 1em"><b>SCRAMBLES</b></p> - -<p style="margin-left:6%;">All the commands above that -accept a scramble also accept a <b>&minus;i</b> option with -no arguments. If this option is given, multiple scrambles -are read from standard input (one per line) until and EOF is -found, at which point stdin is cleared.</p> - -<p style="margin-top: 1em"><b>ENVIRONMENT</b></p> - -<p style="margin-left:6%;">Data is stored in the folder -pointed to by <b>$NISSYDATA.</b> If that variable is unset -the folder <b>$XDG_DATA_HOME/nissy</b> or -<b>$HOME/.nissy</b> is used instead. If none of this -environment variables is defined (e.g. in a non-UNIX -system), the current folder is used.</p> - -<p style="margin-top: 1em"><b>EXAMPLES</b></p> - -<p style="margin-left:6%;">The command:</p> - -<p style="margin-left:14%;">nissy solve -v -O 1 -&quot;R'U'FD2L2FR2U2R2BD2LB2D'B2L'R'BD2BU2LU2R'U'F&quot;</p> - -<p style="margin-left:6%;">Returns:</p> - -<p style="margin-left:14%;">Searching depth 0 <br> -Searching depth 1 <br> -(some more lines) <br> -Searching depth 16 <br> -D2 F' U2 D2 F' L2 D R2 D F B2 R' L2 F' U' D <br> -Searching depth 17 <br> -D2 F' U2 D2 F' L2 D R2 D F B2 R' L2 F' U' D (16)</p> - -<p style="margin-left:6%;">Notice that the solution is -printed twice: the first time it is printed as soon as it is -found as requested by the -v option.</p> - -<p style="margin-left:6%; margin-top: 1em">The command:</p> - -<p style="margin-left:14%;">nissy solve eofb -m 4 -M 5 -N --n 6 &quot;R'U'FD2L2 FR2 U2R2BD2 L B2 D' B2 L' R'&quot;</p> - -<p style="margin-left:6%;">Returns:</p> - -<p style="margin-left:14%;">U B U' B (4) <br> -U (B R' B) (4) <br> -(U B R' B) (4) <br> -U2 F R2 F (4) <br> -U2 B U2 B (4) <br> -(U2 B R' B) (4)</p> - -<p style="margin-left:6%; margin-top: 1em">On a UNIX shell, -the composite command</p> - -<p style="margin-left:14%;">nissy scramble -n 2 | nissy -solve -i &gt; file.txt</p> - -<p style="margin-left:6%;">Generates two random scrambles, -solves them and saves the result to file.txt. The file will -look something like this:</p> - -<p style="margin-left:14%;">&gt;&gt;&gt; Line: D U2 F D B' -F L2 D' F2 R2 L B2 L' U2 B2 R F2 L' D2 <br> -U2 R2 F2 L B2 D' R2 D' F U L2 B' U' R2 D2 R2 U (17) <br> -&gt;&gt;&gt; Line: D B R U' B' L2 U L U D2 R L B2 U2 L2 U2 R -U2 B2 L F2 <br> -D' F R' D B L2 B R2 L U L U2 B D' U R U F2 (18)</p> - -<p style="margin-top: 1em"><b>AUTHORS</b></p> - -<p style="margin-left:6%;">Sebastiano Tronto -&lt;<i>sebastiano.tronto@gmail.com</i>&gt;</p> - -<p style="margin-top: 1em"><b>SOURCE CODE</b></p> - -<p style="margin-left:6%;">Source code is available at -<b>https://github.com/sebastianotronto/nissy</b></p> - -<p style="margin-left:6%; margin-top: 1em">BSD -February&nbsp;21, 2022 BSD</p> -<hr> -</body> -</html> diff --git a/doc/nissy.pdf b/doc/nissy.pdf Binary files differ. diff --git a/nissy b/nissy Binary files differ. diff --git a/src/pruning.c b/src/pruning.c @@ -371,10 +371,6 @@ instance_fixnasty(void *arg) if ((t = aux[j]) == uf) continue; ii = td->pd->coord->transform(t, i); - if (ii < rmin || ii >= rmax) - fprintf(stderr, - "Error: transformed out of bound! " - "%lu %lu %lu\n", ii, rmin, rmax); if (ptableval_index(td->pd, ii) > td->d) { ptable_update_index(td->pd, ii, td->d); updated++; diff --git a/www/download/index.html b/www/download/index.html @@ -34,8 +34,8 @@ </tr> <tr> <td><strong>Latest version</strong></td> - <td><a href="/nissy-2.0.1.tar.gz">nissy-2.0.1.tar.gz (63Kb)</a></td> - <td><a href="/nissy-2.0.1.exe">nissy-2.0.1.exe (770Kb)</a></td> + <td><a href="/nissy-2.0.2.tar.gz">nissy-2.0.2.tar.gz (67Kb)</a></td> + <td><a href="/nissy-2.0.2.exe">nissy-2.0.2.exe (780Kb)</a></td> </tr> </table> @@ -63,12 +63,15 @@ the git repository. <h3>System requirements</h3> <p> -A full installation of nissy requires about 3Gb of space, +A full installation of nissy requires about 3.1Gb of space, of which 2.3Gb are occupied by the huge pruning table for fast optimal solving, and running it requires the same amount of RAM. One can choose to never use this function and not to install the relative pruning table. There is an alternative (slower) optimal solving function that uses about 500Mb of RAM. + +When generating the pruning tables automatically (see the section Tables below), +at least 5.3Gb or RAM are required. </p> <h3>Windows</h3> @@ -103,55 +106,35 @@ Then follow the instructions below to install the pruning tables. <h3>Tables</h3> -<table class="dltable"> -<tr> - <td></td> <td><strong>Zip file</strong></td> -</tr> -<tr> - <td><strong>Tables</strong></td> - <td><a href="/nissy-tables-2.0.zip">nissy-tables.2.0.zip (1.6Gb)</a></td> -</tr> -</table> <p> -<strong>Note:</strong> the version 2.0 at the end of the file name is -only indicative. Later versions will use the same tables, unless -otherwise specified. +Once you have installed nissy, run </p> -<p> -Nissy needs certain large tables to work. These tables are by default -generated the first time they are needed (e.g the first time you ask to solve a -certain step) and then saved to a file. Whenever these tables are needed again, -nissy simply loads the corresponding file from the hard disk. -</p> +<pre><code>nissy gen</code></pre> <p> -The very large table for optimal solving can take some time to generate -(about 1.5 hours on my fairly old but decent laptop, using 8 CPU threads). -In order to generate it you need at least 5Gb of RAM. -All other tables are much faster. +to generate all the tables that Nissy will ever need. +Running this command requires around 5.3Gb of RAM, and it can take some time +(about 40 minutes on my fairly old but decent laptop, with 8 CPU threads). </p> <p> -You can ask nissy to generate all the tables it will ever need with the gen -command. It is recommended to use more than one thread, if your CPU has them. -For example, you can run: +Some unnecessary technical detail: by default this command is going to use +at most 64 threads. If you want you can choose to use more threads (if your CPU +is very powerful) or fewer threads (if you for example want to run this command +in the background while you do other stuff) with the <code>-t</code> option, for +example <code>nissy gen -t 1</code>. </p> -<pre><code>nissy gen -t 8</code></pre> - <p> -to generate all tables using 8 threads. You can change 8 to any number -your CPU supports, up to 64. -</p> - -<p> -Alternatively, you can simply download all the tables and copy them into the -correct folder (see manual page, <code>ENVIRONMENT</code> section). On UNIX -operating systems this folder is either <code>.nissy/tables</code> in the -user's home directory or <code>$XDG_DATA_HOME/nissy/tables</code> if the -XDG variable is configured. On Windows it is the same directory as the -<code>nissy.exe</code> executable file. +Alternatively, you can +<a href="/nissy-tables-2.0.2.zip">download all the tables (1.7Gb)</a> and +copy them into the correct folder (see manual page, <code>ENVIRONMENT</code> +section). On UNIX operating systems this folder is either +<code>.nissy/tables</code> in the user's home directory or +<code>$XDG_DATA_HOME/nissy/tables</code> if the XDG variable is configured. +On Windows it is the same directory as the <code>nissy.exe</code> executable +file. </p> <h2 id="Upgrade">Upgrading</h2> @@ -169,7 +152,8 @@ a new folder and run <code>make</code> and <code>make install</code> again. </li> </ul> <p> -In all cases the table files do not need to be upgraded. +Between each version new table files might have been added, or old ones +may be not used anymore. Nissy will deal with this automatically. </p> <h2>Version history</h2> @@ -183,6 +167,11 @@ In all cases the table files do not need to be upgraded. <td><strong>Comment</strong></td> </tr> <tr> + <td><a href="/nissy-2.0.2.tar.gz">2.0.2</a></td> + <td>2022-06-01</td> + <td>Improved table generation speed</td> +</tr> +<tr> <td><a href="/nissy-2.0.1.tar.gz">2.0.1</a></td> <td>2022-02-22</td> <td>Bugfix release</td>