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