1Freecell Solver's News File 2=========================== 3Shlomi Fish <shlomif@cpan.org> 4:Date: 2020-07-23 5:Revision: $Id$ 6 7Version 6.2.0: (10-Oct-2020) 8---------------------------- 9 101. +CMakeLists.txt+ cleanups. 11 122. Fixed broken links. 13 143. Use +with+ for open calls in Python code: 15https://stackoverflow.com/questions/3012488/what-is-the-python-with-statement-designed-for 16 174. Fix run time errors in +board_gen/transpose-freecell-board.py+ . 18 195. Convert some integer types to +uint_fast32_t+. 20 216. Add the +--should-skip-tests+ and +--custom-tests-suite+ flags to 22+run-tests.pl+. This allow for fuzz-testing builds. 23 247. Add +t/lib/FC_Solve/DeltaStater/FccFingerPrint.pm+ which is a prototype 25for a more compact representation of zero-freecells deals. 26 27Version 6.0.1: (23-Jul-2020) 28---------------------------- 29 301. Fix the cmake build when using +cmake -S src -B build+ followed by 31+cmake --build build+. (Reported at 32https://github.com/shlomif/fc-solve/issues/47 - thanks to @antonio-rojas .) 33 342. Update +freecell-solver.spec.in+ to pass on Fedora 33 and to use 35the +%cmake*+ macros. 36 37Version 6.0.0: (22-Jul-2020) 38---------------------------- 39 401. Fix a minor bug where the initial position could be traversed twice. 41 422. Add the +FCS_HARD_CODE_STATE_DEPTH_FIELD+ compile time option. 43 443. Code cleanups. 45 46Version 5.24.0: (04-May-2020) 47----------------------------- 48 491. Add the "=all()" moves order specifier. 50 512. Add the FCS_ZERO_FREECELLS_MODE compile macro. 52 533. Update the compile time CMake descriptions for optimizing 54runtimes on more modern CPUs. 55 564. Remove support for the secondary hash value. 57 58Version 5.22.1: (13-Apr-2020) 59----------------------------- 60 611. Fix the installation of the documents, and make sure that +README.win32.txt+ 62only gets installed on MS Windows. 63( https://github.com/shlomif/fc-solve/pull/37 ) 64 65Version 5.22.0: (04-Apr-2020) 66----------------------------- 67 681. Convert the CMake build system to use GNUInstallDirs . 69 702. Extract a deal integer type. 71 723. Avoid compiler warnings and check for some dependencies. 73 74Version 5.20.1: (03-Mar-2020) 75----------------------------- 76 771. Keep a clone of rinutils v0.2.0 in the source directory to avoid 78a build time dependency. The build process shall still use the system 79one if it is found. (Requested by the maintainer of the Debian package.) 80 81Version 5.20.0: (27-Feb-2020) 82----------------------------- 83 841. Add the unrecognized command line flags API methods (for use by 85the online interface). 86 872. Some cleanups and fixes. 88 89Version 5.18.0: (12-Feb-2020) 90----------------------------- 91 921. Add +board_gen/make_multi_boards.c+ (not installed by default). 93 942. Add pass:c[get_board__setup_string()] and pass:c[get_board_l__without_setup()] 95(optimization). 96 973. Convert +fcs_game_limit+ to +uint16_t+ (optimization). 98 994. Refactorings and cleanups. 100 101Version 5.16.0: (30-Dec-2019) 102----------------------------- 103 1041. Require https://github.com/shlomif/rinutils/[rinutils] to be installed. 105 106Version 5.14.0: (30-Aug-2019) 107----------------------------- 108 1091. Install the depth/dbm fc-solvers by default (hopefully for real this time). 110https://groups.yahoo.com/neo/groups/fc-solve-discuss/conversations/messages/1626 111 1122. Fix and test the threaded solvers on Windows (which are using pthreads). 113 1143. Fix the fc_solve_stack_compare_for_canonize() optimization and enable it globally. 115 1164. Generate .msi Windows packages. 117 1185. Deprecate MAX_NUM_DECKS being not equal to 1. 119 120Version 5.12.0: (29-Jul-2019) 121----------------------------- 122 1231. Extracted https://pypi.org/project/freecell-solver/ - Python 124bindings to libfreecell-solver. 125 1262. Speed improvements. 127 1283. Code cleanups. 129 1304. Avoid some CMake warnings and other cleanups. 131 132Version 5.10.0: (18-Jun-2019) 133----------------------------- 134 1351. Convert the C tests to use https://cmocka.org/ instead of libtap, 136due to a more portable API, more features and easier packaging. 137 1382. Fixed freecell-solver.spec.in and now testing it on Fedora Linux 139using Docker on Travis-CI. 140 1413. Add the +--rebuild+ flag to +run-tests.pl+ . 142 143Version 5.8.0: (16-Jun-2019) 144---------------------------- 145 1461. Install the depth/dbm fc-solvers by default. They have been 147"experimental" for too long. 148https://groups.yahoo.com/neo/groups/fc-solve-discuss/conversations/messages/1626 149 1502. There is a compile time option to use https://apr.apache.org/[libapr]'s 151hash table as a backend for the DBM solvers. This is faster but consumes 152more RAM. 153https://groups.yahoo.com/neo/groups/fc-solve-discuss/conversations/messages/1632 154 1553. Extracted some common headers into 156https://github.com/shlomif/rinutils[the "rinutils" library] which can be 157used by other projects. 158 1594. Bug fix: the board generation programs now avoid dealing out of range deals. 160 1615. Cache the CI valgrind/digest/verify test results for optimising test 162runs. 163 1646. Optimise the RAM consumption of summarizing_solver.c for sequences. 165https://groups.yahoo.com/neo/groups/fc-solve-discuss/conversations/messages/1626 166 1677. Add support for https://github.com/Cyan4973/xxHash[xxHash] v0.7.0's 168xxh3 hash function for extra speed. 169https://groups.yahoo.com/neo/groups/fc-solve-discuss/conversations/messages/1627 . 170 1718. Many small cleanups and refactorings. 172 173Version 5.6.0: (08-Apr-2019) 174---------------------------- 175 1761. Fix some bugs and regressions regarding handling of +-l ve+ and +-l sp+ 177detected by using an old kpat with the new libfreecell-solver. 178 1792. Convert the C tests to use https://github.com/shlomif/libtap/tree/cmake . 180 1813. Better "void * user" recycling. 182 1834. Code cleanups. 184 185Version 5.4.0: (18-Mar-2019) 186---------------------------- 187 1881. Fix several bugs related to freecell_solver_user_limit_iterations_long() 189, +--max-iters+, etc. Some of them could make the library consume many more 190resources than specified and so may have *SECURITY* implications. ( 191https://bugs.kde.org/show_bug.cgi?id=405187 .) 192 1932. Added freecell_solver_user_soft_limit_iterations_long() and 194FCS_STATE_SOFT_SUSPEND_PROCESS to the API. 195 1963. Add a new FCS_DEAL_ONLY_UP_TO_2G compile-time option. 197 1984. Fix more GCC and clang warnings, and other cleanups. 199 200Version 5.2.0: (20-Feb-2019) 201---------------------------- 202 2031. Extract most of the python board generation logic into 204https://pypi.org/project/pysol-cards/ . Added support for dealing 205https://en.wikipedia.org/wiki/Golf_(patience) and other games. 206 2072. Add "--max-num-states" to the dbm solvers. 208 2093. Better portability to macOS. 210 2114. Fixes for google densehash. 212 2135. Cleanups and optimisations. 214 215Version 5.0.0: (27-Oct-2018) 216---------------------------- 217 2181. *Breaking change*: made the userland headers +fcs_user.h+, +fcs_cl.h+, etc. 219includable only as +#include <freecell-solver/fcs_cl.h>+. The API and ABI 220should otherwise remain the same. 221 2222. Add the gen-multiple-pysol-layouts executable to generate several numbered 223deals as separate files. 224 2253. Added the experimental fc-solve-multi solver to solve several files in 226one go (not installed by default). 227 2284. Rename the AsciiDoc documents from +\*.txt+ to +\*.asciidoc+, in order to 229please GitHub/etc. ; updated them and fixed some formatting. 230 231Version 4.20.0: (25-Jul-2018) 232----------------------------- 233 2341. New --iter-output-step command-line flag. 235 2362. New --hint-on-intractable command-line flag and functionality. 237 2383. Add -DFCS_MAX_RANK=... compile time option to set the maximal rank below 13. 239 2404. Add the -DFCS_BREAK_BACKWARD_COMPAT_2=1 compile-time option which improves 241performance but breaks bug-to-bug backward compatibility. 242 2435. Add the -DFCS_UNSAFE=1 option. 244 2456. Converted the python-based testing scripts from TAP.Simple to pycotap. 246 2477. Other speedups and refactorings. 248 249Version 4.18.0: (22-Mar-2018) 250----------------------------- 251 2521. Convert the code in board_gen/ from the GPL to the MIT/Expat licence. 253 2542. Convert the hash function to xxHash ( https://cyan4973.github.io/xxHash/ ) 255for improved performance. 256 2573. Eliminate several GCC warnings and other cleanups and speedups. 258 259Version 4.16.0: (21-Jan-2018) 260----------------------------- 261 2621. Add a new +-l looking-glass+ command line preset, which provides improved 263speed. 264 2652. Add some programs to find the deal index of a card layout. 266 2673. Remove "freecell-solver-config" - one should use pkg-config instead. 268 2694. Many small optimizations and cleanups. 270 271Version 4.14.1: (06-Oct-2017) 272----------------------------- 273 2741. Fix the compilation and tests when +__int128+ is not available (e.g: on 275x86-32 systems). 276 2772. Fix a double-free error in certain conditions. Thanks to Theodore Pringle. 278See: https://groups.yahoo.com/neo/groups/fc-solve-discuss/conversations/messages/1554 279 280Version 4.14.0: (02-Oct-2017) 281----------------------------- 282 2831. Add a new 'j' move of moving cards from freecells to empty columns and 284immediately putting cards on top. 285 2862. Add a new +-l cookie-monster+ command line preset based on it which sports 287improved speed. 288 2893. Fixed a bug with a potential hang with two identically-depthed +-dto2+ 290flags: 291https://groups.yahoo.com/neo/groups/fc-solve-discuss/conversations/messages/1549 292 293Version 4.12.1: (10-Jun-2017) 294----------------------------- 295 2961. Fix dealing of high indexed (above 2G) deals on some 32-bit and/or 297MS Windows platforms. 298 299Version 4.12.0: (09-Jun-2017) 300----------------------------- 301 3021. Fix a problem where the fc-pro-range-solver ignored game parameters such 303as +--freecells-num 0+. (Thanks to Larry). 304 3052. Enable building an MS Windows 32-bit installer using AppVeyor. This will 306facilitate releasing them along with the source. 307 3083. Some more minor cleanups and optimizations. 309 310Version 4.10.0: (31-May-2017) 311----------------------------- 312 3131. Add some new compile-time options that may make the runtime faster, but 314may remove or break functionality. 315 3162. Convert the python-based automated tests to use cffi, which is more modern 317and recommended, instead of ctypes. 318 3193. Many code cleanups, refactorings, and optimizations. 320 321Version 4.8.0: (20-Jan-2017) 322---------------------------- 323 3241. Fix a crash when doing +fc-solve -g [non-existent-game]+ (with tests): 325https://github.com/shlomif/fc-solve/issues/11 . 326 3272. Mention the final parameter name (instead of just saying "(null)") when 328it accepts a non-given argument: 329https://github.com/shlomif/fc-solve/issues/12 . 330 3313. Remove DEBUG_STATES - it was slow and not really helpful and caused bloat. 332 3334. Implement condition variables instead of usleep in the depth_dbm_solver . 334https://github.com/shlomif/fc-solve/issues/8 . It now also supports processing 335batches of items from the queue in a single transaction. 336 3375. Got a test suite to pass on MS-Windows / AppVeyor: 338https://ci.appveyor.com/project/shlomif/fc-solve . 339 3406. Many large and small code cleanups and refactorings. 341 342Version 4.6.1: (14-Jan-2017) 343---------------------------- 344 3451. Fix for building the package in certain conditions (originally created for 346the Mageia Linux package). 347 348Version 4.6.0: (04-Dec-2016) 349---------------------------- 350 3511. Got the production code and tests to pass on ARM Linux. Previously 352+fc-solve+ just hanged there. 353 3542. Fix the tests and +depth_dbm_fc_solver+ on 32-bit platforms. 355 3563. Apply the large Freecell Pro seeds deals generation to the board generators 357and range solvers. 358 3594. Option to use +$$_$$$$_$$int128+ instead of libGMP for the DBM solvers - a 360significant speed-up, see 361http://fc-solve.shlomifish.org/charts/dbm-solver-__int128-optimisation/ . 362 3635. Revise some awkward phrasing in the README . 364 3656. Many small and larger cleanups. 366 367Version 4.4.0: (22-Sep-2016) 368---------------------------- 369 3701. Add the +-l one-big-family+, or +-l obf+ for short, preset which improves 371the average performance for solving Freecell deals. 372 3732. Add the +transpose-freecell-board.py+ utility to transpose a board from 374having stacks-in-columns to a stacks-in-lines format acceptable by fc-solve. 375 3763. Fix a bug where using a flare-based scan while incrementally increasing 377the iterations limit could have created a situation where one scan gets all 378the iterations. 379 3804. Remove make-gnome-freecell-board (GNOME Freecell was discontinued) 381and make-aisleriot-freecell-board (as AisleRiot no longer has numbered deals). 382 3835. Fix some crashes that were found using 384http://lcamtuf.coredump.cx/afl/[American Fuzzy Lop], caused due to misuse of 385the command line arguments or the input board format. 386 3876. Fix a major regression bug in the +depth_dbm_fc_solve+ and possibly related 388solvers that prevented it from making progress. 389 3907. Some optimisations for improving general performance on all presets. 391 3928. Many code cleanups and refactorings. 393 394Version 4.2.0: (25-Mar-2016) 395---------------------------- 396 3971. New command-line preset +-l conspiracy-theory+ or +-l ct+ for short that is 398faster than +-l as+ on average. 399 4002. Bug fix: some error messages are not emitted to STDERR instead of STDOUT. 401Furthermore, the exit code on some failures is now non-zero. 402 4033. Bug fix: flares names in the flares plan is now their exact strings instead 404of any possible beginning of them. 405 4064. Add a compile-time option to not compile the FC-Pro moves count (used 407primarily for determining the shortest flares). It is 408+-DFCS_WITHOUT_FC_PRO_MOVES_COUNT=1+ . 409 4105. Bug fix: properly clean-up solution_moves on recycle. 411 4126. Bug fix: fix the output of the Freecell's dashes in non-parsable output. 413 4147. Add a compile-time option (+-DFCS_BREAK_BACKWARD_COMPAT_1+) to break some 415backward compatibility, such as old functions, cards with "10" instead of "T", 416trailing whitespace in output, and the non-"-p" output of states. This makes 417the binaries smaller and faster but may break some existing functionality. 418Enabling it is not recommended. 419 4208. Freecell Solver now uses https://travis-ci.org/[Travis-CI] to build and 421test the code in several configurations on each commit. This is part of the 422so-called “Continuous Integration” practice. 423 4249. Added support for clang to the PGO (= profile-guided-optimizations) 425scripts. 426 42710. Moved away or deleted many scripts and other cruft. 428 42911. Remove FCS_STATE_STORAGE_INDIRECT - it was old and slow and the hash lookup 430or a balanced binary tree should be used instead. 431 43212. Remove the experimental flipping support and made the default for cards 433not to be flippable at all. (The code did not build with it enabled anyway.) 434 43513. Many small and large cleanups, optimizations and refactorings - hopefully 436without breaking backward-compatibility. 437 438Version 4.0.2: (14-Jan-2016) 439---------------------------- 440 4411. Correct tarball release - 4.0.1 should not be used. 442 443Version 4.0.1: (14-Jan-2016) 444---------------------------- 445 4461. Fix the tests for the new Games-Solitaire-Verify (0.1601). 447 4482. Apply a patch from http://www.mageia.org/[Mageia] to prevent underlinking 449during build. Thanks! 450 4513. Disable linking to the gperftools’ tcmalloc library if the test suite 452is enabled due to https://github.com/gperftools/gperftools/issues/758 . 453 454Version 4.0.0: (27-Sep-2015) 455---------------------------- 456 4571. Integrate the scans of Tom Holroyd’s patsolve, for a faster atomic 458moves-based solver. See the +--method patsolve+, +--patsolve-x-param+ 459and +--patsolve-y-param+ options in the +USAGE.txt+ file. 460 4612. Add the +-dto2+ / +--depth-tests-order2+ flag to provide a corrected 462version of the depth-tests-order feature without the depth string and comma 463being prefixed to the tests order due to an oversight. 464 4653. Convert the Python code (tests + board generation) to Python 3, because 466it seems that Python 2 is going away. To run it, we require the "random2" 467module from PyPI : https://pypi.python.org/pypi/random2 . 468 4694. Many small cleanups and optimisations. 470 4715. Source tarball is now “.tar.xz”. 472 473Version 3.26.0: (19-May-2014) 474----------------------------- 475 4761. Remove the documents (e.g: +README+, +COPYING+, +AUTHORS+), which 477have duplicates with a .txt extension from the source distribution, to save 478space. They are still being copied to their location in the BINARY_DIR 479where cmake is invoked from. 480 4812. Fix a division/modulo by zero problem that yielded a floating-point 482exception, as reported by the Mayhem team to the Debian bug tracker: 483https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=715914 . Thanks! 484 4853. Fix +board_gen/pi-make-microsoft-freecell-board+ 486+board_gen/make-aisleriot-freecell-board+ and + 487+board_gen/make-gnome-freecell-board+ from crashing if only a single "-t" 488flag is given. A crash was reported by the Mayhem team to the Debian 489bug tracker: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=716097 . Thanks! 490 4914. Fix the automated tests, so they will support the new versions of 492Games::Solitaire::Verify[http://fc-solve.shlomifish.org/verify-code/] . 493 4945. Remove +make_microsoft_freecell_board.c+ - it is not useful and 495+pi-make-microsoft-freecell-board+ or +make_pysol_freecell_board.py+ should 496be used instead. 497 4986. Fix the build process for version 4.9.x of the GCC compiler. 499 5007. Add the pseudo-DFS solver in +pseudo_dfs_atomic_moves_solver.c+ , 501which is another attempt at solving hard two freecell deals. It runs, 502but generates a very large stack with the deal in question (MS #384243 ). 503 5048. The +summarize-fc-solve+ script now accepts some game parameters followed 505by a double-dash ("--"), followed by preset parameters for the solver. 506 5079. Various fixes for warnings and errors for the build process, while using 508CMake-3.0.0-rc3 (what will become CMake-3.0.0). 509 51010. Some cleanups, refactorings, modernisations, and minor optimisations. 511 512Version 3.24.0: (23-Feb-2014) 513----------------------------- 514 5151. This release is dedicated to the memory of Adrian Ettlinger (see 516https://en.wikipedia.org/wiki/Adrian_Ettlinger ) who passed away on 51723 October 2013, who was a good Internet friend of the primary maintainer of 518Freecell Solver (= Shlomi Fish), and who contributed a great deal to Freecell 519Solver and to Freecell research and programming in general (among other 520life achievements, and contributions). You can find an obituary of 521Mr. Ettlinger by Shlomi Fish here: 522https://groups.yahoo.com/neo/groups/fc-solve-discuss/conversations/messages/1379 523and the +video-editing+ preset (see below) was named in honor of his previous 524work in pioneering non-linear video editing. 525 5262. Handle board/layout inputs without a trailing newline character on the last 527line properly (thanks to someone who reported it via E-mail with respect to 528the JavaScript-based solver). 529 5303. Add the +-l video-editing+ or +-l ve+ flare-based preset for shorter 531solutions (on average). 532 5334. The distribution now contains the sources for the so-called 534split-fcc-solver, which was originally conceived as an attempt to 535determine whether the Windows Freecell deal No. 384,243 is solvable with 536two freecells or not. The attempt failed because the split-FCC-solver 537generated large intermediate outputs, but it may prove of some utility 538in the future (while being experimental). 539 540Version 3.22.0: (05-Oct-2013) 541----------------------------- 542 5431. Made sure unknown options which have a prefix that is a recognised option 544(e.g: +--resetjunk+ vs. +--reset+), will be reported as such instead of 545processed as the prefix automagically. 546 5472. Fix the Win32 NSIS package, so it will build, run and process the presets. 548 5493. The JavaScript-based solver now accepts arbitrary fc-solve command line 550parameters, so it can solve any of the supported variants of Solitaire. 551 552Version 3.20.1: (01-Jul-2013) 553----------------------------- 554 5551. Fix the build and silenced some warnings on MinGW/GCC/Win32. 556 557Version 3.20.0: (26-Jun-2013) 558----------------------------- 559 5601. Major speedups to the Simple Simon code - including order of complexity 561ones where a lookup is now O(1) instead of O(num_cards). The Simple Simon 562code was in general heavily refactored and cleaned up. 563 5642. Some bugs in the Simple Simon algorithms were fixed, slightly modifying 565the outputted solutions. 566 5673. Add missing BuildRequires to the RPM .spec . 568 5694. Add the +qualified-seed-improved+ preset. 570 5715. Fix the run-time display of the iteration count during 572+pkill -USR1 fc-solve+. 573 5746. Some minor refactorings and optimisations. 575 576Version 3.18.1: (30-May-2013) 577----------------------------- 578 5791. Fix "make install" - there were some problems with the generation of 580the man pages. 581 5822. Fix the RPM .spec building. 583 584Version 3.18.0: (30-May-2013) 585----------------------------- 586 5871. Add a JavaScript port that uses Emscripten 588( https://github.com/kripken/emscripten ) to compile the C code into 589JavaScript. See +Makefile.to-javascript.mak+ and the contents of 590The +/fc-solve/site/wml+ directory of the repository. 591 5922. Convert the CMake build system to the common +cmake/Shlomif_Common.cmake+ 593file, which will facilitate cross-project maintenance. It is included inside 594the archive. 595 5963. Added a +--help+ flag for the summarize-fc-solve executable. 597 5984. Got the test suite and the +dbm_fc_solver+ and the +depth_dbm_fc_solver+ 599to run properly on 32-bit architectures. 600 6015. The default rpm spec now runs the test suite. 602 6036. Add http://en.wikipedia.org/wiki/Const-correctness[const] annotations and 604moved declarations to where they are first assigned. 605 606Version 3.16.0: (30-Nov-2012) 607----------------------------- 608 6091. Add the +-l micro-finance-improved+ preset (or +-l mfi+ for short), 610which somewhat improves the length of the solutions of the +micro-finance+ 611preset. 612 6132. Add the +--flares-choice+ option, which determines how the winning flare 614is chosen. 615 6163. Add the +--flares-iters-factor+ option (or +-fif+ for short), which 617specifies a factor to multiply the flares quotas. 618 6194. Add the +-l qualified-seed+ preset (or +-l qs+ for short), 620which somewhat improves the length of the solutions of the 621+-l micro-finance-improved+ preset. 622 6235. The individual flares are now recycled and their memory is reused when 624they are no longer needed. This is a RAM optimisation, which is applicable 625only for flares-based presets. 626 627Version 3.14.1: (01-Nov-2012) 628----------------------------- 629 6301. Fix the build on Windows with DWIM Perl and its Mingw32 (+strndup()+ 631was missing). 632 633Version 3.14.0: (31-Oct-2012) 634----------------------------- 635 6361. Got the tests to pass with +cmake -DFCS_WITHOUT_DEPTH_FIELD=1+ by making 637the library behave the same as without it. This also affected the behaviour of 638+./fc-solve -l mo+ with attempting to solve Baker’s Dozen deals. 639 6402. On UNIX platforms, +fc-solve+ now exits gracefully with the message 641“Iterations count exceeded.”, upon receiving a SIGABRT signal. Can be 642triggered by executing +pkill -ABRT fc-solve+. 643 6443. The game states’ input routines now accept regular columns that start with 645a leading colon (":"). As a result, one can input the states as output from 646the solver with the +-p+ and +-t+ flags directly there. 647 6484. Added a 6th BeFS weight (see the +-asw+ flag) of the inverse of the number 649of cards not above parents. Using 650+./freecell-solver-range-parallel-solve 1 32000 1 -p -t -sam --method a-star -to 0123467589 -asw 1,0,0,0,0,1 -sp r:tf -mi 100000+ 651appears to be interesting. 652 6535. Allow test groups inside the +-to+ and +-dto+ flags to be ordered using 654the +=asw(…)+ function and its parameters, based on the BeFS (Best-first 655search) weights calculation. 656 6576. Added the +-l amateur-star+ (or +-l as+ for short) preset, based on the 658+=asw(…)+ ordering that is the fastest preset yet. 659 6607. Added the +-l micro-finance+ (or +-l mf+ for short) preset, based on the 6616th BeFS weight. 662 6638. Implement a Prune for games whose columns cannot be filled by any card 664(such as Baker’s Dozen), where moving the last card on a column to a 665different column is pointless. For more information, see 666https://groups.yahoo.com/neo/groups/fc-solve-discuss/conversations/topics/1121 . 667 6689. In +dbm_fc_solver+ and +depth_dbm_fc_solver+, implement the “DeBondt” 669encoding method for Freecell and Baker’s Dozen, which allows for an even more 670compact representation of the encoded states. 671 67210. The libfreecell-solver code is now 64-bit-enabled and many of the limits 673were converted to allow for 64-bit systems. 674 67511. Dropped support for Microsoft Visual C++ (+CL.EXE+) and other compilers 676that don't support C99/gnu99. 677 67812. Add +scripts/convert-dbm-fc-solver-solution-to-fc-solve-solution.pl+ 679to convert a solution output of the dbm_fc_solver to one compatible with 680fc-solve. 681 682Version 3.12.0: (12-Jun-2012) 683----------------------------- 684 6851. Add the +--show-exceeded-limits+ / +-sel+ flag that removes some ambiguity 686in the output. 687 6882. Fix invoking the solver with +--set-pruning r:tf+ in conjunction 689with +-opt+. 690 6913. Add the +-l three-eighty+ preset. 692 6934. Many +dbm_solver.c+ improvements including the implementations of kaztree 694and libavl2-derived backends, several major reductions of the memory 695consumption, and many code cleanups and bug fixes. 696 6975. Add support for building and testing the distribution in an out-of-tree 698build (e.g: 699+mkdir build ; cd build ; cmake -DFCS_WITH_SUITE=1 .. ; make ; make test+ 700). 701 7026. A new experimental +fcc_solver.c+ which aims to reduce memory consumption 703in exhaustive scans even further. 704 7057. Removed many #ifdefs from the code by creating common abstractions. 706 7078. Eliminate many GCC warnings with certain GCC compile flags. 708 709Version 3.10.0: (15-Jan-2012) 710----------------------------- 711 7121. Convert the references to the web-site and repository away from berlios.de, 713as it was announced it will become offline. 714 7152. Bug fix: correct the handling of foundations with values 0 (e.g: +H-0+, 716+S-0+ ). 717 7183. Bug fix: made the +-mi+/+--max-iters+ flag global for all instances. 719Previously, it affected only the last one. 720 7214. Add an experimental +delta_states.c+ implementation and 722+dbm_solver.c+ that uses it to drive a Freecell Solver scan with an on-disk 723database (currently Google LevelDB and Berkeley DB are supported). So far 724it seems that with a limited cache size, this does not scale too well. 725 7265. Add the experimental +pruner-main.c+ (not installed by default). 727 7286. Add support for generating "all_in_a_row" deals to 729+make_pysol_freecll_board.py+ . 730 7317. Many small optimizations and cleanups. 732 733Version 3.8.0: (01-Jul-2011) 734---------------------------- 735 7361. Fix the crashes when using +--trim-max-stored-states+. 737 7382. Add a man page generated by AsciiDoc instead of the token man page 739that was present previously. 740 7413. The number of states in the collection is now preserved if the verdict 742was unsolved. 743 7444. Add a +--solutions-directory+ argument to +test_multi_parallel.c+ . 745 7465. Fix the rpm spec - +%\{version\}+ instead of +%\{PACKAGE_VERSION\}+ . 747 7486. Add +scripts/parallel-range-solver-total+ to solve a range of deals in 749parallel by splitting them into chunks. 750 7517. Add +-DFCS_BUILD_DOCS=+ to CMake to avoid building documentation. 752 7538. Add a way to dump the valid outputs in 754+t/t/lib/Games/Solitaire/FC_Solve/CheckResults.pm+ to files. 755 7569. Add an environment flag to filter out the valgrind test when running 757+make test+. 758 75910. Many refactorings. 760 761Version 3.6.0: (01-Feb-2011) 762---------------------------- 763 7641. Now installing the +fcs_dllexport.h+ header file. It is needed for use 765of libfreecell-solver in third-party programs, so previously including 766+fcs_user.h+ did not work. 767 7682. Add the +--tracemem+ compile-time option for tracing the amount of RAM 769and time used by Freecell Solver as a function of the iterations count. 770 7713. Bug fix for incrementally increasing the limits. 772 7734. Add a modified version of kazlib's balanced binary search tree to the 774distribution so one will be available built-in. It can be used for both 775the states' storage and for the --rcs LRU cache. 776 7775. Revamped the various range solvers, while extracting common functionality 778into header files, functions and macros. 779 7806. Some relatively minor optimisations and code cleanups. 781 782Version 3.4.0: (05-Dec-2010) 783---------------------------- 784 7851. Compiling without card flipping on by default now (finally it makes 786the code a little faster instead of slower.) 787 7882. Added the +--set-pruning+ / +-sp+ flag to turn on pruning. This sets the 789Horne play prune of moving cards that can no longer be used to build other 790cards upon to the foundations. 791 7923. New preset +-l enlightened-ostrich+ / +-l eo+ based on it, which is 793significantly faster than +-l foss-nessy+. Amadiro, who helped me with the 794Black Hole Solitaire solver picked the name. 795 7964. New preset +-l maliciously-obscure+ / +-l mo+ for short solutions. 797 7985. There's now an option to set a different hard-coded freecells' num at 799compile-time. 800 8016. Add an experimental flag of "--trim-max-stored-states". Currently may 802crash the solver. (See the +Known_Bugs.txt+ file). 803 8047. Added support for -fwhole-program and static linking the Freecell Solver 805executables. This yielded another speed boost. 806 8078. Forward ported the Google Dense Hash / Google Sparse Hash support for 808the positions and columns. 809 8109. Forward ported COMPACT_STATES. 811 81210. Add the +--ms+ / +-M+ flags to +make_pysol_freecell_board.py+ to generate 813MS Deals even for the higher numbers (> 32,000 which are not used for that in 814PySol and PySol FC). 815 81611. Add a compile-time option to use RCS-like states storage: 817http://fc-solve.shlomifish.org/to-do.html#rcs_state_storage - this conserves 818a lot of RAM. 819 82012. Add a flag to get rid of visited_iter. 821 82213. Add FCS_WITHOUT_DEPTH_FIELD to get rid of depth if fcs_state_extra_info_t. 823 82414. Convert num_active_children to an unsigned short. 825 82615. Forward ported the FCS_STATE_STORAGE_LIBAVL2_TREE to the new fc-solve and 827the FCS_RCS_STATES. It seems to scale much better for FCS_RCS_STATES than 828FCS_STATE_STORAGE_INTERNAL_HASH. 829 83016. Converted the allocation of the BrFS queue items to alloc.{c,h} . This 831wastes less memory. 832 83317. Implement FCS_WITHOUT_LOCS_FIELDS . This removes the fc_locs / stack_locs 834from the extra_info's to conserve more space. It also makes solving faster. 835 83618. Reduced the size of num_moves in move_stack_t. 837 83819. Add support for the internal compact moves to the Tatzer script. 839 84020. Added /trunk/fc-solve/scripts/automatic-build-for-982-2fc-solving/Makefile 841which automatically builds and runs fc-solve for solving the two-freecell MS 842deal No. 982. 843 84421. Updated the cmake configuration to use lib${LIB_SUFFIX} so it can be 845built on some 64-bit systems. 846 84722. Many small optimisations. 848 849Version 3.2.0: (14-Jul-2010) 850---------------------------- 851 8521. Add the +--depth-tests-order+ (or +-dto+ for short) flag that allows 853varying the tests' order based on the depth. This gives way for interesting 854(and faster) searches. 855 8562. Add the +the-iglu-cabal+ , +foss-nessy+ and +tea-for-two+ presets. 857The latter is optimized for two freecell deals. 858 8593. Fixed a bug where when specifying the +--max-iters+ flag it did not 860yield an +FCS_STATE_SUSPEND_PROCESS+ return code. 861 8624. Fix a crash when using a --prelude with a soft thread with a NULL name. 863 8645. Add support for Google's Dense Hash for the states' storage and the stacks 865storage. It does not perform as well as our own custom hash. 866 8676. Internals: defined a boolean data type +fcs_bool_t+ with two constants 868+TRUE+ and +FALSE+ , so it can be semantically different. 869 8707. Some optimizations. 871 872Version 3.0.0: (23-May-2010) 873---------------------------- 874 8751. Implement the flares API (see +USAGE.txt+), which allows running several 876alternative scans and then picking up the one with the shortest solution. 877 8782. Add the +-l children-playing-ball+ and +-l sentient-pearls+ presets 879that optimize on solution length (based on flares). 880 8813. Add +scripts/tag-fc-solve-release.bash+ to tag using svn. 882 8834. Updated the CMake version in the build-on-win32.pl script. 884 8855. Add +scripts/stat-analysis-2.pl+ which is a faster version of the 886script for statistical analysis of the solution length. 887 8886. Refactored the +split_cmd_line.c+ module. 889 8907. Renamed many "a_star" and "A*" occurrences in the code to "BeFS", because 891what was thought to be the A* scan was actually Best-First-Search. 892 8938. Convert the soft-DFS tests' order to a list-of-lists-of-tests, and no 894longer recalculating the tests_list on any recycling. 895 896Version 2.42.0: (27-March-2010) 897------------------------------- 898 8991. Add the +-o+ / +--output+ flag to +fc-solve+ to output to a file. 900 9012. Now installing the new executables ( freecell-solver-fc-pro-range-solve , 902freecell-solver-multi-thread-solve , freecell-solver-range-parallel-solve , 903etc.) by default. 904 9053. Bug fix: added a missing break after a case in cmd_line.c. 906 9074. Fixed the Makefile's "pdfs" target. 908 9095. Converted many +char *+ data types in the interface to 910+freecell_solver_string_t+, which can be +const char *+. The default is 911+const char *+. 912 9136. +pqueue.h+ was converted to the MIT/Expat license, with the permission of 914its author. Freecell Solver is now fully MIT/Expat. 915 9167. Fixed a Best-First-Search recycling memory leak that was reported by 917valgrind. 918 9198. Bug fix: now continuing a solution if a is_a_complete_scan thread terminates 920with the scans synergy set to +dead-end-marks+. This was done to avoid states 921reported as falsely unsolvable such as MS 254,076 with +-l by+. 922 9239. Added a forking range solver - not installed by default. See: 924https://groups.yahoo.com/neo/groups/fc-solve-discuss/conversations/topics/1038 . Sometimes 925it yields somewhat better performance. 926 92710. Disabled tcmalloc in debug mode because it messes things up. 928 92911. Various internals cleanups and optimizations. 930 931Version 2.40.0: (27-Jan-2010) 932----------------------------- 933 9341. make_pysol_freecell_board.py now has support for "Black Hole" dealing. See: 935http://www.shlomifish.org/open-source/projects/black-hole-solitaire-solver/ . 936 9372. Added the "Scan:" header to indicate the current scan / soft-thread 938when using the -s -i flags. 939 9403. *Security*: Fixed a string overflow bug in +cmd_line.c+ with the +-asw+ 941weights. As a result of this problem, Freecell Solver can write several NUL 942characters ('\0') to after the string specifying the command line argument. 943+ 944Now unspecified +-asw+ are set to 0. 945 9464. Fixed an off-by-1 iterations count report when a board was found to be 947solvable. 948 9495. iter_handler is now applied globally across all instances. 950 9516. Add the +-l blue-yonder+ / +-l by+ preset that is extra fast at solving 952the Microsoft 32,00 based on running the optimization algorithm: 953+ 954https://groups.yahoo.com/neo/groups/fc-solve-discuss/conversations/topics/1027 . 955 9567. Added a compile-time option to reduce the size of the internal move token 957structs. This may make memory consumption smaller, but definitely makes 958Freecell Solver run slower, so it is off by default. 959 960Version 2.38.0: (29-Dec-2009) 961----------------------------- 962 9631. Made sure that one can build Freecell Solver outside the source directory 964without needing AsciiDoc. (That was a major build-system problem). 965 9662. Add a missing newline at the end of one of the lines of the help. 967 9683. Add the "-F"/"--pysolfc" flag to board_gen/make_pysol_freecell_board.py 969for generating PySolFC deals. 970 971Version 2.36.0: (27-Nov-2009) 972----------------------------- 973 9741. Converted the +README+ / +USAGE+ / +NEWS+ etc. files to 975http://www.methods.co.nz/asciidoc/[AsciiDoc] . The sources are in .txt 976and they are copied to their non-.txt files. The PDF build is still a bit 977broken due to a strange CMake problem. 978 9792. Simplified the test suite and benchmarking process. (Thanks to 980http://pythack.com/[LECA Dimitri (Pythack)] for the inspiration). 981 9823. Many documents were otherwise enhanced with examples and other enhancements. 983 9844. Inlined the hash comparison and several other functions in the code. 985This made the code a little faster. 986 9875. Clarified the documentation for broken versions of CMake (cmake-2.6.2) 988like the one that ships with some versions of Ubuntu. 989 9906. Fixed the tests for a valgrind regression. 991 992Version 2.34.0: (10-Jul-2009) 993----------------------------- 994 9951. Added generation and installation of a libfreecell-solver.pc pkg-config 996file. 997 9982. Added the preset "toons-for-twenty-somethings". 999+ 1000It is an atomic moves preset that can solve the MS 32K deals. 1001 10023. Re-implemented the missing --next-instance/-ni flag. 1003 10044. Added the "-l the-last-mohican"/"-l tlm" theme for Simple Simon 1005that can solve more boards. 1006 10075. Now can rpmbuild -tb a tar.bz2. 1008 10096. Added information on running the test suite to the "HACKING" file. 1010 10117. Added a Python ctypes example under examples/ . 1012 10138. Added support for Sun Studio to Makefile.gnu. the -fast flag yields worse 1014results than gcc. 1015 10169. Fixed some typos in the --help and the "USAGE" files. 1017 101810. Some internal changes: 1019 - The soft_thread structure now uses a union. 1020 - Added some tests to the command line-like argument splitting. 1021 - fixed a minor bug with it. 1022 1023 1024Version 2.32.1: (25-Jun-2009) 1025----------------------------- 1026 10271. Added a "#define BUILDING_DLL 1" so fcs_dllexport.h will work fine on 1028Microsoft Visual C++. 1029 10302. Normalised the DLLEXPORT modifiers. 1031 10323. Some fixes to the CMake build system: 1033 - CHECK_C_COMPILER_FLAG now uses a different variable for each flag, 1034 since the variable was cached. 1035 - tcmalloc is now truly optional. 1036 10374. Moved the declaration of the strncasecmp(a,b,c) macro for WIN32 systems 1038to before its first use. 1039 10405. All of this was done to fix many build/compilation problems. 1041 1042Version 2.32.0: (24-Jun-2009) 1043----------------------------- 1044 10451. Added meaningful heading comments to the *.c and *.h files where they 1046were absent. 1047 10482. Many small memory/speed optimisations. 1049 10503. Removed a lot of unnecessary code and merged a lot of code. Used: 1051scripts/find-ids.rb for finding uncommonly occurring identifiers. 1052 10534. Converted many macros to inline functions. 1054 10555. Now calculating the bit-width of the 'int' data type in the CMake version. 1056There's a fallback logic for it in config.h. 1057 10586. Extracted empty_two_cols_from_new_state() in freecell.c. 1059 10607. Restored the max_depth functionality. Currently not working very well. 1061 10628. Now supporting inline on non-GCC compilers using CMake. 1063 10649. Made many functions that were used only once or twice inline. 1065 106610. Added the --iters-update-on option to the threaded range solver. 1067 106811. Fixed some CMake bugs (especially wrong compiler flags to check). 1069 107012. Optionally link with Google's tcmalloc, which yields better performance 1071(especially for the multi-threaded solver). 1072 107313. Added the support for DLLEXPORT to not export fc_solve_* from the DLL. 1074This reduces the size of the .so / .dll considerably. 1075 1076 - Added -fvisibility=hidden to the build. 1077 107814. Got rid of using preset.c for FCS_FREECELL_ONLY. 1079 1080Version 2.30.0: (07-Jun-2009) 1081----------------------------- 1082 10831. Added the presets "gooey-unknown-thing", "sand-stone" and "slick-rock" 1084to minimize the resultant solutions' length. 1085 10862. The Freecell Solver states storage and columns storage can now be 1087made to use any of the trees provided by libavl2 1088( http://www.stanford.edu/~blp/avl/ ) . The results seem to be somewhat 1089slower than libJudy and much slower than our own custom hash. 1090 10913. Fixed the auto-moves calculation in fc_pro_iface.c . 1092+ 1093It was too pessimistic before, and had an off-by-one error. A card 1094can be automatically moved if all foundations of opposite color are -2 1095and the opposite foundation is -3. 1096 10974. Now one can exclude the Simple Simon-related move routines and logic from 1098the binaries during compilation. See "FCS_DISABLE_SIMPLE_SIMON" in the 1099CMake configuration. 1100 11015. Added scripts/measure-binaries-sizes.rb to measure the sizes of the binaries 1102in various configurations. 1103 11046. Merged Makefile.icc , Makefile.tendra , Makefile.tcc , Makefile.pcc 1105and Makefile.lcc into Makefile.gnu. Which compiler can be specified using 1106the Makefile.gnu COMPILER variable. 1107 11087. Added the threaded_range_solver "--worker-step $N" argument. 1109+ 1110What is does is allow allocating uniform quotas to the different threads 1111to process. So far increasing the quotas from 1 to 16 does not seem to improve 1112the situation. 1113 11148. Fixed many warnings reported by the Intel C++ compiler (icc) 1115 11169. Re-organized the code - renamed many files, moved declarations and 1117definitions to different files, and did a lot of overhaul. 1118 111910. Got rid of FCS_DEBUG_MOVES - it was never used and became obnoxious. 1120 112111. Added scripts/verify-simple-simon-range.pl and 1122scripts/simple-simon-stats-analysis.pl . 1123 112412. Added a regression test for verifying the validity of a 1125Simple Simon solution. 1126 112713. Fixed Makefile.gnu to propagate CFLAGS to CREATE_SHARED. 1128 112914. Implemented FCS_WITHOUT_CARD_FLIPPING to exclude a lot of card flipping 1130code at build time. It is disabled by default because strangely it seems 1131to make the execution speed worse. 1132 1133Version 2.28.1 (18-May-2009) 1134---------------------------- 1135 11361. Added a fix to an off-by-one-error in alloc.h that caused a segfault 1137on x86-64. (Thanks to Ido Kanner). 1138 1139Version 2.28.0 (17-May-2009) 1140---------------------------- 1141 11421. Several cleanups, refactoring and optimizations - especially to the 1143freecell.c file. 1144 11452. Converted more move functions to positions_by_rank. 1146 11473. Changed the hash function from Bob Jenkins's to perl 5's and inlined it. 1148These were substantial optimizations. 1149 11504. Unified many macros in state.h instead of having duplicate definitions 1151for every state type. Verified that the alternative state types ( 1152COMPACT_STATES and DEBUG_STATES) build correctly. 1153 11545. Added the optional -Werror=implicit-function-declarations flag to the 1155compiler. 1156 11576. Added tests for some Simple Simon boards. 1158 11597. Created an fcs_cards_column_t type and converted the internals to use it. 1160 11618. Added the threaded range solver - freecell-solver-multi-thread-solve . 1162It performs better than the serial one on my machine. It is built only if 1163pthreads (POSIX threads) is found. 1164 11659. Add the HACKING file with some information on benchmarking. 1166 116710. Renamed the configuration script to "Tatzer" so people who are used 1168to Autoconf's "./configure ; make ; make install" won't use it. 1169 117011. Got rid of all the max_num_$something in the dynamically-growing 1171arrays because num_$something is enough to tell where the limit is and grow it 1172if necessary. There's now a lot of bit-fiddling logic to grow the 1173dynamically-growing arrays when necessary. 1174 117512. Added support for adding the gcc -fomit-frame-pointer and -march=$CPU_ARCH 1176flags. 1177 117813. Added the following makefiles for alternative Linux compilers: 1179+ 1180 - Makefile.icc 1181 - Makefile.tcc 1182 - Makefile.tendra 1183 - Makefile.lcc 1184 - Makefile.pcc 1185+ 1186So far only Intel's icc and TenDRA produce working executables that 1187pass all the tests. The code had to be adapted to be compiled using TenDRA. 1188 118914. Added scripts/fcs-win32-create-package.pl that provides some guidance 1190in creating a package under Windows. 1191 1192Version 2.26.0 (27-Apr-2009) 1193---------------------------- 1194 11951. Now Freecell Solver can be compiled with gcc-2.95 (again). It was needed 1196to test it with this old gcc version. 1197 11982. Some fixes to CMakeLists.txt. 1199 12003. fcs_hash.c: now the secondary hash value calculation is optional 1201and should be enabled explicitly. Without it, Freecell Solver is faster: 1202 - https://groups.yahoo.com/neo/groups/fc-solve-discuss/conversations/topics/941 1203 12044. Surgically removed fcs_hash.c's "optimizing_for_cache" which made a small 1205speed improvement. 1206 - https://groups.yahoo.com/neo/groups/fc-solve-discuss/conversations/topics/942 1207 12085. Made t/Makefile generated by CMake, so the tests can be run from the 1209packages source distribution. (Previously t/Makefile was excluded, and 1210since it was not generated, was not available). 1211 12126. Eliminated BUILD_TYPE=release warnings. 1213 12147. Optimized fc_solve_sfs_move_freecell_cards_on_top_of_stacks() . This 1215involved a lot of refactoring and re-structuring of the internals. Now 1216Freecell Solver is significantly faster. 1217 - https://groups.yahoo.com/neo/groups/fc-solve-discuss/conversations/topics/943 1218 12198. Fixed the testing targets and the building of the rpm from the tar.gz 1220archive. 1221 1222Version 2.24.0 (18-Apr-2009) 1223---------------------------- 1224 12251. Many code cleanups and internal changes. Reduced the size of the library 1226considerably. 1227 12282. Added Makefile.llvm to build LLVM bitcodes from the Freecell Solver 1229sources. So far, they seem significantly slower than the native code compiled 1230using gcc-4.3.2. 1231 12323. Implemented "cmake -DCMAKE_BUILD_TYPE=profile" . Can be activated using 1233"./configure --profile" 1234 12354. Now build (but not installing) freecell-solver-fc-pro-range-solve , which 1236runs a range of MS-Freecell / Freecell Pro boards using the solver and outputs 1237the number of FCS moves, the number of FC-Pro moves, and the FC-Pro moves 1238in standard notation. 1239 12405. Fixed some bugs (crashes, leaks, etc.) when running -opt on a range 1241of boards (or recycling instances with -opt in general). 1242 12436. Some CMake / Build system cleanups and improvements. Among them, trimmed 1244the distribution from unnecessary files. 1245 1246Version 2.22.0 (31-Mar-2009) 1247---------------------------- 1248 12491. Various improvements to the CMake build process: 1250 - Updated freecell-solver-config 1251 - Fixed the building if build from a different directory. 1252 (e.g: mkdir build ; cd build ; cmake ..) 1253 - Now also building a static library by default. There's a cmake option 1254 to trigger it off. 1255 - Thanks to RISKO Gergely (the maintainer of the Freecell Solver Debian 1256 package) for a contributed patch. 1257 12582. Fixed the rpmbuild -tb process on Mandriva Linux Cooker (and 1259possibly other systems). 1260 12613. Removed some old, unnecessary and/or no-longer-working files. 1262 12634. Converted the package from the Public Domain to the MIT/Expat Licence 1264( http://en.wikipedia.org/wiki/MIT_License ). This change was done due to 1265the many problems with licensing source code under the public domain: 1266 1267 - http://linuxmafia.com/faq/Licensing_and_Law/public-domain.html 1268 1269Version 2.20.0 (26-Mar-2009) 1270---------------------------- 1271 12721. Updated the "NEWS" file (this file) with all the previous versions up 1273to 0.4 (the first release after the first initial release). 1274 12752. Many fixes to the Win32 NSIS Package creation process of CMake/CPack . 1276The NSIS package is now built and installed properly. 1277 12783. Fixed a bug with the recycling logic of the optimization thread. 1279+ 1280This influenced "freecell-solver-range-parallel-solve 1 2 1 -opt" among other 1281things. In the process, I refactored the code a bit after trying to follow 1282some false leads. 1283 12844. Fixed the --prefix flag in ./configure to be treated as a string instead 1285of a boolean. 1286 12875. Fixed the running of the executables under a specified PREFIX 1288( http://www.cmake.org/Wiki/CMake_RPATH_handling ) 1289 12906. Minor changes to "README", "INSTALL" and "USAGE". 1291 1292Version 2.18.0 (19-Mar-2009) 1293---------------------------- 1294 12951. Added the FCS_FREECELL_ONLY compile-time flag to hard-code the settings 1296for Freecell and thus allow faster run-time. On a Pentium 4-2.4GHz machine 1297running Mandriva Linux Cooker, this allows one to solve the Microsoft 32,000 in 1298194.56353 seconds ( 164 deals / second ) instead of 1299228.84 seconds for the generic version ( 140 deals / second ). 1300 13012. Fixed using libredblack ( http://libredblack.sourceforge.net/ ) for states 1302and stacks storage. (Compile-time options) 1303 13043. Added an option to use libJudy ( http://judy.sourceforge.net/ ) for states 1305and stacks storage. Yields better performance than libredblack, but worse 1306than the internal hash. 1307 13084. Added the -Wall by default for gcc in CMake. 1309 13105. Added the boards target to generate 24.board and 1941.board. 1311 13126. Updated the TODO file. 1313 13147. Added previous NEWS items for previous versions (in this file). 1315 13168. Now documenting the --version flag in USAGE. 1317 13189. Added an experimental ./configure convenience script (written in 1319Perl) to run CMake using some configuration options. NOTE: Please don't 1320use it to build packages. 1321 132210. Added "scripts/time-fcs.pl" to help time a 1323freecell-solver-range-parallel-solve dump. 1324 132511. Got rid of the hard_dfs() scan. It is still accepted as an argument, but 1326is now using the soft_dfs() routines instead. 1327 132812. Many internal refactorings, cleanups tweaks and fine-tunings. 1329 133013. Moved away change_ver.sh to scripts/old/change_ver.sh - it does not 1331seem to be used any longer. 1332 1333Version 2.16.0 (15-Mar-2009) 1334---------------------------- 1335 13361. Made sure the indexes of the iterations when the "-s -i" flags are specified 1337are consecutive. Previously, they were much more inconsistent. 1338 13392. (Internals) Split ptr_state_with_locations_t into ptr_state_t (the key) 1340and ptr_state_extra_info_t (the value). Not all code inside the #ifdef's 1341(like the libavl / libredblack code) was ported to use it instead. 1342 1343Version 2.14.0 (25-Jan-2009) 1344---------------------------- 1345 13461. Fixed the compilation with profiling information in Makefile.gnu (should be 1347of concern only to developers). 1348 13492. Optimized move_stack_cards_to_different_stacks, yielding a substantial 1350speed increase. 1351 13523. Converted the identifiers from starting with freecell_solver_ to 1353starting with fc_solve_ , which is shorter and saner. 1354+ 1355freecell_solver_user_ is still used in the API in order to not break 1356compatibility. 1357 13584. Made sure the effect of the "--sequence-move unlimited" option is not 1359dependent on other options, so the sequence move will always be unlimited. 1360(Thanks to larrysan for reporting this bug). 1361 13625. Fixed run-tests.pl (and as a result also ctest -V and make test) to 1363run properly after a raw unpacking. 1364 1365Version 2.12.0 (10-Dec-2008) 1366---------------------------- 1367 13681. A New Configuration and build system based on CMake 1369( http://www.cmake.org/ ) which results in faster configurations 1370and builds, and a much reduced archive size. 1371 13722. There's a new suite of automated tests. See the file README for details 1373how to run them. 1374 13753. There's a new --version flag that prints the version of the library. 1376 13774. A speed optimization to the command line processing based on a radix-tree. 1378 13795. Many bug-fixes since 2.8.0. (Released as 2.8.x). 1380 1381Version 2.8.0 (28-Sep-2002) 1382--------------------------- 1383 13841. Better documentation and help screens. See: 1385+ 1386http://freshmeat.net/articles/time-to-rethink-your-help-flag 1387 13882. A preset system - see the "-l" flag in USAGE. 1389 13903. An option to read parameters from files. See "--read-from-file" in USAGE. 1391 13924. Finally, it is now possible to run one instance of the solver after the 1393other in case the other one has returned a negative verdict. This is useful 1394for example to run an atomic moves preset after a meta-moves one, as the 1395latter cannot guarantee an accurate false verdict. 1396 1397Version 2.6.0 (12-Jul-2002) 1398--------------------------- 1399 14001. Atomic moves and some atomic moves presets have been added. Solving 1401using atomic moves guarantees that there will be no false negatives, but 1402is slower than the Meta-moves-based presets. (At least for now). It also 1403yields less interesting solutions. 1404 14052. There is now a "--prelude" switch (see USAGE) that allows running a 1406static order of quotas at the beginning of the scan for the participating 1407soft threads. It makes constructing faster solving presets easier, especially 1408after utilising this code: 1409+ 1410http://code.google.com/p/fc-solve/source/browse/#svn%2Ffc-solve%2Ftrunk%2Ffc-solve%2Fpresets 1411+ 1412Also see the "--st-name" option. 1413 14143. The PySol "Fan" game preset was added to make_pysol_freecell_board.py and 1415to Freecell Solver itself. Note that the game is played with 18 1416columns/stacks , so Freecell Solver will usually need to be recompiled. 1417 14184. Several other command line options: 1419+ 1420 - "--reparent-states" 1421 - "--calc-real-depth" 1422 - "--optimization-tests-order" 1423 - "--scans-synergy" 1424+ 1425See the "USAGE" file for more information. 1426 14275. The internal code has undergone several speed boosts that made Freecell 1428Solver much faster. Now the INDIRECT_STACK_STATES is a bit faster than 1429COMPACT_STATES. 1430 14316. Updated the TODO list. 1432 1433Version 2.4.0 (29-Mar-2002) 1434--------------------------- 1435 14361. Now several scans are to operate on the same states' collection. This is 1437done using a mechanism called "soft threads", which is switched in user-land 1438and does not require system multi-threading. In the file "USAGE" see: 1439+ 1440 - "-nst" / "--next-soft-thread" 1441 - "-nht" / "--next-hard-thread" 1442 - "-step" / "--soft-thread-step" 1443 14442. fcs_cl.h was included in the RPM .spec. 1445 1446Version 2.2.0 (18-Feb-2002) 1447--------------------------- 1448 14491. Freecell Solver's version is now kept in the file ver.txt 1450 14512. Added manual pages symbolic links for the following command-line board 1452generators: 1453+ 1454 - make-gnome-freecell-board 1455 - make_pysol_freecell_board.py 1456 - make-aisleriot-freecell-board 1457 - pi-make-microsoft-freecell-board 1458 14593. Moved more declarations of functions to header files (ending with .h) 1460 14614. Added some compiler-optional inline annotations for functions. 1462 14635. The identifiers of the library are now all residing under freecell_solver_ 1464 14656. New flag: 1466+ 1467 - "--max-stored-states" 1468 14697. The package can now be built as an RPM for Red Hat Linux and compatible 1470systems by running rpmbuild -ta on the archive. 1471 14728. Several speed-ups. 1473 1474Version 2.0.0 (19-Dec-2001) 1475--------------------------- 1476 14771. Added some presets for the PySol games "Beleaguered Castle", "Citadel" 1478and "Streets and Alleys". 1479 14802. Re-factoring of the scans code to make it simpler. 1481 14823. Added many functions to the external API. 1483 14844. fc-solve now uses it, so it is fully loosely-coupled with the library 1485it is linked against. 1486 14875. Added a randomized DFS scan (with a user-defined seed). 1488 14896. Win32 Makefile can now generate a working DLL. 1490 1491Version 1.10.0 (02-Oct-2001) 1492---------------------------- 1493 1494Added support for solving deals of "Simple Simon" in addition to 1495all the freecell-like variants that it could solve before. 1496 1497Version 1.8.0 (31-Aug-2001) 1498--------------------------- 1499 15001. A new build and configuration process based on the GNU Autotools (Autoconf, 1501Automake and libtool). This allows portably build shared and static libraries 1502and stuff like that. 1503 15042. The GNOME AisleRiot board-generation program can generate the boards of 1505the more Solitaire variants which are supported by Freecell Solver. 1506 1507Version 1.6.0 (11-Apr-2001) 1508--------------------------- 1509 15101. Freecell Solver now has a solution optimization scan. Check it out 1511by adding the "-opt" flag. 1512 15132. Many comments were added to the code, and you are welcome to go over 1514it and see if you understand everything that goes on there. If you don't, 1515contact me and I'll add some more comments. 1516 15173. Several speed optimizations were done in the internal hash, so I think 1518it should run at least a little faster. 1519 1520Version 1.4.0 (07-Feb-2001) 1521--------------------------- 1522 15231. Many fixes for bugs and memory leaks. 1524 15252. A Soft-DFS scan - Depth-First Search that does not use procedural recursion 1526was introduced. 1527 15283. A New Best-first Search Scan (called A* in the code and documentation) was 1529introduced. 1530 15314. A New Breadth-First-Search (BFS or BrFS) scan was introduced. It's not 1532very practical. 1533 1534The choice between all those scans can be specified at run-time using 1535command-line arguments. 1536 1537Version 1.2.0 (21-Dec-2000) 1538--------------------------- 1539 15401. Several moves were improved or added, so it can solve more layouts. 1541 15422. A more robust command-line argument handling, so less segfaults can be 1543expected if it's improperly used. 1544 1545Version 1.0.0 (19-Nov-2000) 1546--------------------------- 1547 15481. Added support for solving more game types. 1549 15502. Can be compiled so it will be less memory intensive (INDIRECT_STACK_STATES). 1551 15523. There's an API for use by third-party developers. It supports 1553suspending a solution process and resuming it from its last position. 1554 15554. Several random bug-fixes. 1556 1557Version 0.10.0 (09-Oct-2000) 1558---------------------------- 1559 15601. Support was added for several Solitaire variants besides Freecell, such as 1561Forecell, Seahaven Towers and Eight Off. 1562 15632. It now can emits the moves themselves, instead of just the intermediate 1564solutions. 1565 15663. Several bug-fixes. 1567 1568Version 0.8.0 (28-Aug-2000) 1569--------------------------- 1570 15711. Some bug-fixes. 1572 15732. Support for a variable number of freecells, columns, and cards per column. 1574 15753. Board generators for Microsoft Freecell, Freecell Pro and PySol. 1576 15774. An option to use the balanced binary tree implementations of libavl 1578( http://adtinfo.org/ ), glib ( http://en.wikipedia.org/wiki/GLib ), or 1579libredblack ( http://libredblack.sourceforge.net/ ). Using them makes 1580Freecell Solver about 33% faster. 1581 15825. Support for using "T" instead of "10" in board input/output. 1583 15846. Improved Documentation. 1585 1586Version 0.6 (28-Jul-2000) 1587------------------------- 1588 15891. An extra movement that allows Freecell Solver to solve some boards which 1590it could not solve previously. 1591 15922. The order of the stacks and freecells is preserved throughout the 1593solutions. 1594 15953. There is now an option to limit to a certain number of iterations (so 1596Freecell Solver will stop before it consumes too much memory) 1597 15984. Specify the order of the moves that will be tested. Usually, a test 1599order can be found that will solve a given board really quickly. 1600 1601Version 0.4 (06-Jun-2000) 1602------------------------- 1603 16041. Three major code optimizations. Freecell Solver now runs much faster. 1605 16062. Freecell Solver is now able to start solving from a non-initial board. 1607