
From Sudoku Solver to Program Synthesis - saurabh20n
https://synthetic-minds.com/try
======
Isamu
When I wrote a Sudoku solver I was disappointed to find that backtracking
worked maybe too well; that is, I coded in the minimum constraints to follow
the rules of the game and then added backtracking and voila, it found
solutions quickly enough.

Why was I disappointed? Because initially I wanted to write a solver that
inferred more, that used the inferences that I made when solving Sudoku.

Sadly once the solver worked, I kinda lost interest.

I hate backtracking myself and it should only be necessary at a certain Sudoku
hardness level - every puzzle below that level of hardness should be solvable
without backtracking.

~~~
dahart
Yep, backtracking works fine. If you only want the solution, then you don't
need complex rules. But, you really want more than just the solution.

Check out [http://sudokuwiki.com/sudoku.htm](http://sudokuwiki.com/sudoku.htm)

This solver (and the whole site) is the best one I know of, and it will solve
a puzzle by using rules in order of difficulty, to guarantee it tries the
simple rules you know before resorting to backtracking.

The benefits of this are that you can grade the difficulty of a sudoku board.
You can also solve a puzzle up to the "crux" and then work on only the hard
moves manually. I like doing that so I can skip the hours of boring stuff and
practice doing the more tricky inferences. Andrew's site is a window into how
big of a rabbit hole Sudoku can be...

~~~
akbo
If you are interested in grading Sudokus by the difficulty of the human
solving techniques required, you might want to check out the following two
books:

\- "Sudoku Programming with C"
[[https://www.apress.com/de/book/9781484209967](https://www.apress.com/de/book/9781484209967)]
where a Sudoku solver and grader is implemented.

\- "A to Z of Sudoku" [[https://www.wiley.com/en-
us/A+to+Z+of+Sudoku-p-9781847040008](https://www.wiley.com/en-
us/A+to+Z+of+Sudoku-p-9781847040008)] where many human solving techniques are
described and rated by their difficulty.

------
sevensor
So is this meant to be an advertisement for their product, or are they trying
to recruit? Why are they trying to filter for people who can write a sudoku
solver?

~~~
saurabh20n
We are looking for people who want to play around with constraint solvers. As
others in this thread have mentioned, the vanilla Sudoku is not hard to really
need constraint solvers; a generalized version would. We don't expect people
to have backgrounds in program synthesis, but constraint solving is a start.

That said, it is just a fun problem. PTime specialized solutions are even more
intriguing.

------
x11
Just how long more should I leave my solver running ?

------
Avery3R
Don't hijack scrolling.

~~~
saurabh20n
We don't. Which browser/OS are you seeing this on?

~~~
Avery3R
Yes, you do. Any browser on any os. [https://synthetic-
minds.com/smoothscroll.js](https://synthetic-minds.com/smoothscroll.js)
hijacks scrolling and messes with the native scrolling behavior

~~~
saurabh20n
Removed!

We are not front-end people :) and it wasn't an active choice. Let me know if
you see anything else. Sincerely appreciate the help.

------
sigstoat
now that my solver has been chugging along for awhile, and i'm sort of bored
of fiddling around with the supporting bits, i find myself wondering: since
there's a politely-requested limit on submission rate, isn't the person who
solves the most basically just the one who wrote an automatic solver fastest
and/or leaves it running the longest?

~~~
sigstoat
well, you guys were sneakier than i initially expected, and clearly more
clever than me, as i can't figure out the pattern. oh well.

------
yazr
TLDR : we use a solver to go from a formal constraint specification to an
Ethereum smart contract

So 1\. the initial specification is still a formal constraint

    
    
      2. the domain complexity is low  
    
      3. Use well known solvers to generate code in a DSL

~~~
saurabh20n
This page was just a fun exercise; seems to have missed communicating fully
how we use synthesis. My bad.

You are right about about "2." and part of "3.". For "2." yes, the smart
contracts are indeed simpler (small code, gas limits, closed systems). So we
can skip some major hurdles that more general techniques need -- case in point
the FB abstract interpretation framework Sparta here yesterday. For "3." we
use Z3 (as should everybody :)!) but the target language for synthesis is
Solidity. [ Hope you didn't mean Solidity is a DSL, coz that would be a
generous interpretation of that word. ]

The initial spec is another smart contract (call it IN), so code and not a
formal constraint. We synthesize another smart contract (call it OUT), such
that the combination (IN + OUT) behaves well. See work on synthesizing program
inverters for the background ideas ([http://saurabh-
srivastava.com/pubs/pldi11-pins.pdf](http://saurabh-
srivastava.com/pubs/pldi11-pins.pdf))

~~~
yazr
Thanks for the explanation. Program synthesis is HARD, and we may never solve
it, so any progress on this is great to read about.

Good luck with this.

