I mean, why am I talking about a computer program in the midst of all this relaxed coverage on my trek thru the U.S.?
It's a longish story. When I first got my job with Joy School, I spent quite a bit of my free time back in my room working on this program. For some inexplicable reason, I was taken with the idea that I might be able to make crossword puzzles and sell them to make bits of spare change. I worked with quite some passion on this thing and had all these high hopes for it. But hopes were dashed when my first attempts to actually make a danged crossword puzzle with it were met with maddening culs-de-sac.
Well, I had a notion that I might spend some time on this vacation trying to see if it were possible to salvage the project. A weird thing happened on the flight to Michigan; I asked a male flight attendant if there'd be any problem with my using an electronic dictionary (actually a Chinese/English translator) during the flight...and he asked me if I made crossword puzzles(!). It seemed sort of spooky to me. I gave him a funny look, and mentioned that I'd only just resolved to revisit this program.
Here are some screen shots. The one on the left shows some command line interactions. The one on the right shows a listing of solutions for a "lookup domain." If you examine the completed puzzle again, you'll find the area where the specific solution under the blue highlight got placed. This is a lookup domain, in my parlance
So the question is: Why did it work this time? It worked because it occured to me to simplify the layout a bit, placing fewer demands on the system. By strategically adding a few more "black" cells (that don't take letters) and breaking up the lookup domains into smaller, more easily solvable chunks, I was able to quickly make my way through them, getting workable solution sets. I guess I'm just sort of getting the knack of using this thing! I'm not having to change any algorithms; though I may, in the short term, add some functionality to better manage lookup domain solution filesets; I'm finding I'm "jumping the fence" to blow away these files from Emacs' dired mode. Another thing: If I'd gotten wish to work, this would have a graphic interface, which could almost make this thing marketable. Lastly, I'd implemented lookup domain linkages (LDLs), which are really a cool idea, but the framework quickly became unweildy; it turned out I'd need a metafunctionality just to negotiate the complex web of relationships between the linked domains, and I just wasn't (at that time) up to the task. And it turns out that the non-LDL functionality just might do the job anyway, so....
By the way, xwords is written in tcl—John Ousterhout's excellent scripting language. Because xwords is written in this precompiled interpreted language, I had to come up with some interesting optimizations to compensate for its inherent [relative] slowness, such as a system which generates a minimized assocative array serving as a "fast glob" pattern match for any possible word at any point in the domain lookup.
Anyway, I got one darned puzzle out of the thing...and me without any champagne!