Commits

anon...@cec68495-dca5-4e2b-845c-11fdaaa4f967  committed ae4296b

Removed slides - it is auto-generated from something else.

  • Participants
  • Parent commits 28973ec

Comments (0)

Files changed (52)

File vipe/lecture/Freecell-Solver/slides/0.2/data_types.html

-<html>
-<head>
-<link rel="StyleSheet" href="../style.css" type="text/css">
-<title>
-The Data Types
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./test.html" class="nav">Previous</a></td>
-<td>
-<a href="./../states_collection/" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-2.3 The Data Types
-</h1>
-<h1><font color="red">FILL IN</font></h1>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./test.html" class="nav">Previous</a></td>
-<td>
-<a href="./../states_collection/" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/0.2/index.html

-<html>
-<head>
-<link rel="StyleSheet" href="../style.css" type="text/css">
-<title>
-Freecell Solver 0.2's Architecture
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="../" class="nav">Contents</a></td>
-<td>
-<a href="../" class="nav">Up</a></td>
-<td>
-<a href="../intro/disclaimer.html" class="nav">Previous</a></td>
-<td>
-<a href="scan.html" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-2 Freecell Solver 0.2's Architecture
-</h1>
-<ul>
-<a href="./scan.html" class="contents">2.1 The Scan that was used</a><br>
-</ul>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="../" class="nav">Contents</a></td>
-<td>
-<a href="../" class="nav">Up</a></td>
-<td>
-<a href="../intro/disclaimer.html" class="nav">Previous</a></td>
-<td>
-<a href="scan.html" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/0.2/scan.html

-<html>
-<head>
-<link rel="StyleSheet" href="../style.css" type="text/css">
-<title>
-The Scan that was used
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./" class="nav">Previous</a></td>
-<td>
-<a href="./../states_collection/" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-2.1 The Scan that was used
-</h1>
-<h2>Pseudo-Code</h2>
-<pre>
-Solve-State(state, prev_states, ret)
-    if (state == empty_state)
-        Push(ret, state)
-        return SOLVED
-    for each move possible on state
-        new_state &lt;- apply(state, move)
-        if (new_state in prev_states)
-            ; Do nothing
-        else
-            add new_state to prev_states
-            if (Solve-State(new_state, prev_states, ret) == SOLVED)
-                Push(ret, state)
-                return SOLVED
-    return UNSOLVED
-
-Freecell-Solver(init_state)
-    if (Solve-State(init_state, Null, ret) == SOLVED)
-        print "State was solved"
-        while (state &lt;- Pop(ret))
-            print state
-    else
-        print "I could not solve this board";
-
-</pre>
-<h3 class="notbold">
-<li>
-It's actually a Depth-First Search (DFS) scan.
-</li>
-</h3>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./" class="nav">Previous</a></td>
-<td>
-<a href="./../states_collection/" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/0.2/test.html

-<html>
-<head>
-<link rel="StyleSheet" href="../style.css" type="text/css">
-<title>
-The Tests used by the Program
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./scan.html" class="nav">Previous</a></td>
-<td>
-<a href="./data_types.html" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-2.2 The Tests used by the Program
-</h1>
-<h1><font color="red">FILL IN</font></h1>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./scan.html" class="nav">Previous</a></td>
-<td>
-<a href="./data_types.html" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/api.html

-<html>
-<head>
-<link rel="StyleSheet" href="./style.css" type="text/css">
-<title>
-The story of the user API
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="./" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./flame_war.html" class="nav">Previous</a></td>
-<td>
-<a href="./autoconf.html" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-10 The story of the user API
-</h1>
-<h3 class="notbold">
-<ul>
-<li>
-Starting of Freecell Solver 1.0.0, FCS had a set of functions
-entitled freecell_solver_user_ (after their prefix) which were meant
-for integration into a larger software needing solving capabilities.
-</li>
-<li>
-When Stephan Kulow integrated Freecell Solver into kpat (a solitaire suite
-for KDE), he did not use it, because it did not give him everything he
-needed. Instead, he used the more basic internal functions.
-</li>
-<li>
-I told him that I "would sleep better at night" knowing that fcs_user_ will
-be used, and asked him to implement the missing parts himself, and send
-me the patch. He did.
-</li>
-<li>
-Markus Oberhumer (of PySol fame), created a Python interface for the
-library, and again sent me some functions he wrote.
-</li>
-<li>
-Eventually, I converted the command line executable itself to use
-fcs_user (while adding a lot of functions in the process) to make sure I
-give the embedding application all of the functionality that I use.
-</li>
-<li>
-I also ended up creating an API to analyze a command line and configure a
-solver instance accordingly.
-</li>
-<li>
-Sometimes later, I found it encouraging that Dave Wilkinson, an engineer
-who worked on Freecell 3D, was able to integrate fcs_user_ without my help,
-and just informed me of its release.
-</li>
-<li>
-The importance of the <a href="http://www.joelonsoftware.com/articles/fog0000000012.html">"Eating your own Dog-Food"</a> concept cannot be stressed enough.
-</li>
-</ul>
-</h3>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="./" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./flame_war.html" class="nav">Previous</a></td>
-<td>
-<a href="./autoconf.html" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/autoconf.html

-<html>
-<head>
-<link rel="StyleSheet" href="./style.css" type="text/css">
-<title>
-Auto-confisication and Friends
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="./" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./api.html" class="nav">Previous</a></td>
-<td>
-<a href="./freshmeat_effect.html" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-11 Auto-confisication and Friends
-</h1>
-<h3 class="notbold">
-<ul>
-<li>
-Once upon a time, Freecell Solver was distributed only with a makefile
-for GNU make, and everyone were happy.
-</li>
-<li>
-When Stephan Kulow embedded its code into kpat, he adapted the makefile
-to use the standard KDE Autoconf-based build process.
-</li>
-<li>
-Somewhat afterwards, I decided that I want the build process to be more
-portable and modular, and to give users the ability to build a shared
-library.
-</li>
-<li>
-The solution - converting to Autoconf, Automake and Libtool.
-</li>
-<li>
-How to do that exactly is out of the scope of this lecture. I can just say
-that it is not very straightforward, and that it required a lot of tweaking
-and trial and error.
-</li>
-<li>
-I then decided that having an RPM of Freecell Solver would be nice. So I created
-an RPM spec for it.
-</li>
-<li>
-Again, it required quite a lot of tweaking and experimenting.
-(<a href="http://linuxclub.il.eu.org/lectures/31/">Tzafrir Cohen's Lecture</a>
-and various web-resources were a great help)
-</li>
-<li>
-I eventually integrated generating an up-to-date RPM SPEC into the Autoconf
-process, and thus, was able to build an RPM by issuing a constant sequence of
-commands.
-</li>
-<li>
-A corresponding Debian package has been initially created by Yotam Rubin and
-is now maintained by Risko Gergely, who also uploads it to the Debian pool
-of packages.
-</li>
-</ul>
-</h3>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="./" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./api.html" class="nav">Previous</a></td>
-<td>
-<a href="./freshmeat_effect.html" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/board_gen.html

-<html>
-<head>
-<link rel="StyleSheet" href="./style.css" type="text/css">
-<title>
-Board Auto-Generators
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="./" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./state_representation/original_indices/solution.html" class="nav">Previous</a></td>
-<td>
-<a href="./why_not_cpp.html" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-7 Board Auto-Generators
-</h1>
-<h3 class="notbold">
-<ul>
-<li>
-A short time after the release of Freecell Solver 0.2.0, Eric Warmenhoven
-sent me a program he prepared to generate the initial boards of GNOME
-Freecell so they can later be inputted into Freecell Solver.
-</li>
-<li>
-I thanked him for his effort, and decided to continue the theme.
-</li>
-<li>
-So I wrote similar programs to generate the board layouts of GNOME AisleRiot,
-PySol, and the Microsoft Freecell/Freecell Pro deals (the latter are considered the standard among hard-core Freecell enthusiasts).
-</li>
-<li>
-Some programs have integrated the Freecell Solver library to allow for
-automatically solving a board starting at a position that the player
-has reached.
-</li>
-</ul>
-</h3>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="./" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./state_representation/original_indices/solution.html" class="nav">Previous</a></td>
-<td>
-<a href="./why_not_cpp.html" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/finale/book.html

-<html>
-<head>
-<link rel="StyleSheet" href="../style.css" type="text/css">
-<title>
-Freecell Solver - EoaCP - The Book
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./links.html" class="nav">Previous</a></td>
-<td>
-<b class="nav">Next</b></td>
-</tr>
-</table>
-<h1>
-13.2 Freecell Solver - EoaCP - The Book
-</h1>
-<p>
-I plan to write a book about the development of Freecell Solver. This book
-will cover many more changes that I put into the program, and will cover
-everything in greater detail.
-</p>
-<p>
-The book would be made available on-line at the time of its publishing. If you
-represent a publishing house and would be interested in publishing it,
-please <a href="mailto:shlomif@vipe.technion.ac.il">contact me</a>.
-</p>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./links.html" class="nav">Previous</a></td>
-<td>
-<b class="nav">Next</b></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/finale/index.html

