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)
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 _______________________________________________ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders