I’m doing a little personal, time-wasting project that purely coincidentally involves Sudoku (could be anything as my interest is some underlying thought and programming issues). A) I’m not very good at Sudoku, B) I’m not very interested in Sudoku, and, C) some relatively brief amount of searching indicates this is a fairly worked-over field already with everything interesting discovered by people smarter than me.
But I still fiddle with it, in my case looking for some patterns in ratings (based on some visual approach) from public sources. The various public sources of puzzles I use (14) have no consistency in their rating scheme. Two public sources (I won’t mention which) clearly use the same underlying source (the two sources are just republishing), but even there the ratings are inconsistent between what they publish.
So it’s this rating problem that interests me and how to potentially rate consistently across these sources and then from the thousands of games I’ve accumulated over three years “publish” (meaning fair use, not actual publication, although it’s not clear to me the games are copyrighted, but I won’t push the point) with my ratings. Ratings would be a combination of how hard it is to solve and what “techniques” are needed (some puzzles, in generally easy-to-medium are fairly “sequential” in finding next digit, others are highly random, some manage to make next solvable digit be in most unlikely place). On top of “difficulty” rating, I want to include some sort of “fun” and “pretty” in the rating as well.
So to accumulate my ‘database’ of solved puzzles with source and ratings I have my own player (still requires manual input, one of the bigger ToDos I have is to do OCR from screen captures). Once I’ve accumulated enough instances in the database then I can test my candidates for rating. The player makes it fairly easy to solve even very hard puzzles with a variety of cheats (yet another vaguely interesting thing, how to get composite “cheating” score based on specifically which cheats, when (some times cheats don’t help much, other times they unlock it, obviously a different value to the same cheat mechanism, but how to detect that?). But scoring how much you cheated is another digression in this project.
Anyway, that’s all background to what this post is about. One simple rating I assume is whether the puzzle can be solved purely by visual examination, or do you need to figure all the possible digits per unsolved square with “pencils” to solve (at least for ordinary people without the unusual pattern recognition capabilities some people have who can do even hard puzzles without pencils). Naturally one of the simpler things is to do a correlation between the source’s rating and whether I rate it as “eyeballable”.
Since I’ve been doing this for years I have set in my mind expectation. Certainly ratings of certain sources (and sometimes these follow a day-of-the-week pattern) are always eyeballable. Well, like everything in life, something is true until it isn’t any more. So this morning I was having trouble with a puzzle that always has been eyeballable (65 instances in my database) but I couldn’t get it. So my preconception threw me, it had to be my fault: I’m still have asleep, my vision is blurry, I’m not concentrating, something, my fault. And the more time I wasted on it the more I wanted to get it. Not until I was basically exhausted trying did it dawn on me maybe it wasn’t solvable. So I pulled out a cheat, instantly found the move, and realized this is now the first from this source with this rating not be eyeballable (i.e. need to use pencil marks to find the key move). Interestingly even after finding the key move it required extensive eyeball searching to move to solution. In short, this instance was an outlier. I’m not that bad at Sudoku to have just been screwing up. Somehow, whatever process this source uses to generate these puzzles managed to create one that is quite different than all the others of this rating.
Now, if I could write code that would detect that situation, that might be interesting. Writing a puzzle generator is easy, writing a solver (depending on how neat you want the UI to be) is easy to medium, but writing code to: a) do a consistent job of rating, b) recognize certain patterns (with built-in human pattern recognition I can) in how you have to solve, c) deciding which puzzles are “fun” (not so hard as to drive you crazy, not so easy as to bore you), and, d) which puzzles are “pretty” (in some visual sense) as every now and then I see one where just looking at the puzzle from a distance (usually involves symmetry of some sort) has some pleasing pattern. Maybe these are worthy things to pursue in this otherwise parched landscape of a well understood (and thus boring) subject.
So the real point of this post has nothing to do with Sudoku, but simply that preconceptions, while normally speeding solutions, sometimes seriously impede it. Gosh, I bet I’m not the first one to have said that. Of course, these days is there much of anything one can do that hasn’t already been done before. But that’s another post.