-<html>
-<head>
-<link rel="StyleSheet" href="../style.css" type="text/css">
-<title>
-Finale
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="../" class="nav">Contents</a></td>
-<td>
-<a href="../" class="nav">Up</a></td>
-<td>
-<a href="../freshmeat_effect.html" class="nav">Previous</a></td>
-<td>
-<a href="links.html" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-13 Finale
-</h1>
-<p>
-I hoped you enjoy the lecture, and that it brought or reminded you of
-important programming insights, as much as developing the program was
-beneficial for me in this regard.
-</p>
-<ul>
-<a href="./links.html" class="contents">13.1 Links and References</a><br>
-<a href="./book.html" class="contents">13.2 Freecell Solver - EoaCP - The Book</a><br>
-</ul>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="../" class="nav">Contents</a></td>
-<td>
-<a href="../" class="nav">Up</a></td>
-<td>
-<a href="../freshmeat_effect.html" class="nav">Previous</a></td>
-<td>
-<a href="links.html" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/finale/links.html

-<html>
-<head>
-<link rel="StyleSheet" href="../style.css" type="text/css">
-<title>
-Links and References
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./" class="nav">Previous</a></td>
-<td>
-<a href="./book.html" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-13.1 Links and References
-</h1>
-<h2>Freecell Solver Links</h2>
-<p>
-<a href="http://vipe.technion.ac.il/~shlomif/freecell-solver/">The
-Freecell Solver Homepage</a>
-</p>
-<p>
-<a href="http://fc-solve.berlios.de/">A Mirror at BerliOS</a>
-</p>
-<p>
-<a href="http://freshmeat.net/projects/freecellsolver/">Freshmeat
-Record</a>
-</p>
-<h2>People who were Involved in the Development</h2>
-<p>
-<a href="http://www.itm.mu-luebeck.de/~coolo/">Stephan Kulow</a>
-</p>
-<p>
-<a href="http://members.tripod.com/professor_tom/">Tom Holroyd</a>
-</p>
-<p>
-<a href="http://home.earthlink.net/~fomalhaut/">Michael Keller</a>
-</p>
-<h2>Relevant <a href="http://www.JoelOnSoftware.com/">"Joel On Software"</a>
-articles</h2>
-<p>
-<a href="http://www.joelonsoftware.com/articles/fog0000000043.html">The Joel
-Test</a> - building a package in one step, fixing bugs before writing new code
-and other stuff.
-</p>
-<p>
-<a href="http://www.joelonsoftware.com/articles/fog0000000012.html">Eating
-your own Dog Food</a> - the importance of using your own software.
-</p>
-<p>
-<a href="http://www.joelonsoftware.com/articles/fog0000000020.html">Bloatware
-and the 80/20 Myth</a> - why a feature-rich software needs all its features.
-</p>
-<p>
-<a href="http://www.joelonsoftware.com/articles/fog0000000069.html">Things
-you should never do, Part I</a> - why re-writing an entire codebase from
-scratch is a bad idea.
-</p>
-<p>
-<a href="http://www.joelonsoftware.com/articles/fog0000000319.html">Back
-to Basics</a> - about O(n) lookups and unnecessarily increasing a program's
-complexity by an order of n.
-</p>
-<p>
-<a href="http://www.JoelOnSoftware.com/articles/FiveWorlds.html">Five Worlds</a> -
-about the differences between Shrink-wrap software, one for internal use,
-throwaway, embedded and games.
-</p>
-<p>
-<b>Note:</b> Joel's articles are mostly relevant to commercial, market-place
-software, and should be taken with a grain of salt in regard to writing
-voluntary, open-source one. (and should be taken with a grain of salt in
-any case, because he seems very opinionated)
-</p>
-<h2>General Freecell Links</h2>
-<p>
-<a href="http://home.earthlink.net/~fomalhaut/fcfaq.html">The Freecell FAQ</a>
-- a comprehensive document answering many commonly asked questions about
-Freecell and the Microsoft Deals</a>
-</p>
-<p>
-<a href="http://www.cs.ruu.nl/~hansb/d.freecell/freecellhtml.html">
-An unsolvable Freecell deal</a> - with proof.
-</p>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./" class="nav">Previous</a></td>
-<td>
-<a href="./book.html" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/flame_war.html

-<html>
-<head>
-<link rel="StyleSheet" href="./style.css" type="text/css">
-<title>
-The fc-solve-discuss flame-war
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="./" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./why_not_cpp.html" class="nav">Previous</a></td>
-<td>
-<a href="./api.html" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-9 The fc-solve-discuss flame-war
-</h1>
-<h3 class="notbold">
-<ul>
-<li>
-Recent versions of Freecell Solver pass the moves from the initial position
-to the final solution to the layer above them.
-</li>
-<li>
-The stack -&gt; stack moves are being outputted with the number of cards
-that are moved.
-</li>
-<li>
-Freecell Pro, on the other hand, used to ignore the number of cards and
-expected such moves to comply with what the original Microsoft Freecell
-would do in that case.
-</li>
-<li>
-This caused problems in playback of a large percentage of the games in
-its integration with Freecell Solver.
-</li>
-<li>
-<a href="http://groups.yahoo.com/group/fc-solve-discuss/message/197">A post</a> I made to the mailing list about it sparked a very big flamewar that diverted
-to cover related topics.
-</li>
-<li>
-<a href="http://groups.yahoo.com/group/fc-solve-discuss/message/219">
-I was actually happy</a> that there was some action there.
-</li>
-<li>
-Usually the only things that happen there is that I announce new releases or
-ask the members questions and no-one or few people reply.
-</li>
-<li>
-Eventually, Adrian Ettlinger (an FC-Pro hacker) have extended Freecell Pro
-to make use of an optional number of cards to move argument. This made
-playback of Freecell Solver solutions perfectly smooth.
-</li>
-</ul>
-</h3>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="./" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./why_not_cpp.html" class="nav">Previous</a></td>
-<td>
-<a href="./api.html" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/freshmeat_effect.html

-<html>
-<head>
-<link rel="StyleSheet" href="./style.css" type="text/css">
-<title>
-The Freshmeat Effect (and how to avoid it)
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="./" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./autoconf.html" class="nav">Previous</a></td>
-<td>
-<a href="./finale/" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-12 The Freshmeat Effect (and how to avoid it)
-</h1>
-<h3 class="notbold">
-<ul>
-<li>
-When I created the first version of FCS, and gave it the final touches,
-I decided to call it "Freecell Solver" in order for it to have a
-descriptive title.
-</li>
-<li>
-I posted announcements for the first release, and subsequent (usually
-stable) releases on <a href="http://freshmeat.net/">Freshmeat</a>, and
-so made many people aware of it.
-</li>
-<li>
-Starting at the very first days, a <a href="http://www.google.com/search?q=freecell%20solver">
-Google search for "freecell solver"</a> yielded its homepage as the
-first link.
-</li>
-<li>
-Today, the situation is much worse: now most of the Google hits of this query
-have something to do with it.
-</li>
-<li>
-The query "freecell solver" is generic enough that someone may wish to
-find any of the available Freecell solvers.
-</li>
-<li>
-Solution: do your best to give an original name for your program, so it
-won't clog up searches.
-</li>
-</ul>
-</h3>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="./" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./autoconf.html" class="nav">Previous</a></td>
-<td>
-<a href="./finale/" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/index.html

