Slot Size Crossword
How to build a crossword
Here's how to build a crossword for fun, to share with your friends, your class or your club – in seven simple steps
Our crossword puzzle maker allows you to add images, colors and fonts to create professional looking printable crossword puzzles. No registration needed to make free, professional looking crossword puzzles! An HO slotcar crossword puzzle for beginners to intermediates. Commonly used size term. Longest lived HO slotcar maker. Cottage car producer (initials). Well known slot racing organization. Place to run your cars.
Step 1 – Language, theme and size
This is the fun part, as there are so many possibilities. You may have a theme in mind from the start, or you may be using the crossword as a teaching tool. Or how about a crossword based on a certain shape?
Usually the clues and answers of each crossword are in the same language, but this is not necessary. They can be in different languages, e.g. the clues in Afrikaans and the answers in Esperanto. Generally each crossword should be classified as the language of the answers. So, for example, if the clues are in English and the answers are in German, then set the crossword language to German.
Step 2 – Start building the crossword
Go to the Build crosswords page on PuzzleFoundry and click the “Create new crossword” button.
Choose the type, difficulty level, title and language for your crossword. Note, these settings can be changed later if you change your mind!Choose a “save” number from 1 to 9. You can work on and save up to 9 crosswords at a time. Crossword size is restricted to 21x21 (or 9x9 for smartphones).
Now begin to enter your clues and answers, together with the row and column where each word starts. You can add more clues using the “Add a clue row” button. Check your crossword regularly using the “Display my Crossword” button. Start with some obvious words that match your theme or mood, step 3 will explain how you can find more words to fit into the crossword.
You can always delete clues by deleting the answer.
Tips –
- Start in the corner and build your crossword from there, trying to keep it symmetrical
- Ensure that your crossword density remains good by leaving only one blank space between parallel words.
- Try to avoid using many short words. Use short words as fillers at the end.
- Look at other people's puzzles for inspiration on crossword shapes
Optimum Method: Use the 'place word' function
This function automatically places words in the most ideal location on your puzzle.
Select the 'Expand puzzle' checkbox until the puzzle is the right size.This will allow the placement of words outside the displayed crossword panel.
You can also use the word template to find a word, and then do automatic placement with 'Place word on puzzle'.
Some puzzles are created with high density. Such puzzles, for example, have areas on the riddle where a 3x3 set of blocks contains only letters (no black cells). With such puzzles one must make invalid placements that only become valid with the crosswise placement of a word.Select the 'Allow unresolved placement' option box for 'invalid' placements in high density puzzles.
Step 3 – Find words using word pattern
The (word pattern and thesaurus search](/wiki/en/WordSearch) is provided at the bottom of the build crosswords screen. This is your most powerful tool to help find words that fit into your crossword. The word pattern enables you to search for all the words that match a certain configuration of letters.
For example you may need a seven letter word starting with “s” and with an “r” as the fifth letter.Seeking word pattern s???r??
finds the following words for you to chose from for your crossword:saffron, several, sheared, shearer, smeared, sparrow, spheres, spurred, squares, stirred, stirrer, stirrup, synergy
Go to the Search Wiki page for more information on other searches you can use.
Step 4 – Remember to Save
You can have up to 9 saved crosswords that you are working on at any time. Before you save your crossword, select a “save” slot between 1 and 9 (at the top of the page).Remember that re-using a slot will over-write any crossword saved to that slot previously.
The system checks for the crosswords errors when you save and will indicate clue errors on the right-hand side of your clues.
Step 5 – Test clues, test for errors
Test your clues with a friend, or put the crossword to one side and come back later to check if the clues still make sense.Note that most people tend to make the clues too hard …
When you save your crossword, the system checks if the puzzle conforms to crossword requirements. A message is displayed next to the clues when the word or clue does not comply with crossword requirements.
The system will not allow you to commit your crossword whilst it has errors. The system checks for the following errors:
- two words crossing each other should have the same letter on the crossing square
- A fundamental crossword rule is that every word that crosses another word needs a clue. Two letters shouldn't be adjacent to each other if they do not have a clue.
- Word density (higher for normal and cryptic crosswords, lower for others - Puzzles with themes have a lower density requirement) – crosswords consisting of mainly empty cells cannot be committed
- The crossword should not be the same or very similar to an existing crossword (this is to prevent the submission of duplicate crosswords)
Step 6 – Commit your crossword
You can edit a crossword as much as you like before you commit it. After you commit your crossword, the crossword becomes available to your friends and other members, and is no longer open for editing. So make sure that your crossword is ready before you commit it.
The crosswords you are working on will be listed on the “Build crosswords” page. When a crossword meets criteria for being committed (no errors, all words have clues, word density), it is given a “valid” status and a “commit” link appears next to the crossword status. Click on this to commit your crossword. The crosswords you have committed are also listed on this page, under “Your committed crosswords available to other members'.
Full Members can adjust clues afterwards on their published crosswords. Full Members can also prevent their puzzles from being listed by the system.
Step 7 – Share your crossword
Any crossword that has been committed can be shared:
- find your crossword using crossword search
- click on the crossword to open and solve it
- copy and share the link (URL) by email or on social media
- your friends will be able to solve the crossword on-line
Crosswords can also be printed directly from the web browser (File -> Print)
The fine print
Under the Usage agreement, members agree not to create puzzles that are copyrighted.
Contact us if you have an issue
krisvan 2020-10-27 21h25
I love solving crossword puzzles. The Will Shortz-edited NYTimes puzzle has set the bar for many years, although there is now a growing indie crossword scene. I’ve tried making my own by hand, and failed, an embarrassing number of times. I always wondered: how the heck do people do it? Do they agonize over a piece of grid paper until the eraser rubs right through the page, which was my method of choice?
Of course they don’t. I discovered that the majority of crossword constructors use software, and the challenge isn’t putting the grid together, but feeding the computer a solid, and fresh set of words. Upon further investigation, it appears the industry standard software is a Windows-only app called Crossword Compiler that starts at about 50 bucks. Surprisingly though, I could not find a freeware (much less open source) version of this functionality, even at a lower quality.
EDIT: There is a free and open-source crossword compiler that a kind reader alerted me to after my initial post. I haven’t tested it personally yet, but it appears to be Windows and Linux friendly, possibly OS X friendly, with user interface, written in C. It also appears to use constraint satisfaction, which I discuss below. (If you know of any other free or open source options, please contact me.) I still think the IP formulation deserves some attention though, as I will attempt to justify below.
IP formulation of the crossword generation problem
It seems like most of the crossword generation research out there formulates the problem as a constraint satisfaction problem. Unfortunately, this field is not in my wheelhouse, so I chose a different formulation: integer optimization aka integer programming (IP). (There is actually a lot of parallels between IP and CSP, and possibly something like a one-to-one correspondence, but that is beyond the scope of my brain and this blog post at the moment.) To my limited understanding though, CSP generates feasible solutions, while IP generates optimal solutions. So in theory, where CSP gives you several possible crosswords and you pick the one you want, an IP generated crossword would give you the best possible crossword (all relative to your scored word list). Another benefit is the ability to plug the problem into a form already amenable to several free, open source, and heavy-duty solvers that are built to handle IPs.
So let’s formulate crossword puzzle generation as an IP, and let’s start by defining our decision variables. There seem to be two approaches possible: (1) assigning words to slots, or (2) assigning letters to cells. In the letter-to-cell approach, we make sure each cell in the grid has a single unique letter assignment, and the hard part is then making sure each slot in the puzzle (“23 down”, “5 across”) actually spells a word in the vocabulary.
I’ll take the words-to-slots approach instead. This method makes sure each slot has a single word assigned, and the hard part is making sure the intersecting letters for across and down slots are the same. But let’s start with the easy stuff.
Let’s define our available vocabulary as (W={w_k}), so (w_3) might be “epic” for example. The slots in the puzzle we’ll denote (S={s_m}), so (s_{10}) might represent “12 across.” Now let’s define our decision variables as (z_{k,m}in{0,1}), so that (z_{3,10}=1) means that “epic” is in the “12 across” slot.
As a preprocessing step, we can go through and set (z_{k,m}=0) wherever ( W_k neq S_m ), i.e. wherever the size of the word isn’t equal to the size of the slot — we can’t assign a word to a slot if it doesn’t even fit. We can then define our first two sets of constraints in the usual IP way, as
[begin{align*}sum_k z_{k,m} &= 1 forall k sum_m z_{k,m} &leq 1 forall mend{align*}]The first constraint ensures every slot has exactly one word assigned to it. The second constraint ensures every word is assigned to at most one slot (crosswords don’t like a word to occur more than once).
Now things get tricky. We now need to ensure that each letter in the assigned word for an across slot matches the corresponding letters in the intersecting down slots. This is a simple idea that is just a pain to translate into an IP formulation. Let’s introduce the following notation: (G={g_{ij}}) for the set of all open cells in the grid, indexed by row (i) and column (j); also (r(g)) and (c(g)) to denote the slot index of the row and column, respectively, corresponding to grid (g). Also, let (P_{ell, r(g)}) be the set of indices to all possible words with letter (ell) in grid (g) for the corresponding row/across slot (r(g)), and (P_{ell, c(g)}) be the corresponding set for down slots. Now our last constraint is:
[sum_{kin P_{ell, r(g)}} z_{k, r(g)} = sum_{k in P_{ell, c(g)}} z_{k,c(g)} forall g, forall ell]That’s nasty notation. But basically this says, take the set of all possible words with letter (ell) in cell (g) in the across slot (r(g)), and the same set for the down slot (c(g)). Then, make sure that whatever assignment we gave for the across slot matches the down slot. Finally, ensure this matching is true for all grid squares and all letters.
Last but not least, let’s express our objective function as
[text{max}_z sum_k sum_m c_k z_{k,m}]where (c_k) is some score associated with each word. For example if we had some trendy, never-before-used phrase that we wanted to make sure made it into our next puzzle, we’d give it (c_k = 100), and some awful crosswordese like “oleo” we’d give (c_k = 1). Etc. And that’s it!
Advantages of the IP approach
This formulation allows us to very easily incorporate two vital parts of crossword construction: specifying word-to-slot assignments in advance, and/or specifying that certain words make it into the puzzle somewhere.
The word-to-slot assignment is easy: just set (z_{k,m}=1) as an additional constraint, where (k) is the word you need and (m) is the desired slot. Voila.
Slot Size Crossword Clue
The “make sure this word is in the puzzle anywhere” is also straightforward, and can be done two non-equivalent ways. The “soft” way would be to just increase the value (c_k) of the desired word sky-high, so the optimizer really wants to include it in the puzzle. The “hard” way would be to actually include another constraint, (sum_m z_{k,m} = 1) for the desired (k), so that exactly one of the decision variables corresponding to that word is turned on.
Implementation in Python
To implement this in Python, I tried to stay away from any unnecessary dependencies, so I used pure base Python and the pulp
package for the integer optimization. All the code is in a Github repo over here so I won’t bore you with the coding details, but I basically wrote a Grid
class to handle all the messy grid manipulation, a couple dicts with preprocessing information, and a code chunk with the IP formulation as just described.
However, although it works, it can only manage grids that are (3times 3) and (4times 4) (or even (5times 5) if you put black squares in the right spots) but not much bigger. I think this is due to a couple non-formulation related problems that I’d like to fix:
Tv Broadcast Slot Crossword Clue
- Improve the grid handling — currently very hacky, using base Python, lots of list comprehensions and loops … blech.
- Use something better than the default solver for
PuLP
. - Related: a better solver might be able to give insight if there are pre-processing steps that speed things up.
- Improve the word list and add points per word. Since most of a crossword maker’s struggle (I’m told) is getting a good, well-sorted word list. Currently I’m using a ``ospd.txt file with a few thousand words, most of which are crummy/archaic, and assigning each word a random score.
Another thing the code doesn’t implement is creating the grid itself. My code takes a predefined grid as input, but ideally, we just feed the optimization a word list, and it figures out where to put the grid squares on its own. This introduces a new slew of constraints: for example, crossword grids are symmetric, they must have either rotational or reflectional symmetry.
Anyway, the code as-is can be run like this:
which creates a (3times 3) grid with a single black square in the top left corner, and then attempts to fill it with 500 words sampled randomly from the ospd.txt
file (with random word scores). This will output something like
(like I said, the word list is pretty awful), which is the following little toy puzzle:
Yup!
That’s all for now. If you have comments, questions feel free to message me on Twitter. Thanks for reading!
Written on February 19th, 2017 by Steven Morse