diff options
| author | Sebastiano Tronto <sebastiano.tronto@gmail.com> | 2021-12-29 17:42:41 +0100 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano.tronto@gmail.com> | 2021-12-29 17:42:41 +0100 |
| commit | 314e936a9f9b45e4482e860df802a63039b80f0a (patch) | |
| tree | 7521d549e9499b7151e5e32b4cfbf9c097ffb105 | |
| parent | e580f9d125e93911d67fe76e80798ffe3faa428b (diff) | |
| download | nissy-314e936a9f9b45e4482e860df802a63039b80f0a.tar.gz nissy-314e936a9f9b45e4482e860df802a63039b80f0a.zip | |
Added pdf doc in doc folder
| -rw-r--r-- | Makefile | 6 | ||||
| -rw-r--r-- | doc/nissy.html | 316 | ||||
| -rw-r--r-- | doc/nissy.pdf | bin | 0 -> 33153 bytes | |||
| -rwxr-xr-x | nissy | bin | 322576 -> 0 bytes | |||
| -rw-r--r-- | nissy-2.0rc1.tar.gz | bin | 65164 -> 65170 bytes |
5 files changed, 320 insertions, 2 deletions
| @@ -36,8 +36,10 @@ clean: | |||
| 36 | dist: clean | 36 | dist: clean |
| 37 | mkdir -p nissy-${VERSION} | 37 | mkdir -p nissy-${VERSION} |
| 38 | cp -R LICENSE Makefile INSTALL doc src nissy-${VERSION} | 38 | cp -R LICENSE Makefile INSTALL doc src nissy-${VERSION} |
| 39 | groff -Tpdf -mandoc doc/nissy.1 > nissy-${VERSION}/doc/nissy.pdf | 39 | groff -Tpdf -mandoc doc/nissy.1 > doc/nissy.pdf |
| 40 | groff -Thtml -mandoc doc/nissy.1 > nissy-${VERSION}/doc/nissy.html | 40 | groff -Thtml -mandoc doc/nissy.1 > doc/nissy.html |
| 41 | cp doc/nissy.pdf nissy-${VERSION}/doc/nissy.pdf | ||
| 42 | cp doc/nissy.html nissy-${VERSION}/doc/nissy.html | ||
| 41 | tar -cf nissy-${VERSION}.tar nissy-${VERSION} | 43 | tar -cf nissy-${VERSION}.tar nissy-${VERSION} |
| 42 | gzip nissy-${VERSION}.tar | 44 | gzip nissy-${VERSION}.tar |
| 43 | rm -rf nissy-${VERSION} | 45 | rm -rf nissy-${VERSION} |
diff --git a/doc/nissy.html b/doc/nissy.html new file mode 100644 index 0000000..dc97c1d --- /dev/null +++ b/doc/nissy.html | |||
| @@ -0,0 +1,316 @@ | |||
| 1 | <!-- Creator : groff version 1.22.4 --> | ||
| 2 | <!-- CreationDate: Wed Dec 29 17:36:38 2021 --> | ||
| 3 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" | ||
| 4 | "http://www.w3.org/TR/html4/loose.dtd"> | ||
| 5 | <html> | ||
| 6 | <head> | ||
| 7 | <meta name="generator" content="groff -Thtml, see www.gnu.org"> | ||
| 8 | <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> | ||
| 9 | <meta name="Content-Style" content="text/css"> | ||
| 10 | <style type="text/css"> | ||
| 11 | p { margin-top: 0; margin-bottom: 0; vertical-align: top } | ||
| 12 | pre { margin-top: 0; margin-bottom: 0; vertical-align: top } | ||
| 13 | table { margin-top: 0; margin-bottom: 0; vertical-align: top } | ||
| 14 | h1 { text-align: center } | ||
| 15 | </style> | ||
| 16 | <title></title> | ||
| 17 | </head> | ||
| 18 | <body> | ||
| 19 | |||
| 20 | <hr> | ||
| 21 | |||
| 22 | |||
| 23 | <p>NISSY(1) BSD General Commands Manual NISSY(1)</p> | ||
| 24 | |||
| 25 | <p style="margin-top: 1em"><b>NAME</b></p> | ||
| 26 | |||
| 27 | <p style="margin-left:6%;"><b>nissy</b> — a | ||
| 28 | Rubik’s cube solver and FMC assistant</p> | ||
| 29 | |||
| 30 | <p style="margin-top: 1em"><b>SYNOPSIS</b></p> | ||
| 31 | |||
| 32 | <p style="margin-left:6%;">[<b>−b</b>]</p> | ||
| 33 | |||
| 34 | <p style="margin-left:14%;"><b>nissy</b> <i>command</i> | ||
| 35 | [options...]</p> | ||
| 36 | |||
| 37 | <p style="margin-top: 1em"><b>DESCRIPTION</b></p> | ||
| 38 | |||
| 39 | <p style="margin-left:6%;"><b>nissy</b> is a Rubik’s | ||
| 40 | Cube solver. It uses techniques from Herbert | ||
| 41 | Kociemba’s Cube Explorer and Tomas Rokicki’s | ||
| 42 | nxopt. With 4 cores at 2.5GHz and using less than 3Gb of | ||
| 43 | RAM, Nissy can find the optimal solution for a random | ||
| 44 | Rubik’s cube position in about a minute on average. | ||
| 45 | Nissy can also solve different substeps of the | ||
| 46 | Thistlethwaite’s algorithm and more.</p> | ||
| 47 | |||
| 48 | <p style="margin-left:6%; margin-top: 1em">When run without | ||
| 49 | any argument an interactive shell is launched, otherwise the | ||
| 50 | provided <i>command</i> is executed and nissy terminates. If | ||
| 51 | the option <b>−b</b> is given, every argument after it | ||
| 52 | is ignored and the shell is launched without any prompt or | ||
| 53 | welcome message. This can be used to run nissy in batch | ||
| 54 | mode, for example writing a list of commands in a | ||
| 55 | <i>file</i> (one per line) and running <i>nissy -b < | ||
| 56 | file</i></p> | ||
| 57 | |||
| 58 | <p style="margin-left:6%; margin-top: 1em">The commands | ||
| 59 | that can be run in the interactive shell are the same that | ||
| 60 | can be run non-interactively and are provided below.</p> | ||
| 61 | |||
| 62 | <p style="margin-top: 1em"><b>COMMANDS</b></p> | ||
| 63 | |||
| 64 | <p style="margin-left:6%;">The available <i>commands</i> | ||
| 65 | are the following:</p> | ||
| 66 | |||
| 67 | <p style="margin-top: 1em"><b>commands</b></p> | ||
| 68 | |||
| 69 | <p style="margin-left:17%;">List all available | ||
| 70 | commands.</p> | ||
| 71 | |||
| 72 | <p style="margin-top: 1em"><b>gen</b> [<b>−t</b> | ||
| 73 | <i>N</i>]</p> | ||
| 74 | |||
| 75 | <p style="margin-left:17%;">Generate all tables used by | ||
| 76 | nissy. Run this to complete your installation. If <i>N</i> | ||
| 77 | is specified, <i>N</i> CPU threads will be used (defaults to | ||
| 78 | 1).</p> | ||
| 79 | |||
| 80 | <p style="margin-top: 1em"><b>help</b> [<i>command</i>]</p> | ||
| 81 | |||
| 82 | <p style="margin-left:17%;">Display help. If no | ||
| 83 | <i>command</i> is given, a generic help message is printed, | ||
| 84 | otherwise a specific help relative to <i>command</i> is | ||
| 85 | returned.</p> | ||
| 86 | |||
| 87 | <p style="margin-top: 1em"><b>invert</b> | ||
| 88 | <i>scramble</i></p> | ||
| 89 | |||
| 90 | <p style="margin-left:17%;">Invert the given scramble.</p> | ||
| 91 | |||
| 92 | <p style="margin-top: 1em"><b>print</b> <i>scramble</i></p> | ||
| 93 | |||
| 94 | <p style="margin-left:17%;">Display a text-only description | ||
| 95 | of the cube obtained after applying <i>scramble</i>.</p> | ||
| 96 | |||
| 97 | <p style="margin-top: 1em"><b>quit</b></p> | ||
| 98 | |||
| 99 | <p style="margin-left:17%; margin-top: 1em">Quit nissy.</p> | ||
| 100 | |||
| 101 | <p style="margin-top: 1em"><b>scramble</b> [ <b><br> | ||
| 102 | −n</b> <i>N</i>] [ <i><br> | ||
| 103 | type</i>]</p> | ||
| 104 | |||
| 105 | <p style="margin-left:17%;">Print a randomly-generated | ||
| 106 | (random position) scramble If <i>N</i> is given, it produces | ||
| 107 | <i>N</i> scrambles. <i>type</i> can be specified to be one | ||
| 108 | of the following:</p> | ||
| 109 | |||
| 110 | <p style="margin-top: 1em"><i>eo</i></p> | ||
| 111 | |||
| 112 | <p style="margin-left:27%; margin-top: 1em">Scramble with | ||
| 113 | solved EO on F/B axis.</p> | ||
| 114 | |||
| 115 | <p style="margin-top: 1em"><i>corners</i></p> | ||
| 116 | |||
| 117 | <p style="margin-left:27%;">Scramble with solved edges | ||
| 118 | (only cornes are scrambled).</p> | ||
| 119 | |||
| 120 | <p style="margin-top: 1em"><i>edges</i></p> | ||
| 121 | |||
| 122 | <p style="margin-left:27%; margin-top: 1em">Scramble with | ||
| 123 | solved corners (only edges are scrambled).</p> | ||
| 124 | |||
| 125 | <p style="margin-top: 1em"><b>solve</b> <i>step</i> [ | ||
| 126 | <i><br> | ||
| 127 | options</i>] <i>scramble.</i></p> | ||
| 128 | |||
| 129 | <p style="margin-left:17%;">Solve the given <i>step</i> on | ||
| 130 | the given <i>scramble.</i> By default it finds only one | ||
| 131 | (shortest) solution, without using niss, and it displays the | ||
| 132 | number of moves at the end of the line. The options for the | ||
| 133 | <i>solve</i> command are the following:</p> | ||
| 134 | |||
| 135 | <p style="margin-top: 1em"><b>−a</b></p> | ||
| 136 | |||
| 137 | <p style="margin-left:27%; margin-top: 1em">Print all | ||
| 138 | solutions: some solutions are filtered out by default for | ||
| 139 | some steps, for examples EOs that finish with F', with this | ||
| 140 | options they are not.</p> | ||
| 141 | |||
| 142 | <p style="margin-top: 1em"><b>−c</b></p> | ||
| 143 | |||
| 144 | <p style="margin-left:27%; margin-top: 1em">Display only | ||
| 145 | the number of solutions found, not the solutions | ||
| 146 | themselves.</p> | ||
| 147 | |||
| 148 | <p style="margin-top: 1em"><b>−m</b> <i>min</i></p> | ||
| 149 | |||
| 150 | <p style="margin-left:27%; margin-top: 1em">Only look for | ||
| 151 | solution that are at least <i>min</i> moves long.</p> | ||
| 152 | |||
| 153 | <p style="margin-top: 1em"><b>−M</b> <i>MAX</i></p> | ||
| 154 | |||
| 155 | <p style="margin-left:27%; margin-top: 1em">Only look for | ||
| 156 | solution that are at most <i>MAX</i> moves long.</p> | ||
| 157 | |||
| 158 | <p style="margin-top: 1em"><b>−n</b> <i>N</i></p> | ||
| 159 | |||
| 160 | <p style="margin-left:27%; margin-top: 1em">Try to find | ||
| 161 | <i>N</i> solutions. By default and unless the | ||
| 162 | <b>−M</b> or <b>−o</b> options are used, at most | ||
| 163 | one solution is returned. If at least one of <b>−M</b> | ||
| 164 | and <b>−o</b> is used, all the solutions found within | ||
| 165 | the given bounds are returned. The option <b>−s</b> | ||
| 166 | overwrites these default behaviors and at most <i>N</i> | ||
| 167 | solutions are returned, still satisfiyng the other | ||
| 168 | constraints.</p> | ||
| 169 | |||
| 170 | <p style="margin-top: 1em"><b>−N</b></p> | ||
| 171 | |||
| 172 | <p style="margin-left:27%; margin-top: 1em">Allow use of | ||
| 173 | NISS.</p> | ||
| 174 | |||
| 175 | <p style="margin-top: 1em"><b>−o</b></p> | ||
| 176 | |||
| 177 | <p style="margin-left:27%; margin-top: 1em">Only find | ||
| 178 | solutions that require the minimum number of moves.</p> | ||
| 179 | |||
| 180 | <p style="margin-top: 1em"><b>−O</b> <i>N</i></p> | ||
| 181 | |||
| 182 | <p style="margin-left:27%; margin-top: 1em">Only find | ||
| 183 | solutions that require at most <i>N</i> moves more than the | ||
| 184 | optimal solution. If <i>N</i> is 0, this is equivalent | ||
| 185 | to</p> | ||
| 186 | |||
| 187 | <p style="margin-top: 1em"><b>−o <br> | ||
| 188 | −p</b></p> | ||
| 189 | |||
| 190 | <p style="margin-left:27%; margin-top: 1em">Plain style: do | ||
| 191 | not print the number of moves.</p> | ||
| 192 | |||
| 193 | <p style="margin-top: 1em"><b>−t</b> <i>N</i></p> | ||
| 194 | |||
| 195 | <p style="margin-left:27%; margin-top: 1em">Use <i>N</i> | ||
| 196 | CPU threads. By default nissy uses only 1 thread. Using more | ||
| 197 | than one thread will improve performance, but the optimal | ||
| 198 | number depends on your machine and operating system. | ||
| 199 | Generally, using one less than the number of threads of your | ||
| 200 | CPU works quite well.</p> | ||
| 201 | |||
| 202 | <p style="margin-top: 1em"><b>−v</b></p> | ||
| 203 | |||
| 204 | <p style="margin-left:27%; margin-top: 1em">Verbose mode: | ||
| 205 | print some information during the search and print each | ||
| 206 | solution as it is found instead of only printing them all | ||
| 207 | together at the end.</p> | ||
| 208 | |||
| 209 | <p style="margin-top: 1em"><b>steps</b></p> | ||
| 210 | |||
| 211 | <p style="margin-left:17%; margin-top: 1em">List all | ||
| 212 | available <i>steps</i> for the <i>solve</i> command.</p> | ||
| 213 | |||
| 214 | <p style="margin-top: 1em"><b>twophase</b> | ||
| 215 | <i>scramble</i></p> | ||
| 216 | |||
| 217 | <p style="margin-left:17%;">Find a solution using a | ||
| 218 | two-phase method. This does not guarantee to return an | ||
| 219 | optimal solution (and in fact most often it does not), but | ||
| 220 | it is very fast.</p> | ||
| 221 | |||
| 222 | <p style="margin-top: 1em"><b>unniss</b> | ||
| 223 | <i>scramble</i></p> | ||
| 224 | |||
| 225 | <p style="margin-left:17%;">Rewrite the scramble without | ||
| 226 | using NISS.</p> | ||
| 227 | |||
| 228 | <p style="margin-top: 1em"><b>version</b></p> | ||
| 229 | |||
| 230 | <p style="margin-left:17%;">Display version | ||
| 231 | information.</p> | ||
| 232 | |||
| 233 | <p style="margin-top: 1em"><b>SCRAMBLES</b></p> | ||
| 234 | |||
| 235 | <p style="margin-left:6%;">All the commands above that | ||
| 236 | accept a scramble also accept a <b>−i</b> option with | ||
| 237 | no arguments. If this option is given, multiple scrambles | ||
| 238 | are read from standard input (one per line) until and EOF is | ||
| 239 | found, at which point stdin is cleared.</p> | ||
| 240 | |||
| 241 | <p style="margin-top: 1em"><b>ENVIRONMENT</b></p> | ||
| 242 | |||
| 243 | <p style="margin-left:6%;">Data is stored in the folder | ||
| 244 | pointed to by <b>$NISSYDATA.</b> If that variable is unset | ||
| 245 | the folder <b>$XDG_DATA_HOME/nissy</b> or | ||
| 246 | <b>$HOME/.nissy</b> is used instead. If none of this | ||
| 247 | environment variables is defined (e.g. in a non-UNIX | ||
| 248 | system), the current folder is used.</p> | ||
| 249 | |||
| 250 | <p style="margin-top: 1em"><b>EXAMPLES</b></p> | ||
| 251 | |||
| 252 | <p style="margin-left:6%;">The command:</p> | ||
| 253 | |||
| 254 | <p style="margin-left:14%;">nissy solve -v -O 1 | ||
| 255 | "R'U'FD2L2FR2U2R2BD2LB2D'B2L'R'BD2BU2LU2R'U'F"</p> | ||
| 256 | |||
| 257 | <p style="margin-left:6%;">Returns:</p> | ||
| 258 | |||
| 259 | <p style="margin-left:14%;">Searching depth 0 <br> | ||
| 260 | Searching depth 1 <br> | ||
| 261 | (some more lines) <br> | ||
| 262 | Searching depth 16 <br> | ||
| 263 | D2 F' U2 D2 F' L2 D R2 D F B2 R' L2 F' U' D <br> | ||
| 264 | Searching depth 17 <br> | ||
| 265 | D2 F' U2 D2 F' L2 D R2 D F B2 R' L2 F' U' D (16)</p> | ||
| 266 | |||
| 267 | <p style="margin-left:6%;">Notice that the solution is | ||
| 268 | printed twice: the first time it is printed as soon as it is | ||
| 269 | found as requested by the -v option.</p> | ||
| 270 | |||
| 271 | <p style="margin-left:6%; margin-top: 1em">The command:</p> | ||
| 272 | |||
| 273 | <p style="margin-left:14%;">nissy solve eofb -m 4 -M 5 -N | ||
| 274 | -n 6 "R'U'FD2L2 FR2 U2R2BD2 L B2 D' B2 L' R'"</p> | ||
| 275 | |||
| 276 | <p style="margin-left:6%;">Returns:</p> | ||
| 277 | |||
| 278 | <p style="margin-left:14%;">U B U' B (4) <br> | ||
| 279 | U (B R' B) (4) <br> | ||
| 280 | (U B R' B) (4) <br> | ||
| 281 | U2 F R2 F (4) <br> | ||
| 282 | U2 B U2 B (4) <br> | ||
| 283 | (U2 B R' B) (4)</p> | ||
| 284 | |||
| 285 | <p style="margin-left:6%; margin-top: 1em">On a UNIX shell, | ||
| 286 | the composite command</p> | ||
| 287 | |||
| 288 | <p style="margin-left:14%;">nissy scramble -n 2 | nissy | ||
| 289 | solve -i > file.txt</p> | ||
| 290 | |||
| 291 | <p style="margin-left:6%;">Generates two random scrambles, | ||
| 292 | solves them and saves the result to file.txt. The file will | ||
| 293 | look something like this:</p> | ||
| 294 | |||
| 295 | <p style="margin-left:14%;">>>> Line: D U2 F D B' | ||
| 296 | F L2 D' F2 R2 L B2 L' U2 B2 R F2 L' D2 <br> | ||
| 297 | U2 R2 F2 L B2 D' R2 D' F U L2 B' U' R2 D2 R2 U (17) <br> | ||
| 298 | >>> Line: D B R U' B' L2 U L U D2 R L B2 U2 L2 U2 R | ||
| 299 | U2 B2 L F2 <br> | ||
| 300 | D' F R' D B L2 B R2 L U L U2 B D' U R U F2 (18)</p> | ||
| 301 | |||
| 302 | <p style="margin-top: 1em"><b>AUTHORS</b></p> | ||
| 303 | |||
| 304 | <p style="margin-left:6%;">Sebastiano Tronto | ||
| 305 | <<i>sebastiano.tronto@gmail.com</i>></p> | ||
| 306 | |||
| 307 | <p style="margin-top: 1em"><b>SOURCE CODE</b></p> | ||
| 308 | |||
| 309 | <p style="margin-left:6%;">Source code is available at | ||
| 310 | <b>https://github.com/sebastianotronto/nissy</b></p> | ||
| 311 | |||
| 312 | <p style="margin-left:6%; margin-top: 1em">BSD | ||
| 313 | December 29, 2021 BSD</p> | ||
| 314 | <hr> | ||
| 315 | </body> | ||
| 316 | </html> | ||
diff --git a/doc/nissy.pdf b/doc/nissy.pdf new file mode 100644 index 0000000..5c5ebbb --- /dev/null +++ b/doc/nissy.pdf | |||
| Binary files differ | |||
| Binary files differ | |||
diff --git a/nissy-2.0rc1.tar.gz b/nissy-2.0rc1.tar.gz index 61ba0e6..8371b07 100644 --- a/nissy-2.0rc1.tar.gz +++ b/nissy-2.0rc1.tar.gz | |||
| Binary files differ | |||
