Here is my sudoku solver, haven’t worked on it for a few years though. It tries not to guess (however, you can solve any puzzle by guessing so quickly that this was largely for practice writing elixir)
The other thing I was experimenting with at the time was the use of “functional” approaches. So whereas Peter Norvig’s classic solution tends to “run a function and get a new mutated board back”, this has one function to choose next move and then the mutation is handled separately. This was novel to me at that point
Have fun!