Freecell Solver's Features List

Usability Options

  • The stacks and freecells retain their position throughout the presented solution.

  • Can present either the intermediate states (stepping at one move or sequence move) or the moves that are required for the solution, or both.

  • On UNIX-like operating systems: accepts some user signal combinations that turn some run-time debugging information on and off.

  • Some configurations are very fast: the solver was able to solve the first Microsoft Freecell 32,000 deals in 74 seconds on a Pentium 4-2.4 GHz computer (432 layouts per second), before that computer was decommissioned. On a Sandy Bridge Core i3 computer, these deals are now solved in 2.934 seconds (10,904 layouts per second).

  • Option to use atomic moves which guarantee an accurate verdict. (non-atomic scans may report a false negative)

  • Ability to read command line arguments from a file, or from a preset collection. Makes command lines much less verbose.

  • An optional --hint-on-intractable flag which presents the moves to the intermediate reached state, if the maximal number of iterations was reached without a conclusion (= "intractable").

Development Features

  • Available as a library for use within third-party applications. It is licensed under the MIT/Expat License, which means it can be used without any restrictions.

  • The core library and program is written in C code supported by modern C compilers such as GCC and LLVM/clang.

  • Full compatibility between dynamically-linked third-party applications to the version of the library that is used.

  • Compile-time options for hard-coding several game-types parameters, that can make the solver faster. There's a combined FCS_FREECELL_ONLY mode.

  • A test suite is included as part of the distribution.

  • The git repository contains Continuous Integration (CI) configurations and scripts, including Docker-using ones.

Scan Options

  • Supports the DFS (= Depth-First Search), Randomized DFS and Best-First-Search scans. Which one can be specified at run-time.

  • The order of the move functions to be conducted on a given state can be specified at the beginning of the scan. It is also possible to include only a subset of the available move functions.

  • With the A* scan, one can specify the weights of the different state evaluation parameters.

  • One can limit the scan to a certain number of checked states.

  • It is possible to resume a scan from a pre-empted position.

  • After a solution path was found it can be optimized using a BrFS (= Breadth-First Search) scan on the intermediate states.

  • There is an option to reparent states during a scan if their depth in the solution tree is higher than the one with which they were reached. This also tends to shorten the solution length.

  • The Randomized DFS scan accepts a user-defined seed.

  • Several scans can be played on the same states' collection (while switching from scan to scan) giving on average a faster solving time.

  • It is possible to specify a static prelude of quotas to be played before the perpetual loop.

  • With the random-DFS scan, it is possible to specify a different moves selection for each depth in the DFS stack.

Game Types

  • Can solve games whose sequences are built by suit, by alternate colour or by rank regardless of colour.

  • Can solve games whose sequence move is limited by the number of Freecells and empty columns, or unlimited.

  • Can solve games whose vacant columns can be filled by any card, by kings only, or by no card whatsoever.

  • Run-time choice of the number of freecells and columns. (limited by a compile-time directive)

  • Supports games of one and two decks. Support for 2 decks game variants was removed in recent versions given it added complexity to the code.

  • List of PySol (PySolFC version) variants that can be solved:

    • American Canister
    • Baker’s Dozen
    • Baker’s Game
    • Bath
    • Beleaguered Castle
    • Box Fan
    • British Canister
    • Canister
    • Castles in Spain
    • Cat's Tail
    • Challenge Freecell
    • Citadel
    • Cruel
    • Deep
    • Eight Off
    • Exiled Kings
    • Fan
    • Fastness
    • Forecell
    • Free Fan
    • Freecell
    • Good Measure
    • Kentish
    • King Only Baker’s Game
    • KingCell
    • Kings
    • Lightweight
    • Ocean Towers
    • Opus
    • Penelope's Web
    • Penguin (NOTE! This variant is only supported by PySol FC with some magic wrappers. It is not supported directly by Freecell Solver. Please do not ask us about it.)
    • Portuguese Solitaire
    • Relaxed Freecell
    • Relaxed Seahaven Towers
    • Repair
    • Retinue
    • Seahaven Towers
    • Seven by Five
    • Seven by Four
    • Simple Simon
    • Snake
    • Somerset
    • Spanish Patience II
    • Streets and Alleys
    • Stronghold
    • Super Challenge Freecell
    • Tuxedo

    More user-invented variants can be specified on the command-line using command-line options.