Thanks Paul for your reply.

You may be right about my placement checker. What I currently do is as
follows:

Starting with first char of word I want to place, loop through the
characters of each word that is already on the puzzle and see if a match can
be found. If a match is found then I calculate where the new word would
appear on the grid based on crossing the existing word where they characters
match. 

I then check if there are any words in the way or the new word goes off the
grid.
I also check that the new word is not adjacent to another word

My code does not allow words to be added unless they cross another word so
perhaps allowing disconnected placement would speed things up. I will give
it a try.

Thanks again for your help on this.

Paul





-----Original Message-----
From: flashcoders-boun...@chattyfig.figleaf.com
[mailto:flashcoders-boun...@chattyfig.figleaf.com] On Behalf Of Paul Andrews
Sent: 02 June 2009 11:54
To: Flash Coders List
Subject: Re: [Flashcoders] Crossword generator advice

Paul Steven wrote:
> Here is a link to the crossword generator in its current state.
>
> http://www.mediakitchen.co.uk/crossword.html
>
> Cheers
>
> Paul
>
> -----Original Message-----
> From: flashcoders-boun...@chattyfig.figleaf.com
> [mailto:flashcoders-boun...@chattyfig.figleaf.com] On Behalf Of Paul
Steven
> Sent: 02 June 2009 10:27
> To: 'Flash Coders List'
> Subject: RE: [Flashcoders] Crossword generator advice
>
> Sorry to drag this one out but I have one last question.
>
> I implemented the recursive solution as Paul Andrews and Charles suggested
> however I find that it can take up to 8 minutes to generate a solution
> (which incidentally is pretty much the same amount of time my non
recursive
> implementation takes)
>   
I think there's a problem in the algorithm again or you have a very 
inefficient placement checker.

A definite improvement to my suggestion would be to have a two stage 
placement algorithm - first of all only laying out words if they overlap 
another word, then if no solution is found by laying out the word as an 
overlap, it would then attempt a disconnected placement. I think that 
would improve things.

It's difficullt to know why it takes so long without seeing the code.

Paul


> If I order my words from largest to smallest first this actually seems to
> result in a longer time. I am thinking this is perhaps because one of the
> longest words (tarragon) is at the bottom of the solution:
> http://www.mediakitchen.co.uk/solution.gif
>
> Anyway I do not mind it taking so long as a new crossword will only be
> generated once a week. However I am curious as to whether this sounds like
a
> flaw in my code or if it is just the result of having to try so many
> combinations to find the unique solution?
>
> If I adjust my list of words into the order in which it looks like they
> would be placed one at a time onto the grid, then the solution only takes
> about 3 seconds to generate.
>
> Because I know there is the possibility that having the list ordered in a
> particular way can result in a super fast puzzle creation time, I am
> wondering if it is worth just randomising the list every 10 seconds if a
> solution has not been found?
>
> Promise not to ask any more questions about this crossword generator after
> this one:)
>
> Thanks
>
> Paul
>
> -----Original Message-----
> From: flashcoders-boun...@chattyfig.figleaf.com
> [mailto:flashcoders-boun...@chattyfig.figleaf.com] On Behalf Of Paul
Andrews
> Sent: 01 June 2009 11:14
> To: Flash Coders List
> Subject: Re: [Flashcoders] Crossword generator advice
>
> You should use recursion.
>
> At each stage you should loop through the available words, trying to lay 
> them onto the crossword area.
>
> Paul
>
> It goes a bit like this:
>
> var wordList = ["word1","word2","word3", ..   ];
> var xwordSolution:XwordSolution;
> var currentSolution= new XwordSolution(maxWidth, maxHeight); // emptyGrid
>
> xwordSolution = layoutXword(wordList, currentSolution);
>
> if (xwordSolution.isValid())
> trace("Solved!")
> else
> trace("no solution found");
>
> function layoutXword(words:Array, 
> currentSolution:XwordSolution):XwordSolution
> {
> while (words.length > 0){
> currentWord = words.pop();
>
> // horizontal
>
> newSolution = layoutHorizontalWord(currentWord, currentSolution);
> if (newSolution.isValid())
> {
>     newSolution = layoutXword(words, newSolution );
>     if (newSolution.isValid())
>         return newSolution; // solved
> }
> // the horizontal layout wasn't possible, try vertical
> newSolution = layoutVerticalWord(currentWord, currentSolution);
> if (newSolution.isValid())
> {
>     newSolution = layoutXword(words, newSolution );
>     if (newSolution.isValid())
>         return newSolution; // solved
> }
> // couldn't layout this word, try the next
> }
> // Couldn't layout any of the words - solution failed.
> return newSolution; // this will be failed
> }
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> ----- Original Message ----- 
> From: "Paul Steven" <paul_ste...@btinternet.com>
> To: "'Flash Coders List'" <flashcoders@chattyfig.figleaf.com>
> Sent: Monday, June 01, 2009 10:33 AM
> Subject: RE: [Flashcoders] Crossword generator advice
>
>
>   
>> I am still struggling to find a solution to this crossword generator and
>> could do with some advice on a possible solution I want to try.
>>
>> If I enter my list of 16 words in a particular order (an order based on 
>> what
>> looks like the order the solution would place them), the generator
creates
>> the puzzle in a matter of seconds.
>>
>> However if I enter them in a different order, the generator always breaks
>> out of the loop by my exit condition (number of loops > 5000). I am 
>> assuming
>> this is either due to an error in my code or due to the fact there are so
>> many combinations to try.
>>
>> I am therefore thinking a possible solution is to try every permutation
(I
>> think this is the right word) of the 16 words. If I am correct there
would
>> be 240 possible permutations. ((X - 1) * X) where X is the number of
items
>> in the list.
>>
>> I am not sure however how to create the 240 variations of the list.
>>
>> Any advice on how to create these 240 permutations of the list would be 
>> much
>> appreciated.
>>
>> Thanks
>>
>> Paul
>>
>> ____

_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Reply via email to