Freecell Solver's Previous News Items

26-Jun-2013: Freecell Solver 3.20.0 was Released: Major Simple Simon Optimisations

Freecell Solver version 3.20.0, has been released. Freecell Solver 3.20.0 is available in the form of a source archive, from the download page. Freecell Solver is an open source framework (library and some command line applications), for automatically solving several variants of card Solitaire / Patience games, including Freecell.

The highlights of this version are some major optimisations to the solving code of Simple Simon, as well as many code cleanups, refactorings and smaller optimisations. Furthermore, the “qualified-seed-improved” preset was added, which yields shorter solutions.


See comments and comment on this.

30-May-2013: Freecell Solver 3.18.0 was Released: JavaScript port

Freecell Solver version 3.18.0, has been released. Freecell Solver 3.18.0 is available in the form of a source archive, from the download page. Freecell Solver is an open source framework (library and some command line applications), for automatically solving several variants of card Solitaire / Patience games, including Freecell.

The highlights of this version are the new port to JavaScript, courtesy of the wonderful emscripten compiler from LLVM to JavaScript, that allows Freecell Solver to run inside modern browsers, as well as the fact that the test suite and the relevant now work on 32-bit systems (previously they only worked on 64-bit ones).


See comments and comment on this.

01-Apr-2013: Freecell Solver Enterprises™ Acquires Google Inc.

1 April, 2013, Tel Aviv, Israel: Due to the spectacular commercial success of Freecell Solver Enterprises™’s Enterprise Edition and its Webscale™ edition, we have amassed quite a bit of cash in the bank, so we decided to make a small but important strategical acquisition. As a result, Freecell Solver Enterprises™ is proud to announce its upcoming acquisition of Google Inc., which will result in an exciting synergetic merger.

Some of the upcoming changes would be replacing Google’s tech support (which is notoriously bad) by Freecell Solver Enterprises™’s world-famous and superb tech support (as detailed in the essay “Seven steps to remarkable customer service” by Joel on Software), as well as integrating Google search into Freecell Solver™ for an enhanced experience in solving Freecell. We are also planning on creating a separate YouTube top-level category for card Solitaire-related videos (including screencasts and presentations).

We are sure that the upcoming acquisition is going to allow Freecell Solver Enterprises™ to further its competitive edge, and allow us to have even more significant growth, which will in turn allow us to make even more significant acquisitions. As our CTO, Shlomi Fish, notes: “good times are coming.”.

Soon, people will say “Let’s Freecell Solver Enterprises™ Superheroic Web Search™ it!” instead of “Let’s Google it!”, for an exciting Web 3.141592™ experience.

See comments and comment on this.

10-Dec-2012: Freecell Solver 3.16.0 was Released + New Screencast

Freecell Solver version 3.16.0, has been released. Freecell Solver 3.16.0 is available in the form of a source archive, from the download page. Freecell Solver is an open source framework (library and some command line applications), for automatically solving several variants of card Solitaire / Patience games, including Freecell.

This new release took about a month to prepare, and also contains less profound changes than the previous release, but still quite a lot to look for. It features the -l micro-finance-improved and -l qualified-seed presets, which improve upon the average solution length (at the expense of speed). The --flares-choice flag was added and one can specify --flares-choice fcpro to choose based on the length of the Freecell Pro moves. Another additional flag is --flares-iters-factor which multiplies the time the flares run at by a factor for a speed/solution-length trade-off.

Finally, the individual flares are now recycled and their memory is reused when they are no longer needed which yields a RAM optimisation in certain cases.

More information about all these can be found in the distributed documents of Freecell Solver.

In addition to all that, a new screencast of PySolFC solving Freecell using Freecell Solver is now available on YouTube. Make sure you expand the details for all the credits of the software and other material that was used for its creation.

Enjoy and happy holidays.

See comments and comment on this.

04-Nov-2012: Freecell Solver 3.14.1 was Released

Freecell Solver version 3.14.0, shortly followed by Freecell Solver 3.14.1, which fixed a build problem on Microsoft Windows, have been released. Freecell Solver 3.14.1 is available in the form of a source archive, and a Win32 self-installing executable, from the download page. Freecell Solver is an open source framework (library and some command line applications), for automatically solving several variants of card Solitaire / Patience games, including Freecell.

This release features several new features: we added a 6th Best-First-Search weight of the inverse of the number of cards not above parents, which has proven useful. We now also allow test groups inside the --tests-order and --depth-tests-order with the random-dfs scan to be ordered using the function =asw(…) based on those BeFS weights.

As a result, the preset -l amateur-star or -l as for short has been added, that uses that and is our fastest preset yet. Another new preset is -l micro-finance (or -l mf for short), which yields especially short solutions.

There are also some not-as-major features: input boards can now contain a leading colon (":") at the beginning of the line of columns, so they can be copy-and-pasted directly from the output of fc-solve with the -p flag. The dbm_fc_solver and depth_dbm_fc_solver now store the positions more compactly (which aided in researching two-freecell deals), and the core libfreecell-solver code was made more 64-bit enabled and many of the limits were converted to 64-bit friendly ones.