-<html>
-<head>
-<link rel="StyleSheet" href="./style.css" type="text/css">
-<title>
-Freecell Solver - Evolution of a C Program
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="./" class="nav">Contents</a></td>
-<td>
-<b class="nav">Up</b></td>
-<td>
-<b class="nav">Previous</b></td>
-<td>
-<a href="./intro/" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-Freecell Solver - Evolution of a C Program
-</h1>
-<ul>
-<a href="./intro/" class="contents">1 Introduction</a><br>
-<ul>
-<a href="./intro/rules/" class="contents">1.1 Rules of the Game</a><br>
-<ul>
-<a href="./intro/rules/strategies.html" class="contents">1.1.1 Common Strategies</a><br>
-</ul>
-<a href="./intro/disclaimer.html" class="contents">1.2 Copyrights and Disclaimer</a><br>
-</ul>
-<a href="./0.2/" class="contents">2 Freecell Solver 0.2's Architecture</a><br>
-<ul>
-<a href="./0.2/scan.html" class="contents">2.1 The Scan that was used</a><br>
-</ul>
-<a href="./states_collection/" class="contents">3 Evolution of the States' Collection</a><br>
-<ul>
-<a href="./states_collection/list.html" class="contents">3.1 Initial Perl Version - Flat List</a><br>
-<a href="./states_collection/qsorted_sort_margin.html" class="contents">3.2 First C Version - Sorted Array</a><br>
-<a href="./states_collection/b_search_merge.html" class="contents">3.3 Binary-Search-Based Merge to Add the Sort Margin</a><br>
-<a href="./states_collection/array_of_ptrs.html" class="contents">3.4 Array of Pointers</a><br>
-<a href="./states_collection/balanced_binary_tree.html" class="contents">3.5 A Balanced Binary Tree</a><br>
-<a href="./states_collection/hash/" class="contents">3.6 A Hash Table</a><br>
-<ul>
-<a href="./states_collection/hash/function.html" class="contents">3.6.1 The Choice of a Hash Function</a><br>
-<a href="./states_collection/hash/optimizations.html" class="contents">3.6.2 Hash Optimizations</a><br>
-</ul>
-</ul>
-<a href="./moves/" class="contents">4 Moves Management</a><br>
-<ul>
-<a href="./moves/meta.html" class="contents">4.1 Meta-Moves (instead of Atomic ones)</a><br>
-<a href="./moves/stack-to-stack.html" class="contents">4.2 Stack to Stack Moves</a><br>
-<a href="./moves/generalization.html" class="contents">4.3 More Moves Generalization</a><br>
-<a href="./moves/non-solvable-deals.html" class="contents">4.4 Non-Solvable Deals</a><br>
-</ul>
-<a href="./scans/" class="contents">5 Scanning</a><br>
-<ul>
-<a href="./scans/tests_order.html" class="contents">5.1 Specifying the Order of Tests</a><br>
-<a href="./scans/befs.html" class="contents">5.2 Best-First Search</a><br>
-<a href="./scans/soft_dfs.html" class="contents">5.3 Soft DFS</a><br>
-<a href="./scans/brfs_optimization.html" class="contents">5.4 The BrFS Optimization Scan</a><br>
-</ul>
-<a href="./state_representation/" class="contents">6 The State Representation</a><br>
-<ul>
-<a href="./state_representation/data_type_diet.html" class="contents">6.1 Reducing the Data Type Bit-Width</a><br>
-<a href="./state_representation/ptrs_to_stacks.html" class="contents">6.2 Pointers to Stacks</a><br>
-<a href="./state_representation/original_indices/" class="contents">6.3 Remembering the Original Stack and Freecell Locations</a><br>
-<ul>
-<a href="./state_representation/original_indices/solution.html" class="contents">6.3.1 Solution</a><br>
-</ul>
-</ul>
-<a href="./board_gen.html" class="contents">7 Board Auto-Generators</a><br>
-<a href="./why_not_cpp.html" class="contents">8 Why not C++?</a><br>
-<a href="./flame_war.html" class="contents">9 The fc-solve-discuss flame-war</a><br>
-<a href="./api.html" class="contents">10 The story of the user API</a><br>
-<a href="./autoconf.html" class="contents">11 Auto-confisication and Friends</a><br>
-<a href="./freshmeat_effect.html" class="contents">12 The Freshmeat Effect (and how to avoid it)</a><br>
-<a href="./finale/" class="contents">13 Finale</a><br>
-<ul>
-<a href="./finale/links.html" class="contents">13.1 Links and References</a><br>
-<a href="./finale/book.html" class="contents">13.2 Freecell Solver - EoaCP - The Book</a><br>
-</ul>
-</ul>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="./" class="nav">Contents</a></td>
-<td>
-<b class="nav">Up</b></td>
-<td>
-<b class="nav">Previous</b></td>
-<td>
-<a href="./intro/" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/intro/disclaimer.html

-<html>
-<head>
-<link rel="StyleSheet" href="../style.css" type="text/css">
-<title>
-Copyrights and Disclaimer
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./rules/strategies.html" class="nav">Previous</a></td>
-<td>
-<a href="./../0.2/" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-1.2 Copyrights and Disclaimer
-</h1>
-<p>
-Freecell Solver is distributed under the public domain. This lecture, on
-the other hand, is a copyrighted, non free-content work. All rights are
-reserved.
-</p>
-<p>
-I hereby disclaim any damage that reading this work may cause you, either
-implicit or explicit, direct or indirect.
-</p>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./rules/strategies.html" class="nav">Previous</a></td>
-<td>
-<a href="./../0.2/" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/intro/index.html

-<html>
-<head>
-<link rel="StyleSheet" href="../style.css" type="text/css">
-<title>
-Introduction
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="../" class="nav">Contents</a></td>
-<td>
-<a href="../" class="nav">Up</a></td>
-<td>
-<a href="../" class="nav">Previous</a></td>
-<td>
-<a href="rules/" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-1 Introduction
-</h1>
-<h3 class="notbold">
-<ul>
-<li>
-I wrote the first version of
-<a href="http://vipe.technion.ac.il/~shlomif/freecell-solver/">
-Freecell Solver</a> during a Spring break, because I was interested
-to find out if a design I thought about would work.
-</li>
-<li>
-Since then, it saw 13 major versions, each one adding more features
-or improving the overall speed or memory consumption.
-</li>
-<li>
-In this lecture, I would like to tell about some of the changes I
-embodied in the program, many of which would be relevant to programming
-different applications.
-</li>
-</ul>
-</h3>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="../" class="nav">Contents</a></td>
-<td>
-<a href="../" class="nav">Up</a></td>
-<td>
-<a href="../" class="nav">Previous</a></td>
-<td>
-<a href="rules/" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/intro/rules/index.html

-<html>
-<head>
-<link rel="StyleSheet" href="../../style.css" type="text/css">
-<title>
-Rules of the Game
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="../../" class="nav">Contents</a></td>
-<td>
-<a href="../" class="nav">Up</a></td>
-<td>
-<a href="../" class="nav">Previous</a></td>
-<td>
-<a href="strategies.html" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-1.1 Rules of the Game
-</h1>
-<h3 class="notbold">
-<ul>
-<li>
-There are 8 stacks of cards, 4 freecells, and 4 foundations.
-The game is played with one deck.
-</li>
-<li>
-At the beginning of play, the cards are dealt to the stacks
-(4*7+4*6). The faces of all the cards are visible at the beginning
-of play.
-</li>
-<li>
-A freecell can hold one <u>single</u> card.
-</li>
-<li>
-The foundations are built from ace to king and the object of the
-game is to move all the cards to the foundations.
-</li>
-<li>
-A card can be placed on top of a card that is of the opposite
-colour, and is higher in rank by 1, assuming the latter is at
-the top of a stack.
-</li>
-<li>
-An empty stack may be filled with any card.
-</li>
-<li>
-An atomic move consists of:
-<ul>
-   <li>
-   Moving a card from a stack to a vacant freecell.
-   </li>
-   <li>
-   Moving a card from a freecell to a parent card on a stack.
-   </li>
-   <li>
-   Moving a card from the top of a stack, on top of a parent
-   card on a different stack.
-   </li>
-   <li>
-   Moving a card from the top of a stack or from a freecell to the
-   foundations.
-   </li>
-</ul>
-</li>
-</ul>
-</h3>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="../../" class="nav">Contents</a></td>
-<td>
-<a href="../" class="nav">Up</a></td>
-<td>
-<a href="../" class="nav">Previous</a></td>
-<td>
-<a href="strategies.html" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/intro/rules/strategies.html

-<html>
-<head>
-<link rel="StyleSheet" href="../../style.css" type="text/css">
-<title>
-Common Strategies
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="./../../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./" class="nav">Previous</a></td>
-<td>
-<a href="./../disclaimer.html" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-1.1.1 Common Strategies
-</h1>
-<h3 class="notbold">
-<ul>
-<li>
-A sequence of more than one card can be moved by moving the top
-cards to the freecells or to unoccupied stacks. This is commonly called
-a sequence move or a <i>supermove</i> if it involves temporarily putting some
-cards in a vacant stack.
-</li>
-<li>
-Sometimes, it is useful to move cards to the freecells or temporarily
-to an empty column, so the card below them can serve as a basis for
-a sequence.
-</li>
-</ul>
-</h3>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="./../../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./" class="nav">Previous</a></td>
-<td>
-<a href="./../disclaimer.html" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/move_stacks.html

-<html>
-<head>
-<link rel="StyleSheet" href="./style.css" type="text/css">
-<title>
-The Move Stacks
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="./" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./freshmeat_effect.html" class="nav">Previous</a></td>
-<td>
-<b class="nav">Next</b></td>
-</tr>
-</table>
-<h1>
-13 The Move Stacks
-</h1>
-<h1><font color="red">FILL IN</font></h1>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="./" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./freshmeat_effect.html" class="nav">Previous</a></td>
-<td>
-<b class="nav">Next</b></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/moves/generalization.html

-<html>
-<head>
-<link rel="StyleSheet" href="../style.css" type="text/css">
-<title>
-More Moves Generalization
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./stack-to-stack.html" class="nav">Previous</a></td>
-<td>
-<a href="./non-solvable-deals.html" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-4.3 More Moves Generalization
-</h1>
-<h3 class="notbold">
-<ul>
-<li>
-Someone reported that some of the Microsoft boards were reported as
-unsolvable by FCS.
-</li>
-<li>
-I realized some of my meta-moves were not generic enough so I generalized
-them.
-</li>
-<li>
-Now, Freecell Solver can solve all of the Microsoft deals (except 11982
-which was reported to be unsolvable by any human or computerized solver).
-</li>
-<li>
-Somewhat later,
-<a href="http://members.tripod.com/professor_tom/">Tom Holroyd</a>
-reported a few
-<a href="http://sonicca.home.dk3.com/cardz/games/s/sea_towers/">
-"Seahaven Towers"</a> boards which he generated to be unsolvable.
-</li>
-<li>
-Once again I was able to improve the solver to accommodate for solving them.
-</li>
-</ul>
-</h3>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./stack-to-stack.html" class="nav">Previous</a></td>
-<td>
-<a href="./non-solvable-deals.html" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/moves/index.html

