[Israel.pm] New Solver for "Black Hole" Solitaire (in Perl)
Levenglick Dov-RM07994
RM07994 at freescale.com
Sun Jan 10 21:19:37 PST 2010
Very nice - even though the most significant thing I'll be taking from
this email is Perl's vec function which somehow escaped my radar until
now.
Best Regards,
Dov Levenglick
SmartDSP OS Development Leader
-----Original Message-----
From: perl-bounces at perl.org.il [mailto:perl-bounces at perl.org.il] On
Behalf Of Shlomi Fish
Sent: Sunday, January 10, 2010 22:32
To: Perl in Israel
Subject: [Israel.pm] New Solver for "Black Hole" Solitaire (in Perl)
Hi all!
I wrote a new solver for the solitaire "Black Hole", and it can be found
here:
http://svn.berlios.de/svnroot/repos/fc-solve/black-hole-solitaire/
Here's the complete story:
today I was going to play a game on http://www.brainbashers.com/ when I
remembered the Penguin Solitaire variant, which is similar to Freecell
and
which I wanted to cover on the Cards Wikia. So I did a Google search for
"penguin solitaire" and saw it had a page on the wikipedia:
http://en.wikipedia.org/wiki/Penguin_%28solitaire%29
There I saw that it was invented by David Parlett:
http://en.wikipedia.org/wiki/David_Parlett
and there I saw he also invented a solitaire called "Black Hole":
http://en.wikipedia.org/wiki/Black_Hole_%28solitaire%29
So I looked for it in PySolFC, read the instructions there and started
to
play. The game involves putting a card that is one above or below the
foundation (wrapping from kings to aces). I noticed that there wasn't
any
over-populated talon or something like that there, which meant that I
could
probably build a DFS-based solver for it. So I set out to see if it was
possible.
The first thing I did was to adapt my PySol/PySolFC game generator to
generate
the initial board of the PySolFC deals. This turned out to be a very
complicated and frustrating task for me, because I had to understand
what's
going on with the code. But after a lot of playing with it, I was able
to get
it to generate the initial deals. The changes for that are in the
Freecell
Solver trunk now.
Then I started working on the solver. I decided to write it in Perl 5
because
it's a good prototyping language and I know it well. When writing it, I
heavily optimised for speed and low memory consumption by using bit
fields (
see http://perldoc.perl.org/functions/vec.html ) and a gigantic hash
lookup.
Then, after it was written, came the moment of truth: I ran it on the
board
and it reported success. Great! But what's the solution? So I added some
solution tracing logic, to output the cards that should be moved. Then I
was
able to play it and the game was solved. Yay!
I tried it on another game and it also worked. Then I ran it on the
first few
games. Game #1 was reported as unsolvable, Game #2 was solved after a
while,
and Game #3 consumed over 15% of my RAM and then was solved.
So it seems to be working nicely. The solver's code is made available
under
the permissive MIT/X11 licence - share and enjoy.
Regards,
Shlomi Fish
--
-----------------------------------------------------------------
Shlomi Fish http://www.shlomifish.org/
"Humanity" - Parody of Modern Life - http://shlom.in/humanity
Bzr is slower than Subversion in combination with Sourceforge.
( By: http://dazjorz.com/ )
_______________________________________________
Perl mailing list
Perl at perl.org.il
http://mail.perl.org.il/mailman/listinfo/perl
More information about the Perl
mailing list