A final note: we have dropped support for building Freecell Solver with Microsoft Visual C++ and other non-GCC compatible compilers, which do not support the newer C standards, and other useful features of GCC. Building Freecell Solver with GCC, clang and other compatible compilers will be continued to be supported on Microsoft Windows as well as on Linux and other UNIX-like systems.

More information about all these can be found in the distributed documents of Freecell Solver.


See comments and comment on this.

02-Sep-2012: Two Freecell Solvability Report for the First 400,000 Deals

With some help from some people on the fc-solve-discuss list and off the list (namely Amadiro from the University of Oslo and someone else that I met on IRC , I ran my solvers on the first 400,000 Windows Freecell deals with only two available freecells to see how many of them can be solved.

Here is the report:

Start Index End Index Solved Impossible Intractable
1 32,000 25,381 6,619 0
32,001 50,000 14,302 3,698 0
50,001 100,000 39,775 10,225 0
100,001 400,000 238,415 61,584 1 (No. 384243)
Total 317,873 82,126 1

So about 79.47% of the deals can be solved and the rest are impossible. The only intractable deal that none of my solvers could yield a verdict for is No. 384,243, and it spans a very large number of states:

  • The dbm_fc_solver got into Reached 12,821,000,000 ; States-in-collection: 13,620,999,440 before it failed to produce more results due to a limitation of the hardware where it was deployed on.

  • The depth_dbm_fc_solver yielded this:

    Reached 13,763,700,000 ; States-in-collection: 16,226,294,490 ; Time: 1345126456.520408 Queue Stats: inserted=16,226,294,490 items_in_queue=2,462,594,490 extracted=13,763,700,000

    with a curr_depth of 38. However, that solver may have some yet undiscovered bugs.

So what's next? I’d like to investigate some ways to scale to a larger number of states, perhaps by creating a distributed solver. A Google search for distributed breadth first search yields some results:

I hope you enjoy the statistics for the time being.

See comments and comment on this.

13-Jun-2012: Freecell Solver 3.12.0

Freecell Solver version 3.12.0 has been released. It is available in the form of a source archive from the download page. Freecell Solver is an open source framework (library and some command line applications), for automatically solving several variants of card Solitaire / Patience games, including Freecell.

The first item to note is that the URL of its site changed from under * to, and that there is a redirect in place. Moreover, we have switched the version control system from one based on Subversion to a git repository which is currently hosted on GitHub (though we may move it later).

This release adds a new flag - --show-exceeded-limits or -sel for short, that removes some ambiguity in the output, and fixes a problem with starting the solver with --set-pruning r:tf in conjunction with -opt. A new preset - -l three-eighty (or -l te for short) has been added, which provides somewhat better performance.

The experimental dbm_fc_solver is now less experimental and can now store the positions inside binary trees in memory, and its memory consumption has been greatly reduced since earlier versions. We also added another experimental solver called fcc_fc_solver which aims to determine the solvability of a deal by analysing fully-connected-components (“FCCs”).

We also added support for building and testing the distribution in an out-of-tree build, and there are some cleanups to the code.

More information about all these can be found in the distributed documents of Freecell Solver.


See comments and comment on this.

15-Jan-2012: Freecell Solver 3.10.0 was Released

Freecell Solver version 3.10.0 has been released. It is available in the form of a source tarball from the download page.

This release fixes two bugs - one with the --max-iters affecting only the last instance, and one with reading foundations with 0, and implements many small optimisations and cleanups. It also adds some experimental code with the so-called delta-states, where states are compactly encoded based on the original state. This functionality is not available in the main solver yet, but it powers the experimental on-disk-key/value-databases-based solver, which end up not scaling very well during testing.


See comments and comment on this.

03-Jul-2011: Freecell Solver 3.8.0 was Released

Freecell Solver version 3.8.0 has been released. It is available in the form of a source tarball from the download page.

This release fixes some crashes using --trim-max-stored-states, adds a more meaningful man page instead of the token one that was previously present, adds scripts/parallel-range-solver-total to solve a range of deals in parallel by splitting them into chunks, and many smaller improvements and fixes.

We also forgot to mention the 3.6.0 release, which fixed the installation of fcs_dllexport.h, added the --tracemem compile time option, added a bug fix for incrementally increasing the iterations/stored-states limits, added a built-in version of kazlib's balanced binary search tree as a possible back-end for storage, and had some other improvements.


See comments and comment on this.

31-Mar-2011: Freecell Solver™ Goes Webscale

1 April, 2011, Tel Aviv, Israel: Freecell Solver Enterprises™, Inc., on behalf of the Freecell Solver™ development team, is glad to announce the upcoming availability of the Webscale™ Edition of Freecell Solver™, the solver for various types of Patience games.

Freecell Solver™, has until now made use of a compile-time choice of primitive, in-memory, data-structures such as hash tables or self-balancing binary trees, but now we decided that it's time to move on to something more in the spirit of 2010s. Since SQL databases have already become passé, we decided to skip directly to the NoSQL trend of databases (also known as "Oh no! No SQL!") and to write alternative backends for Freecell Solver™ for distributed NoSQL stores such as Cassandra, MongoDB, or CouchDB.

Freecell Solver Enterprises™ is certain that using these modern, high-performance, and highly distributed stores will increase Freecell Solver™'s webscalability, and allow it to process a larger amount of stored positions than it could at the moment at a far greater speed and make Freecell Solver™ be ready for the cloud. As our CTO, Shlomi Fish, says “If you're not excited about it now, you should be.”

Expect the upcoming availability of Freecell Solver™ Webscale™ Edition from the homepage of Freecell Solver™.

See comments and comment on this.

05-Dec-2010: Freecell Solver 3.4.0 was Released

Freecell Solver version 3.4.0 has been released. It is available in the form of a source tarball from the download page.

In this release, we've added the --set-pruning flag to turn on the Horne's play prune, which improves performance. There are two new presets - -l enlightened-ostrich (or -l eo for short), which makes use of --set-pruning and is the fastest preset yet, and -l maliciously-obscure (-l mo) which is slow but generates especially short solutions.

We added a compile-time option to use RCS-like states storage which conserves a lot of RAM and allowed Freecell Solver to scale to over 200 million positions on an x86-64 machine with 64 GB of RAM (which was utilised for that courtesy of Amadiro's university). There are many other major and minor speed and memory optimisations in this release.

The --ms and -M flags were added to the program, to generate Microsoft deals even for numbers higher than 32,000, which are different in PySol and PySolFC. Furthermore, the CMake configuration was updated to use "lib${LIB_SUFFIX}", so it can be built on some 64-bit systems.

Finally, there's an experimental --trim-max-stored-states which currently may crash the solver, but we decided to release it despite this fact.

All of these changes prove to be a huge step forward for Freecell Solver making this release its best release yet.

See comments and comment on this.

14-Jul-2010: Freecell Solver 3.2.0 was Released

Freecell Solver version 3.2.0 has been released. It is available in the form of a source tarball from the download page. We hope to release a Windows binary soon.

This release implements the --depth-tests-order flag that allows varying the tests' order based on the depth which allows for interesting (and faster) searches. Several new presets : -l the-iglu-cabal , -l foss-nessy and -l tea-for-two have been added , the latter optimised for two freecell deals. There are also several bug-fixes, optimisations and code cleanups.

See comments and comment on this.

13-Jul-2010: Solvability Statistics of Two Freecell Games

While the default Windows implementation of Freecell only supports playing Freecell with four initial freecells, it can be played with any number of them. In order to make the game more challenging, some people are playing it with a fewer number of freecells.

As of today, the Freecell FAQ says that "With two freecells, there are at least 24,161 solvable deals [in the Microsoft 32,000 deals].". However, at the course of researching those layouts using Freecell Solver (after constructing a solver configuration optimised for solving two-freecell deals), we have found out that more deals can be provably solved.

Below one can find the report about the solvability of 2-freecell deals. The executive summary is that:

  1. 25,367 deals were successfully solved.
  2. 6,600 deals are provably unsolvable.
  3. The other 33 deals are "intractable" - meaning my computer ran out of resources trying to solve them (I limited the range of iterations to 8,200,000, but some of them were killed by the "out-of-memory" daemon earlier).


  • By using the "tea-for-two" meta-moves preset: 25,143.

  • By using -to 01ABCDE : 172.

  • By using -l foss-nessy : 38.

  • By using the extended range (8,200,000 iterations) -to 01ABCDE scan: grep -l '^This game is solv' *.sol | wc -l yields: 14.

  • Total: 25,367.

Definitely unsolvable

  • Fully traversed in the atomic moves preset: 6,513.

  • Found using grep -l '^I could not solve' *.sol | xargs grep -h '^Total number of states checked' | grep 1200000 | wc -l.

  • Fully traversed in the extended-range atomic moves preset: 87.

  • Found using grep -l '^I could not solve' *.sol | xargs grep -h '^Total number of states checked' | grep -v 8200000 | wc -l.

  • Total: 6,600.


  • After the atomic scan: 172.

  • Found using grep -l '^I could not solve' *.sol | xargs grep -l '^Total number of states checked is 1200000\.' | wc -l

  • After the foss-nessy scan: 134.

  • After the 8,200,000 range atomic scan:

  • Killed by the Out-of-memory Killer: ls | perl -lne 'print if -z' | xargs ls -l | wc -l : 17.

  • Reached the iterations limit:

  • grep -l '^I could not solve' *.sol | xargs grep -l '^Total number of states checked is 8200000\.' | wc -l: 16.

  • Total: 33.

Conclusion and Future Directions

The 33 deals that we could not determine whether they were unsolvable or not are: 891, 982, 3129, 5435, 6090, 7214, 7728, 9034, 11266, 12038, 12064, 13659, 13705, 14262, 14445, 14790, 15804, 15957, 16322, 16462, 17184, 17684, 17760, 17880, 18446, 19671, 19678, 20792, 21779, 26124, 27799, 28188, 29577. We would appreciate any further insights about whether they can be solved or not and one option would be to use Freecell solver to solve them on a 64-bit machine with more memory available than what I have.

In the future, we'd like to work on the "States calculated from the original" feature which should reduce memory consumption considerably, especially on 64-bit architectures. After reading the report of Kevin Atkinson's and Shari Holstege's solver it seems that we can also save space by re-using old positions that have been determined to be dead-ends, so we'd like to explore that. We'd also like to explore using an on-disk storage to store the states / positions such as Tokyo Cabinet. That or we can try adding a bigger swap partition.

See comments and comment on this.

24-May-2010: Freecell Solver 3.0.0 was Released

Freecell Solver version 3.0.0 has been released. It is available in the form of a source tarball from the download page. We hope to release a Windows binary soon.

This release implements the flares API (see the usage document), which allows running several alternative scans and then picking up the one with the shortest solution. It also adds the -l children-playing-ball and -l sentient-pearls presets that optimise on solution length (based on flares).

Also see the post about this release to the fc-solve-discuss mailing list giving some of the motivation for the new major release digit (3.x.y instead of 2.x.y).

See comments and comment on this.

01-Apr-2010: Announcing Freecell Solver™ Enterprise Edition

01-April-2010: Freecell Solver Enterprises™, Inc., on behalf of the Freecell Solver™ development team, is glad to announce the upcoming availability of Freecell Solver™ Enterprise Edition. In its Enterprise Edition, Freecell Solver™ will be enhanced to solve generalised Freecell, in which there can be an arbitrary number of card ranks. Since generalised Freecell is NP-complete, this will enable using Freecell Solver™'s ingenious, cutting-edge algorithms to solve the previously hard, provably NP-Complete problems of the Travelling Salesman problem, Subset sum, Sudoku and Enterprise content management.

Since we expect some of our customers to wish to solve NP-complete problems with data sets of an order larger than the standard computer word (32-bit or 64-bit), we are going to start using the "GNU MP Bignum Library" (GMP). As our CTO, Ron Johnson, says By making use of Freecell Solver™ Enterprise Edition's sophisticated algorithms, we expect a cluster of 2,000 32-way high-performance supercomputers to solve a 17,179,869,184 (2 to the power of 34) problem, a short time before the heat death of the universe.

That's not the only change expected in Freecell Solver™ Enterprise Edition. Until now Freecell Solver™ was written in ANSI C and was dependent only on the standard C library. To make it more enterprise ready, we decided to convert to such enterprise-ready languages as C++ and Java, and to utilise such enterprise-ready Cross-Platform Abstraction Libraries such as Boost, Qt, glib, Apache's Portable Runtime (APR), or ACE. Our CTO continues: Phil Greenspun said that Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.. Well, now Freecell Solver™ will contain an ad hoc, informally-specified, bug-ridden and slow, but enterprise ready, implementation of half of Common Lisp. This is really very exciting. We don't know yet which of these libraries we are going to use, but we are likely to use more than one based on the enterprise-readiness of their individual components.

Naturally, as the company behind Freecell Solver™ Enterprise Edition, Freecell Solver Enterprises™ does not expect to keep Freecell Solver™'s original permissive licence, the MIT/X11 License, because code which is licensed under it is easy to abuse, misuse, and generally use. Instead, the core Freecell Solver™ Enterprise Edition functionality would be available under the Affero General Public License (AGPL) version 3, while making some extended functionality available only under own own custom, proprietary licence - exclusively for paying customers. We are really excited about this change which will allow use to protect our intellectual property from people and enterprises who will abuse, misuse or generally just use it.

Here is what others say about that:

  • Don Knuth: Freecell Solver™ Enterprise Edition really excites me. I didn't think I'll see the day to see an Enterprise-ready NP-complete solver, but Freecell Solver™ EE made it happen. I can't wait to play with it.

  • Larry Wall: Freecell Solver™ Enterprise Edition is the epitome of Laziness and Hubris, but unfortunately requires a lot of Patience.

  • Bill and Ted: Enterprise Content Management! Yeah!!! Star Trek is Excellent, bro. Excellent!!! So where's Captain Kirk?

  • Shlomi Fish (the original creator of Freecell Solver): Eh, what the hell?

As you can see, everybody are united in their opinion that Freecell Solver™ Enterprise Edition is the best thing since Enterprise bread came sliced by and for enterprises.

One can download the Freecell Solver™ Enterprise Edition version 1.0.0 source tarball, and after resolving all the essential dependencies and building it (as documented in the INSTALL file), type ./fc-solve --help-enterprise to get help for the enterprise features.

See comments and comment on this.

27-Mar-2010: Freecell Solver 2.42.0 was Released

Freecell Solver version 2.42.0 has been released. It is available in the form of a source tarball from the download page. We hope to release a Windows binary soon.

This release finally adds a -o/--output flag to the "fc-solve" executable, and installs the newly created executables ( freecell-solver-fc-pro-range-solve , freecell-solver-multi-thread-solve , freecell-solver-range-parallel-solve , etc.) by default. There are also several bug-fixes and one can now input "const char *" instead of "char *" (with a compile-time flag that typedefs the strings to their old interface).

There has been some internals cleanups and optimisations. Finally, the file pqueue.h was converted to the MIT/X11 license, with permission of its originator, Justin Heyes Jones making Freecell Solver fully licensed under MIT/X11.

We hope you have fun with this new release.

See comments and comment on this.

27-Jan-2010: Freecell Solver 2.40.0 was Released

Freecell Solver version 2.40.0 has been released. It is available in the form of a source tarball from the download page.

This release contains a fix to a string overflow with processing the command line arguments, and an optimised command-line preset that can be invoked as -l blue-yonder (or -l by for short) that solves the Microsoft 32,000 deals in under 100 seconds on a Pentium 4 2.4GHz machine. It also contains some more minor changes: there is now a Scan: header with the name of the current soft thread, when debugging under -s -i, an off-by-1 iterations count was fixed and the iteration handling callback is now applied globally to all the instances. Finally, has support for generating PySol's and PySolFC's "Black Hole" Solitaire deals, intended for my newly released Black Hole Solitaire Solver.


See comments and comment on this.

29-Dec-2009: Freecell Solver 2.38.0 was Released

Freecell Solver version 2.38.0 has been released. It is available in the form of a source tarball from the download page.

This is a minor release which makes sure one can build Freecell Solver outside the source distribution (e.g: mkdir build ; cd build ; cmake ..) without AsciiDoc, adds a --pysolfc (or an -F for short) flag to and fixes one of the help displays.

See comments and comment on this.

27-Nov-2009: Freecell Solver 2.36.0 was Released

Freecell Solver version 2.36.0 has been released. It is available in the form of a source tarball from the download page.

The main highlight of this release is that the plaintext documentation that was part of the source distribution were converted to AsciiDoc, a lightweight markup language that allows the plaintext and human-readable sources to be converted to HTML, to DocBook/XML, to PDF and to other formats. As a result, they are now also available online in HTML formats.

Furthermore, the process for getting the test suite and benchmarking process up and running were considerably simplified, thanks to the input received by Dimitri Leca (Pythack).

Finally, there are some other more minor improvements. This release has been delayed quite a bit due to some neglect on the part of the main maintainer, but we hope you find what's new satisfying enough. Happy solving!

See comments and comment on this.

23-Jul-2009: Screencast of Freecell Solver in Action

Yesterday, I spent some time on preparing a screencast of PySolFC auto-solving a deal of Freecell using Freecell Solver . Here's an embedded player:

I remember the first time I saw KDE's KPatience automatically solving a deal of Freecell, while using Freecell Solver as its back-end. Seeing the cards move on their own was very cool, and brought me a lot of joy. Now that PySolFC has built-in support for Freecell Solver, I was able to use it to prepare the screencast. I hope you'll enjoy seeing this screencast, and would be interested in trying out PySolFC and Freecell Solver.

I'm going to blog about how I prepared the screencast on my tech blog, which may prove instructive to other people wanting to prepare screencasts on Linux. This was the first video I ever prepared and producing it proved to be a pleasant experience, even though some tasks did not work right away.

See comments and comment on this.

11-Jul-2009: Freecell Solver 2.34.0 was Released

Freecell Solver version 2.34.0 has been released. It is available in the form of a source tarball from the download page.

Back in the abandoned 2.10.x branch a programmer called Michael Mann contributed a new Simple Simon move function that allowed it to solve more games. In 2.34.0 this move function was restored, and made optional. We now have a theme called "the-last-mohican" (or "tlm" for short), after the movie "The Last of the Mohicans" by a different Michael Mann, which I have watched and enjoyed, that is capable of solving over 90% of the first 5,000 PySol Simple Simon deals. (Incidentally "The Last Mohican" is the direct translation of the book and movie's name in Hebrew). The solutions of the solver were verified to be correct using Games-Solitaire-Verify.

Working on this theme uncovered a bug in the solver where the --next-instance flag was removed by accident, and it is now fixed.

Aside from that, there's now an improved atomic moves theme - "toons-for-twenty-somethings", which can solve all of MS Freecell's 32,000 deals. It is still much slower than the meta-moves-based theme.

There are also some other more minor changes, which can be found at the NEWS file in the distribution.

See comments and comment on this.

26-Jun-2009: Maintenance Freecell Solver 2.32.1 Release

Hot on the heels of Freecell Solver 2.32.0, there's now a 2.32.1 maintenance release available from the download page. This release fixes several important build bugs, especially on Windows, but also on UNIXes.

Please test it to see if any other problems remain.

See comments and comment on this.

24-Jun-2009: Freecell Solver 2.32.0 was Released

Freecell Solver version 2.32.0 has been released. It is available in the form of a source tarball from the download page.

This version features a large code cleanup which also resulted in a substantial speed boost. The code cleanup was guided by a script that was written to list all occurrences of identifiers with the same name, in order to find uncommon identifiers.

There were several bug-fixes done to the CMake-based build system, and there's now support for Google's tcmalloc and hidden internal identifiers in the DLL/shared-library. The inline keyword for defining inline functions is now supported on more compilers and more functions or macros have been converted to inline functions.

We hope you enjoy this release.

See comments and comment on this.

07-Jun-2009: Freecell Solver 2.30.0 was Released

Freecell Solver version 2.30.0 has been released. It is available in the form of a source tarball from the download page.

This release adds the run-time presets "gooey-unknown-thing", "sand-stone" and "slick-rock" that aim to minimise the average lengths of the resultant solutions. (as opposed to minimising the time it takes to solve). It also adds support for using any of the tree implementation supplied by libavl version 2 for both the positions storage and the stacks storage.

There's a bug fix in the fc-pro range solver for a bug that caused the Freecell Pro compatible moves to be mis-calculated. Moreover, the code has experienced a substantial re-organisation and the Makefiles for the different compiler were merged into one (which was later fixed).

There are also new compile-time options to exclude various functionality that may not be needed.

Download it while its hot!

See comments and comment on this.

29-May-2009: Adventures in Compiling

I've generally been using GCC (= The GNU Compiler Collection) exclusively for compiling Freecell Solver under Linux for its constant development. For a time, I used to compile the Windows binaries using Microsoft Visual C ("cl.exe") and a really hideous batch file I wrote for the purpose (so it would work on the Technion's computers). Lately, however, I've switched to compiling using MinGW on Windows, which is gcc based.

A few weeks ago, I decided to try out other compilers and see what they had to offer. I downloaded the proprietary icc (Intel's C Compiler), which is gcc-compatible and has a Linux trial version. It was a huge download and ended up occupying a lot of space on the hard-disk. At first, I could not get it to emit working code, but after messing a little with my makefiles, I was successful. It is about the same speed as gcc for compiling my ANSI C program (maybe a bit slower), and generates somewhat faster code.


icc kept emitting many of the so-called "remarks" which I eventually took upon myself to eliminate. This improved the quality of my code. But it worked properly with these many remarks being emitted. After installing icc, msec (the Mandriva security mechanism) complained about world-writable files in the icc installation, so I reported it on the Intel forum.

The next compiler I tried was tcc, the Tiny/Turbo C Compiler. The version in the Mandriva repositories was old and did not yield a working binary, and so I tried upgrading to version 0.9.24 and then to the git version, but none of them worked either. I reported this attempt to the tcc mailing list.

I also tried icc's -fast flag, which is supposed to make the output faster, but it actually made the binaries slower (much slower than even gcc).

However, later on, after cleaning up my makefile, tcc produced perfectly working binaries. I don't know what the problem was, but it was solved. (I reported that in a reply). Compiling with tcc is much faster than with gcc, but the resulting code is much slower than gcc's, and occupies more space on the disk.

The next compiler was TenDRA. Now the homepage a 403 (and still does) and so I went on Freenode and asked. I eventually did:

$ svn co

Only to discover that is empty except for a reference to the Trac web-site (which was also off-line). So I needed to use the guidance of the people from Freenode's #tendra to build it.

In the process, I had to install bmake, because that's the only make that would compile TenDRA. The ./configure in the standard distribution failed to work here, but I was able to find an .src.rpm which compiled and installed fine. The TenDRA boot process also complained about one of my system's header which had a list or enum with a trailing comma, and I had to manually fix the code.

But I was able to build TenDRA and install it, and it was able to compile a working program. Before it did, though, I had to fix many compilation errors it reported, as TenDRA is stricter than gcc. It also didn't recognise my use of strdup, and I had to specify -Ysystem for it to work (the previous -Y's I tried did not work properly). But then it worked.

TenDRA generated larger and slower executables than gcc but it worked.

I failed to get lcc (which isn't strictly open source ) and pcc (which is open source ) to either compile or produce working code. Seems like neither of them are ready for prime time - at least not here on Mandriva Linux Cooker.

So after a lot of frustration, my experiments with different compilers were mostly successful. As a result, my code is more strict, and better tested. So I guess it was worth it.

See comments and comment on this.

17-May-2009: Freecell Solver 2.28.0 was Released

Freecell Solver version 2.28.0 has been released. It is available in the form of a source tarball from the download page.

This version contains several significant optimisations. Now the "freecell-only" preset can solve the first 32,000 Microsoft Freecell deals at 286 deals per second with gcc, and 301 deals per seconds with Intel's icc. (on a Pentium 4 2.4GHz computer). There are many other internal cleanups, build system tweaks, and new makefiles to build using some alternative C compilers.

The source archives from now on will be distributed as tar.bz2 instead of tar.gz which gives better compression, and a faster download.

See comments and comment on this.

27-Apr-2009: Freecell Solver 2.26.0 was Released

Freecell Solver version 2.26.0 has been released It is available in the form of a source tarball from the download page.

This version contains several significant optimisations (up to the point where the "freecell-only" preset can solve the first 32,000 Microsoft Freecell deals in 200 deals per second.), and improvements to the build system (including the elimination of compiler warnings). Finally, the test suite now builds correctly inside the source distribution.

We have more ideas for optimisations and other enhancements, and this is just an intermediate release (but one which should be perfectly usable).

See comments and comment on this.

18-Apr-2009: Freecell Solver 2.24.0 was Released

Freecell Solver version 2.24.0 was released today. It is available in a source archive from the download page. Windows command-line binaries should be available momentarily.

This version contains some fixes to crashes and memory leaks when using the -opt with a range of boards (or otherwise when a solver instance is recycled), a new "freecell-solver-fc-pro-range-solve" executable (built by default, but not installed), which runs a range of deals using the solver and outputs the number of FCS moves, the number of FC-Pro moves, and the FC-Pro moves in standard notation.

For developers, this release also contains a build type for profiling, many cleanups to the code, and a makefile to generate LLVM bitcode.

See comments and comment on this.

31-Mar-2009: Freecell Solver 2.22.0 was Released, Now Under the MIT/X11 License

Freecell Solver version 2.22.0 is now available for download from the download page. This release converts from Public Domain "licensing" which is problematic for source code to the more explicit and less controversial MIT/X11 License. (Some source files that had been originated by other parties are still under the public domain).

Also in this release is some fixes to the build system (in part thanks to a contribution by Risko Gergely), including the ability to prepare a static library.

Happy solving, and enjoy April Fool's Day Tomorrow.

See comments and comment on this.

26-Mar-2009: Freecell Solver 2.20.0 was Released, along with a Windows Installer

Freecell Solver version 2.20.0 is now available for download from the download page. The big news is that executables for Microsoft Windows (x86) are now available for it, for the first time since the early 2.8.x releases. And this time, they come in the form of an interactive "Next→Next→Finish" installer based on the Nullsoft Scriptable Install System (NSIS).

Also in this release are a fix to a crash when using the range solver with the "-opt" flag (and other similar scenarios), a more comprehensive NEWS file and some other fixes.

See comments and comment on this.

21-Mar-2009: Freecell Solver 2.18.0 Was Released

As previously announced on the fc-solve-discuss mailing list, version 2.18.0 of Freecell Solver is now available for download as a source tarball from the download page.

Here are some highlights of the new release:

  1. Added the FCS_FREECELL_ONLY compile-time flag to hard-code the settings for Freecell and thus allow a faster run-time. When applied, it improves the speed of the solver from 140 deals / second to 164 deals / second.
  2. Fixed using libredblack for states and stacks storage, and also added a libJudy-based backend for them.
  3. Added the -Wall (= turn "all" warnings on) by default for gcc in the CMake build.
  4. Updated the "TODO" file in the distribution which was heavily out-of-date.
  5. Documented the "What's new" of some previous releases in the "NEWS" file.
  6. Got rid of the Hard-DFS scan, which was no longer useful. It is still accepted as an argument, but is now using the Soft-DFS routines instead.
  7. Many internal refactorings, cleanups, tweaks and fine-tunings.

See comments and comment on this.

19-Mar-2009: Welcome to the fc-solve Blog

Welcome to This will serve as the future blog and news-feed for Freecell Solver and related news, like general Freecell research, automated solving of other Card solitaire variants, and solving or playing other puzzles, riddles and games.

Freecell Solver started from a program I wrote (first in Perl and then re-implemented in ANSI C) to see if some ideas I had for solving Freecell would work. It performed well enough that I created a web page for it on my Technion's homesite, named it "Freecell Solver" and announced it on Freshmeat. Since then, due to the constant feedback I received from people who tried to use it, it was greatly enhanced and expanded.

One of the things I invested the most time in was the online resources for support and information. The web-site started from one page, and then had two pages, and now has at least ten different pages, all with a different purpose. I also started a mailing list at YahooGroups to discuss the program and related programs, and it proved to be very active and lively.

Another thing that I set up were release-news that were present on the front page of the site and the old news page. A few days ago, I thought to myself: "If I'm maintaining these news items, why not create a web feed out of them?" And if we're going to have a web-feed - why not have a blog, with comments and the whole enchilada?

So this is the next step in communicating about Freecell Solver and related matters - a weblog. It's also my excuse to play with, and see how it fares in comparison to other web-journal services I know. (Like my friend once said "You gotta move or you stone.").

So if you've got something to say, say it here in a comment. And remember: if you're not in it for fun - I'm out of here!

See comments and comment on this.


Freecell Solver 2.16.0 is now available. Culminating many person-years of effort (OK - some person-days of effort), it is the best release todate.

The highlights of this release are a bug fix to the iteration numbers in the "-s -i" display, and an internal refactoring of the ptr_state_with_locations_t struct into a separate ptr_state_t (the key) and a ptr_state_extra_info_t (the value). The latter should not affect the external behaviour or API in any way.

This release (like previous ones) is available from the download page. Next on our agenda is getting a binary package for Microsoft Windows out-of-the-door, and more code cleanups, optimisations and enhancements.


Freecell Solver 2.14.0 was released today. This release features a major speed boost, and an important bug fix: when "--sequence-move unlimited" had been specified in previous versions, it sometimes did not take effect due to other parameters, and as a result the sequence move was still limited. (Thanks to larrysan for reporting this problem).

This release comes relatively shortly after the previous release, and without any developer versions. This is in an effort to make more frequent stable releases with notable features.


Perl 6 will be ready by Christmas, but of an unknown year. On the other hand, Freecell Solver 2.12.0, is already ready for Christmas 2008, and was released today. The highlights are a new configuration and build system based on CMake, which results in faster configurations and builds, and a much reduced archive size; a new suite of automated tests; an optimisation to the command line processing and a new --version flag.

Happy holidays and hope you enjoy this release.


The Downloads are now working again. Plus, several new pages were added or updated in the site:

  1. The Current Status Page answers the question "Is Freecell Solver dead?".
  2. Several new items were added to the "To Do List" page. It now also features a table of contents.
  3. There is now a page about Giving or Getting Academic Credit for working on Freecell Solver.


There is now PySol Integration with Freecell Solver available here. This enables receiving hints from Freecell Solver and seeing demos of it while within PySol.


Freecell Solver 2.8.0 has been released. This version features a better documentation and help screens, a preset system, and an option to read parameters from files. Plus, it is possible to run one instance of the solver after the other in case the other one has returned a negative verdict.

All in all: a lot of added usability!


Freecell Solver 2.6.0 has been spotted in the wild. This version features atomic moves, which are slower than the traditional ones, but guarantee a true verdict. It also has a --prelude switch that allows running a static order of quotas at start for the participating soft threads, and makes constructing faster solving presets easier.

Several other flags were added, and the code has also been greatly optimized and cleaned up, which makes Freecell Solver much faster than it was before.


Freecell Solver 2.4.0 was released. The highlight of this release is the ability for several scans to operate on the same state collection. This is done using a mechanism called "soft threads", which is switched in user-land and does not require system multi-threading.


Freecell Solver 2.2.0 came into the world today. This release features several improvements and fixes to the library's internals - it now resides solely in the "freecell_solver_" namespace, has a more robust state output, and has a simplified and more modular scans' code. Aside from that, the maintenance of the package became more integrated and now it is possible to build an RPM by typing executing rpm -ta on the archive.


Freecell Solver 2.0.0 was released. This version features a lot of new enhancements and additions:

  1. Added some presets for Beleaguered Castle, Citadel and Streets and Alleys.
  2. Re-factoring of the scans code to make it simpler.
  3. Added many functions to the programmer's library.
  4. fc-solve now uses it, so it is fully independent of the library it is linked against.
  5. Added a randomized DFS scan (with a user-defined seed).
  6. Win32 Makefile can now generate a working DLL
  7. Most importantly : a new initial digit! All hail the "2"!!


Freecell Solver version 1.10.0 was released. This version can now solve deals of Simple Simon, as well as solving all the Freecell-like variants that it could before.


Freecell Solver version 1.8.0 was released into the world. Its main highlight is its new building process based on GNU Autotools. Now, one can build a shared library, a static library and an executable across many UNIX variants out of the box.

I also adapted the GNOME AisleRiot board generation program to generate the boards of the new Solitaire variants that were added to it and are supported by Freecell Solver.


Freecell Solver version 1.6.0 has been released. It supports a solution path optimization routine which enables it to generate solutions that contain a smaller number of moves. Furthermore, there are some optimizations, so it should be at least a little faster.

Otherwise, a lot of comments were added to the code, to make it easier for interested developers to understand it.


I have set up a mailing-list for Freecell Solver. For the mailing-list homepage and for subscription information consult the following page:

If possible, send your questions or commentary there. If not you can still E-mail me (Shlomi Fish).


The long-awaited Freecell Solver 1.4.0 is now available. Changes from the previous version include some fixes for bugs and memory leaks (mostly library-related), as well as an improved Soft-DFS scan, plus A* and BFS scans. (which are experimental and do not always work properly).

A choice between all of those scans is available at run-time.


I have set up a mirror for Freecell Solver at BerliOS. It will contain much of the same contents as this one, but will not be updated as frequently.

The motivation for setting up the mirror was because I noticed that the connectivity at the Technion was not fail-safe, and I want a backup site.


Version 1.2.0 of Freecell Solver is now available for download. This version has several improved moves so it can solve more boards. It also sports a more robust command-line argument handling so you can expect much less segfaults if you use it improperly.

The code has also changed quite a bit, so it may be of interest to developers who are interested to look under its hood.


Freecell Solver version 1.0.0 was released. This version can solve more game types, and can be compiled so it will be less memory intensive which is especially good for such games as Die Schlange or Der Katzenschwanz.

Now there is also a library interface for use with games, which supports suspending a solution process and resuming it from its last position. And naturally, there is a bug fix or two, so you should upgrade. :-)

But the most important news is that it is no longer version 0.x.y but rather version 1.x.y. Hoorah for the new initial digit!


Freecell Solver version 0.10.0 was released. This version features support for several Solitaire variants besides Freecell, such as Forecell, Seahaven Towers and Eight Off. Aside from that, it offers a more verbose solution, as well as several bug-fixes.


Freecell Solver version 0.8.0 was released. New features in this version include:

  1. Some bug-fixes. (users of previous versions should upgrade)
  2. Support for a variable number of freecells, stacks, and cards per stack.
  3. Board generators for Microsoft Freecell, Freecell Pro and PySol.
  4. An option to use the balanced binary tree implementations of libavl , glib , or libredblack . Using them makes Freecell Solver about 33% faster.
  5. Support for using "T" instead of "10" in board input/output.
  6. Improved Documentation.


Freecell Solver version 0.6 was released. This version features a more modular code as well as the following usability features:

  1. An extra movement that allows Freecell Solver to solve some boards which it could not solve previously.
  2. The order of the stacks and freecells is preserved throughout the solutions.
  3. Limit to a certain number of iterations (so it will stop before it consumes too much memory)
  4. Specify the order of the movements that will be tested. Usually, a test order can be found that will solve a given board really fast.


Freecell Solver version 0.4 was released. This version contains three major code optimizations, so it now runs much faster. It can now also start solving from a non-initial board.