-<html>
-<head>
-<link rel="StyleSheet" href="../style.css" type="text/css">
-<title>
-Moves Management
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="../" class="nav">Contents</a></td>
-<td>
-<a href="../" class="nav">Up</a></td>
-<td>
-<a href="../states_collection/hash/optimizations.html" class="nav">Previous</a></td>
-<td>
-<a href="meta.html" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-4 Moves Management
-</h1>
-<ul>
-<a href="./meta.html" class="contents">4.1 Meta-Moves (instead of Atomic ones)</a><br>
-<a href="./stack-to-stack.html" class="contents">4.2 Stack to Stack Moves</a><br>
-<a href="./generalization.html" class="contents">4.3 More Moves Generalization</a><br>
-<a href="./non-solvable-deals.html" class="contents">4.4 Non-Solvable Deals</a><br>
-</ul>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="../" class="nav">Contents</a></td>
-<td>
-<a href="../" class="nav">Up</a></td>
-<td>
-<a href="../states_collection/hash/optimizations.html" class="nav">Previous</a></td>
-<td>
-<a href="meta.html" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/moves/meta.html

-<html>
-<head>
-<link rel="StyleSheet" href="../style.css" type="text/css">
-<title>
-Meta-Moves (instead of Atomic ones)
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./" class="nav">Previous</a></td>
-<td>
-<a href="./stack-to-stack.html" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-4.1 Meta-Moves (instead of Atomic ones)
-</h1>
-<h3 class="notbold">
-<ul>
-<li>
-Starting from the early versions, I decided to use <u>meta-moves</u> instead
-of <u>atomic moves</u>.
-</li>
-<li>
-Namely, I do several moves at once while trying to achieve a certain
-"desirable" end in mind.
-</li>
-<li>
-Examples:
-<ul>
-<li>
-Put top stack cards in the foundations.
-</li>
-<li>
-Put Freecell cards in the foundations.
-</li>
-<li>
-Put non-top stack cards in the foundations. (by moving cards above them
-to freecells or vacant stacks).
-</li>
-<li>
-Move stack cards to different stacks.
-</li>
-<li>
-Move sequences of cards onto free stacks.
-</li>
-</ul>
-</li>
-</ul>
-</h3>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./" class="nav">Previous</a></td>
-<td>
-<a href="./stack-to-stack.html" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/moves/non-solvable-deals.html

-<html>
-<head>
-<link rel="StyleSheet" href="../style.css" type="text/css">
-<title>
-Non-Solvable Deals
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./generalization.html" class="nav">Previous</a></td>
-<td>
-<a href="./../scans/" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-4.4 Non-Solvable Deals
-</h1>
-<h3 class="notbold">
-<ul>
-<li>
-Adrian Ettlinger sent me a few layouts he tested, with fewer Freecells
-than usual, that Freecell Solver could not solve.
-</li>
-<li>
-I realized that the reason Freecell Solver could not solve them was that
-a meta-move moved two cards in the opposite manner that would allow
-for a solution.
-</li>
-<li>
-The only way I could think of to solve this without messing my code completely
-would be to code move functions that would simply perform atomic moves.
-</li>
-<li>
-It was not done, yet.
-</li>
-</ul>
-</h3>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./generalization.html" class="nav">Previous</a></td>
-<td>
-<a href="./../scans/" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/moves/non-solveable-deals.html

-<html>
-<head>
-<link rel="StyleSheet" href="../style.css" type="text/css">
-<title>
-Non-Solveable Deals
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./generalization.html" class="nav">Previous</a></td>
-<td>
-<a href="./../scans/" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-4.4 Non-Solveable Deals
-</h1>
-<h3 class="notbold">
-<ul>
-<li>
-Adrian Ettlinger sent me a few layouts he tested, with fewer Freecells
-than usual, that Freecell Solver could not solve.
-</li>
-<li>
-I realized that the reason Freecell Solver could not solve them was that
-a meta-move moved two cards in the opposite manner that would allow
-for a solution.
-</li>
-<li>
-The only way I could think of to solve this without messing my code completely
-would be to code move functions that would simply perform atomic moves.
-</li>
-<li>
-It was not done, yet.
-</li>
-</ul>
-</h3>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./generalization.html" class="nav">Previous</a></td>
-<td>
-<a href="./../scans/" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/moves/stack-to-stack.html

-<html>
-<head>
-<link rel="StyleSheet" href="../style.css" type="text/css">
-<title>
-Stack to Stack Moves
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./meta.html" class="nav">Previous</a></td>
-<td>
-<a href="./generalization.html" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-4.2 Stack to Stack Moves
-</h1>
-<h3 class="notbold">
-<ul>
-<li>
-To test the initial versions I generated a 1000 test boards.
-</li>
-<li>
-I noticed some of them were not solvable.
-</li>
-<li>
-I played some of them manually, and noticed they were solvable using
-a move that I missed.
-</li>
-<li>
-The latter was a meta-move that placed a card on a parent card on the
-same stack
-</li>
-<li>
-By implementing it, all of my boards turned out to be solvable.
-</li>
-</ul>
-</h3>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./meta.html" class="nav">Previous</a></td>
-<td>
-<a href="./generalization.html" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/scans/a_star.html

-<html>
-<head>
-<link rel="StyleSheet" href="../style.css" type="text/css">
-<title>
-A*
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./original_hard_dfs.html" class="nav">Previous</a></td>
-<td>
-<a href="./soft_dfs_rev1.html" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-5.2 A*
-</h1>
-<h1><font color="red">FILL IN</font></h1>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./original_hard_dfs.html" class="nav">Previous</a></td>
-<td>
-<a href="./soft_dfs_rev1.html" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/scans/befs.html

-<html>
-<head>
-<link rel="StyleSheet" href="../style.css" type="text/css">
-<title>
-Best-First Search
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./tests_order.html" class="nav">Previous</a></td>
-<td>
-<a href="./soft_dfs.html" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-5.2 Best-First Search
-</h1>
-<h3 class="notbold">
-<ul>
-<li>
-Best-First Search is a type of scan that:
-<ol>
-<li>
-Gives priority to each state based on some weight function.
-</li>
-<li>
-Determines which state to go to next, according to their highest
-priority.
-</li>
-</ol>
-</li>
-<li>
-I implemented Best-First Search whose weight function was a linear
-combination of several weighting functions I thought about.
-</li>
-<li>
-It turned out that for most boards, I could find some relative
-weights that could solve it very quickly, but no configuration
-was good for any board.
-</li>
-</ul>
-</h3>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./tests_order.html" class="nav">Previous</a></td>
-<td>
-<a href="./soft_dfs.html" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/scans/bfs_optimization.html

-<html>
-<head>
-<link rel="StyleSheet" href="../style.css" type="text/css">
-<title>
-The BFS Optimization Scan
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./soft_dfs.html" class="nav">Previous</a></td>
-<td>
-<a href="./../state_representation/" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-5.4 The BFS Optimization Scan
-</h1>
-<h3 class="notbold">
-<ul>
-<li>
-<a href="http://www.itm.mu-luebeck.de/~coolo/">Stephan Kulow</a>
-(of KDE fame) complained that Freecell Solver generated some extremely
-long solutions, which just moved sequences from one stack to the the other.
-</li>
-<li>
-I suggested to use a Breadth-First Search scan restricted to the states
-that were found in the solution path to try to eliminate redundant moves.
-</li>
-<li>
-This turned out to be quite beneficial in most cases.
-</li>
-<li>
-I later on implemented a scheme in which each state stored a pointer
-to its "parent" state (the state from which it was initially discovered).
-and used back-tracking to trace the solution down there.
-</li>
-<li>
-This turned out to optimize solutions as well, but the BrFS optimization
-improved it a bit too sometimes.
-</li>
-</ul>
-</h3>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./soft_dfs.html" class="nav">Previous</a></td>
-<td>
-<a href="./../state_representation/" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/scans/brfs_optimization.html

-<html>
-<head>
-<link rel="StyleSheet" href="../style.css" type="text/css">
-<title>
-The BrFS Optimization Scan
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./soft_dfs.html" class="nav">Previous</a></td>
-<td>
-<a href="./../state_representation/" class="nav">Next</a></td>
-</tr>
-</table>
-<h1>
-5.4 The BrFS Optimization Scan
-</h1>
-<h3 class="notbold">
-<ul>
-<li>
-<a href="http://www.itm.mu-luebeck.de/~coolo/">Stephan Kulow</a>
-(of KDE fame) complained that Freecell Solver generated some extremely
-long solutions, which just moved sequences from one stack to the the other.
-</li>
-<li>
-I suggested to use a Breadth-First Search scan restricted to the states
-that were found in the solution path to try to eliminate redundant moves.
-</li>
-<li>
-This turned out to be quite beneficial in most cases.
-</li>
-<li>
-I later on implemented a scheme in which each state stored a pointer
-to its "parent" state (the state from which it was initially discovered).
-and used back-tracking to trace the solution down there.
-</li>
-<li>
-This turned out to optimize solutions as well, but the BrFS optimization
-improved it a bit too sometimes.
-</li>
-</ul>
-</h3>
-<hr>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./soft_dfs.html" class="nav">Previous</a></td>
-<td>
-<a href="./../state_representation/" class="nav">Next</a></td>
-</tr>
-</table>
-</body>
-</html>

File vipe/lecture/Freecell-Solver/slides/scans/derived_states_list.html

-<html>
-<head>
-<link rel="StyleSheet" href="../style.css" type="text/css">
-<title>
-Abstracting the Scans through the Derived States List
-</title>
-</head>
-<body>
-<table summary="">
-<tr>
-<td>
-<a href="./../" class="nav">Contents</a></td>
-<td>
-<a href="./" class="nav">Up</a></td>
-<td>
-<a href="./bfs_optimization.html" class="nav">Previous</a></td>