Enter digits in the grid; you can use arrow keys on keyboard or click / touch.
Hover over (or touch on mobile) any cell to view the digits it could be. This updates automatically whenever a cell changes.
Use 'Save' to store the current puzzle state so you can return to the beginning if you want.
Use a combination of different search methods to solve the puzzle. You should wait till one search has finished before doing the next. Although it will let you trigger multiple searches at once and it looks cool, it will probably fail to solve..
Not Search - For every blank that has changed state, remove all the digits in that cells row, column and box from it's 'maybes' list. If only one remains, enter it.
Not Check - Additional method that checks all the affected cells whenever a value is entered to see if they can now be only one thing. Basically makes 'Not Search' redundant.
Box Search - For each box, create list of cells where each digit could go. If only one place, enter it. If only 2 places, and they are on the same row or column, update the rest of the group's maybes lists
Line Check - Additional check after box search, if digit can only be in 2 or 3 cells on the same row or column, then it can't be anywhere else on that line
Column Search - For each column, create list of cells where each digit could go. If only one place, enter it.
Row Search - For each row, create list of cells where each digit could go. If only one place, enter it.
Solve - Not, Box, Column and Row search until no blanks remain or maximum iterations reached. Now runs with visuals on thanks to async promises.
Tree Search - Triggered if 'Solve' fails, finds a cell that can only be one of 2 digits and attempts to solve each scenario
Use the arrow keys to scroll backwards and forward digit by digit