Pressing
Non-pressing
- 
Make sure the depth_dbm_fc_solver is working on 32-bit architectures. 
- 
See if GCC_INLINE-ing the functions inside fcs_hash.c will yield any benefit. 
- 
Refer to expand-solitaire-multi-card-movesfrom the fc-solve process.
- 
Create a displayer for fc-solve’s solutions which will allow seeing where a card was moved from (using a colored →) and where it was placed. - 
Create a GUI version. 
 
- 
- 
If -optis specified for the flare, then make sure that if the flares loop stop it when it’s doing the optimization scan, then the optimization scan goes on until it ends.- 
Not sure about it. 
 
- 
- 
Investigate a way to have positions_by_rank also index according to the suit, and to traverse only the possible parents or children based on the suit. 
- 
Investigate ways to perform more pointer arithematics and (ptr < end_ptr) ; ptr++ . A lot of code is under-optimized this way. 
- 
In the states handling, there’s still some room for pointer arithmetics. 
- 
Implement more of Kevin Atkinson’s Common Lisp solver’s atomic move types, and try to construct good heuristics out of them. 
- 
Play with writing a memory-re-cycling Soft-DFS scan: if a sub-tree was marked as a dead-end, then its states might be able to be placed on a linked list of states that can be reused. 
- 
PySolFC Deal No. 48007594292403677907 : 
shlomif:~$ make_pysol_freecell_board.py -t -F 48007594292403677907 | fc-solve -l cpb -sam | grep ^Move | wc -l
106
shlomif:~$ make_pysol_freecell_board.py -t -F 48007594292403677907 | fc-solve --method a-star -to 01234675 -asw 300,1500,0,2,50000 -sam | grep ^Move | wc -l
105
shlomif:~$ make_pysol_freecell_board.py -t -F 48007594292403677907 | fc-solve --method a-star -to 01234675 -asw 40,2,40,0,40 -sam | grep ^Move | wc -l
121
shlomif:~$ make_pysol_freecell_board.py -t -F 48007594292403677907 | fc-solve --method a-star -to 0123467589 -asw 300,1500,0,2,50000 -sam | grep ^Move | wc -l
100
shlomif:~$ make_pysol_freecell_board.py -t -F 48007594292403677907 | fc-solve --method a-star -to 0123467589 -asw 300,1500,0,2,40000 -sam | grep ^Move | wc -l
106
shlomif:~$ make_pysol_freecell_board.py -t -F 48007594292403677907 | fc-solve --method a-star -to 0123467589 -asw 300,1500,0,2,60000 -sam | grep ^Move | wc -l
91shlomif:~$ make_pysol_freecell_board.py -F -t 91151234961275807905 | ~/apps/test/fcs/bin/fc-solve  -p -t -sam --method a-star -to 0123467589 -asw 300,1000,0,2,90000 | grep ^Move | wc -l
84However this scan generates takes too much time for most boards (over 100K iterations).
- 
PySolFC deal No. 03620802041832966472: 
shlomif[fcs]:$trunk/fc-solve/source$ make_pysol_freecell_board.py -t -F 03620802041832966472  | ./scripts/summarize-fc-solve -- --method a-star -to 0123467589 -asw 300,1500,99,2,65000
Verdict: Solved ; Iters: 156 ; Length: 87- 
I solved it at length 87. - 
PySolFC deal No. 54369539487824719321: 
 
- 
shlomif[fcs]:$trunk/fc-solve/source$ make_pysol_freecell_board.py -F -t 54369539487824719321 | ./scripts/summarize-fc-solve --method a-star -to 0123456789 -asw 3000,100,60,0,500
Verdict: Solved ; Iters: 1325 ; Length: 115- 
Shlomi Fish solved it in under 110 moves. - 
PySolFC deal 96166640969002647853: 
 
- 
shlomif[fcs]:$trunk/fc-solve/source$ make_pysol_freecell_board.py -F -t 96166640969002647853 | ./scripts/summarize-fc-solve --method a-star -to 0123467589 -asw 370,0,0,2,90000
Verdict: Solved ; Iters: 615 ; Length: 77- 
Shlomi Fish solved it in 77 moves. - 
Add the new Freecell Solver-compatible game variants of PySolFC. 
- 
Convert magic rank constants such as 1 or 13 to FCS_MAX_RANK and FCS_RANK_ACE/etc. 
 
- 
Long-term
- 
Integrate the patsolve’s prioritization and mixed BFS/DFS scan. 
- 
Update the architecture document. 
- 
Make a super-strict parsable-output without all the quirks of -p -t (see Games-Solitaire-Verify for why). 
- 
Write a multi-threaded version. 
- 
Port to Java (?) 
- 
Add a switch to ask the user if he wants to continue and enter a bigger iterations limit. 
- 
Check for unmalloced data and if so gracefully exit. 
- 
Experiment with a delta-based state storage. - 
see delta_states_debondt.c - port it to the main libfreecell-solver. 
- 
see: http://fc-solve.shlomifish.org/to-do.html#orig_calc_states . 
 
- 
- 
Make the dbm_fc_solver not dependent on http://gmplib.org/ by implementing our own big ints. 
- 
Adapt the scans based on the parameters of the initial board. - 
Try to find a correlation between various parameters of the initial board (such as those calculated in the A* scan or the number of steps required to sort the cards in each column by rank), and the performance of various scans and then: - 
Calculate the initial parameters on startup. 
- 
See what would be a good meta-scan based on them. 
- 
Use it. 
 
- 
 
- 
- 
Unit-test fc_solve_compare_lru_cache_keysinscans.c.
- 
Interactive mode? Continue a scan that reached its limit. 
To be considered
- 
Make the code splint-clean. 
- 
Write a multi-process client/server program. 
- 
Add a limit to stacks number (in the case of Indirect Stack States), number of states that are stored anywhere, etc.