Thank you, Raul, you gave me a few ideas with this. The first was to do the properly renew all could-be numbers after each amend. Getting only the the indices of the cells with could-be numbers of the face, row, column of a particular cell would be a hassle, so it just looks for cells with >1 elements and renews all missing numbers. With this almost solves the hard sample. The second and more important one, that using a shuffle of the cell indicies in the loop is like attacking from a different angle, giving solutions of varying completeness and correctness.
solve=:3 :0 rm=:{{ NB.fixme: renew mn only of a cell's fcr rather than all for_ijk.{~ ?~@# i.81 do. NB. if.(0&=)w=.>(<q=.ijk{i){y do. y=.(is/(<mn(<"1 Q{frc q){y))(<q)}y elseif.(1:<#)w do. y=.(is/(<mn(<"1 Q{frc q){y))(<q)}y end. end. y }} NB.for_ijk.i.81 do. NB.for_ijk. ((0&=)#(i.@#))EU do.NB.fixme for_ijk.{~ ?~@# i.81 do. NB. if.(0&=)w=.>(<q=.ijk{i){y do. y=.(is/(<mn(<"1 Q{frc q){y))(<q)}y elseif.(1:<#)w do. if.(1:=#)e=.(0&~:#])@,@~.@(w((-.@([e."1]))#[)(~.@;@(((<w)~:])#])@((1:<(#@>))#])@:,"2@((<"1 Q{frc q){])))y do. y=.(< 1 $ e)(<q)}y y=.rm y else. y=.(is/(<mn(<"1 Q{frc q){y))(<q)}y end. end. end. y ) Combining both, (< 9 9 $ , solver hu) , (< 9 9 $ HS) I do get puzzles finally correctly solved, but differing because of ambiguous puzzle generation, similar to the all windows minesweeper versions before win8 or win10. The shapes of the all the boxes in my solution vary, hence the discrepancy between z and zz when using =, but the numeric overlap can be better seen with (<z(="0 &.>)zz), (<z=:9 9 $,solver hu),(<zz) ┌───────────────────┬───────────────────┬───────────────────┐ │┌─┬─┬─┬─┬─┬─┬─┬─┬─┐│┌─┬─┬─┬─┬─┬─┬─┬─┬─┐│┌─┬─┬─┬─┬─┬─┬─┬─┬─┐│ ││1│0│0│1│1│0│1│0│1│││3│9│1│2│5│8│6│4│7│││3│1│8│2│5│4│6│9│7││ │├─┼─┼─┼─┼─┼─┼─┼─┼─┤│├─┼─┼─┼─┼─┼─┼─┼─┼─┤│├─┼─┼─┼─┼─┼─┼─┼─┼─┤│ ││1│0│1│1│0│0│1│0│1│││7│8│6│1│4│3│2│9│5│││7│4│6│1│9│8│2│3│5││ │├─┼─┼─┼─┼─┼─┼─┼─┼─┤│├─┼─┼─┼─┼─┼─┼─┼─┼─┤│├─┼─┼─┼─┼─┼─┼─┼─┼─┤│ ││1│0│1│1│1│0│1│0│1│││2│4│5│6│7│9│1│3│8│││2│9│5│6│7│3│1│4│8││ │├─┼─┼─┼─┼─┼─┼─┼─┼─┤│├─┼─┼─┼─┼─┼─┼─┼─┼─┤│├─┼─┼─┼─┼─┼─┼─┼─┼─┤│ ││1│1│1│1│1│1│1│1│1│││4│5│7│3│1│6│9│8│2│││4│5│7│3│1│6│9│8│2││ │├─┼─┼─┼─┼─┼─┼─┼─┼─┤│├─┼─┼─┼─┼─┼─┼─┼─┼─┤│├─┼─┼─┼─┼─┼─┼─┼─┼─┤│ ││1│1│1│1│1│1│0│1│0│││6│2│9│5│8│7│4│1│3│││6│2│9│5│8│7│3│1│4││ │├─┼─┼─┼─┼─┼─┼─┼─┼─┤│├─┼─┼─┼─┼─┼─┼─┼─┼─┤│├─┼─┼─┼─┼─┼─┼─┼─┼─┤│ ││1│0│0│1│0│0│1│1│1│││8│1│3│4│9│2│5│7│6│││8│3│1│4│2│9│5│7│6││ │├─┼─┼─┼─┼─┼─┼─┼─┼─┤│├─┼─┼─┼─┼─┼─┼─┼─┼─┤│├─┼─┼─┼─┼─┼─┼─┼─┼─┤│ ││1│1│1│1│1│1│1│1│1│││1│6│4│8│3│5│7│2│9│││1│6│4│8│3│5│7│2│9││ │├─┼─┼─┼─┼─┼─┼─┼─┼─┤│├─┼─┼─┼─┼─┼─┼─┼─┼─┤│├─┼─┼─┼─┼─┼─┼─┼─┼─┤│ ││1│0│1│1│1│1│0│1│0│││9│3│2│7│6│1│8│5│4│││9│8│2│7│6│1│4│5│3││ │├─┼─┼─┼─┼─┼─┼─┼─┼─┤│├─┼─┼─┼─┼─┼─┼─┼─┼─┤│├─┼─┼─┼─┼─┼─┼─┼─┼─┤│ ││1│1│0│1│0│0│0│1│1│││5│7│8│9│2│4│3│6│1│││5│7│3│9│4│2│8│6│1││ │└─┴─┴─┴─┴─┴─┴─┴─┴─┘│└─┴─┴─┴─┴─┴─┴─┴─┴─┘│└─┴─┴─┴─┴─┴─┴─┴─┴─┘│ └───────────────────┴───────────────────┴───────────────────┘ Thanks again for the input. Feb 26, 2022, 17:51 by rauldmil...@gmail.com: > If I remember correctly, Hui built permutations (lists of indices) up > front that represented the sudoku structures (rows, columns, squares), > and that because he had found that the claim that there's only one > solution was not always accurate, he conducted a breadth first search > (with a different copy of the partially solved sudoku puzzle) for some > cases. > > That said, I took a quick look at your code, and it seems like the > merge is working (it's updating only a single cell at a time, but it > is updating...). > > FYI, > > -- > Raul > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm