As you've discovered, FcPro doesn't monitor your moves for impending
failure during interactive play. It does, however, let you know when you
encounter immediate failure. Although I don't know for sure, I suspect
that the solvers take too much time to make them viable as an integral
part of the interactive game. I think you would find it frustrating to
modify FcPro to warn of impending failure.
There's the technical definition of a Hash Table, but I have a feeling
you're looking for something more tangible. Hash Tables are a fast way
of storing and retrieving data quickly by using "hashed" keys. The
hashing process converts your data into an index value that is used in
turn to store the data in an array. When collisions occur, they create
problems that have to be resolved. Hash Tables have their pros and cons
depending on the data you store, the size of your array, and the
effectiveness of your hashing algorithm. A lot of programmers love them
... and numerous hashing algorithms have evolved. I've never been all
that comfortable with them. If I want to sort, then I use Insertion
Sort, Shell Sort, and Quick Sort on fixed arrays -- depending on the
array size and random nature of the data. I use Binary Trees, Splay
Trees, and AVL Trees otherwise. If I have a lot of data, then I'll use a
database -- for which I wrote software as a living for a number of
years. Now, you can't get me near a database with a cattle prod!
Here's a coupla (my) definitions and (probably obvious to you) suggestions.
An Empty Column has no cards. (very obvious!)
A Descending Column is one where the cards are in descending (or equal)
order by face value.
A Perfect Column is a Descending Column where the cards are in
sequential order by face value and alternating suit color.
A Shuffled Column does not meet any of the above definitions.
The "order" of a column is the largest subset of cards, from the top
(exposed) card, that would form a Perfect Column by themselves.
An Empty Column has order "0". A Perfect Column has its order equal to
the number of cards in the column. All others have an order that is less
than the number of cards in the column. When the cards are originally
dealt, the columns often have an order of "1".
* Never move any card(s) from a Perfect Column to a free cell or a
Shuffled Column.
* Never move any card(s) from a Perfect Column to a free cell or an
Empty Column if the order of the source column is greater-than three.
* Only make a single or multi-card move from one Perfect Column to
another if the largest card value in the destination column is greater
than the largest card value in the source column.
* The closer a column's order comes to its card count, the less
desirable that column is for your next move -- except to a home cell or
a Perfect Column.
* Don't be in a rush to move cards to the home cells. Moving cards too
soon is a sure-fire way to create and impending failure. (PatSolve seems
to know of an exception to this premise.)
* Don't rush to move cards to the free cells. If a card can be moved to
another, non empty column, then try that first.
* Most solutions involve stacking several cards onto a few Shuffled
Columns in order to create an Empty Column which will then become a
Perfect Column as it's filled. The trick is in finding suitable Shuffled
Columns.
These suggestions aren't "set in concrete", but they should get you past
a lot of circular card motion should you give them a try. Except in the
most extreme of cases, I don't see them causing your solver to fail in
finding a solution.
Good Luck!
HELSER ERIC JOSEPH wrote:
> In Freecell, there are two types of 'failure'- Impending, and
> Immediate. Impending means that you have no chance of success from
> your current position, and Immediate means that you have no legal
> moves left to make, and therefore no chance to win.
>
> For example, using my ubiquitous MS Deal #1, the opening sequence "1a,
> 1b, 1c, 1d" makes the position an impending failure. FCPro says it's
> impossible, but lets you continue playing, as there are still legal
> moves yet to make. In this case: one. Move "16" is immediate. MS Deal
> 11982 is impending right from the start.
>
> Is there a program (or a way to modify FCPro) that will allow you to
> know when you're screwed over before you get to a total table lockup?
> If I recall right, there was a program that warned you when "There is
> no longer any way to win. Start over, new game, continue..." but I
> don't think it was Freecell.
>
> Also, what exactly *IS* a Hash table? To me, it sounds like something
> you use to make breakfast foods. I know it has something to do with
> arrays...
>
> Progress on my solver so far: can evaluate all branches up to 1a 1b 1c
> 8d, where it basically dies. Instead of re-creating the ban list on
> every move, I'm porting it around as a separate array thing. Trying to
> make it a dynamically sized list isn't working out AT ALL, so I'm
> going to convert it to a list of bools tomorrow... or today, I guess.
Received on Thu Nov 20 2003 - 05:34:25 IST