Re: A Su Doku solver

*To*: mathgroup at smc.vnet.net*Subject*: [mg60578] Re: A Su Doku solver*From*: "Valeri Astanoff" <astanoff at yahoo.fr>*Date*: Tue, 20 Sep 2005 06:16:21 -0400 (EDT)*References*: <200509191007.GAA25694@smc.vnet.net><dgol73$hoa$1@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

Thanks for the interesting counterexample : I'm going to try and improve my program (if I can ! ). For the amateurs, here is another small program (that uses the first one) to generate grids at random: In[5]:= newgrid := Module[{g1={1,2,3}, g2={4,5,6}, g3={7,8,9}, basegrid, testgrid, lastgrid, finalgrid, choices, indices}, basegrid={ {1,2,3,4,5,8,6,7,9}, {5,9,6,2,1,7,3,8,4}, {8,7,4,3,6,9,1,2,5}, {2,8,9,1,4,3,7,5,6}, {4,6,5,9,7,2,8,3,1}, {7,3,1,6,8,5,4,9,2}, {3,4,2,8,9,1,5,6,7}, {6,5,8,7,2,4,9,1,3}, {9,1,7,5,3,6,2,4,8}}; testgrid = basegrid; While[FreeQ[testgrid,0], lastgrid = basegrid; basegrid[[Random[Integer,{1,9}],Random[Integer,{1,9}]]]=0; testgrid = sudoku[basegrid]]; finalgrid = If[Random[]>0.5, lastgrid, Transpose[lastgrid]]; choices=Select[Permutations[Range[9]], (((s1=Sort[#[[g1]]]) == g1||s1 == g2||s1 == g3)&& ((s2=Sort[#[[g2]]]) == g1||s2 == g2||s2 == g3)&& ((s3=Sort[#[[g3]]]) == g1||s3 == g2||s3 == g3))&]; indices = choices[[Random[Integer,{1,Length[choices]}]]]; finalgrid[[indices]] ]; In[6]:=newgrid Out[6]= {{3,4,2,8,0,0,5,0,7}, {0,1,7,0,3,6,2,4,8}, {0,5,0,7,2,0,0,0,0}, {0,0,0,0,0,0,7,5,0}, {0,6,0,0,0,2,8,3,1}, {7,3,1,0,0,0,0,9,0}, {0,0,3,0,5,8,0,7,9}, {8,7,4,3,0,9,0,0,5}, {0,0,0,0,0,0,0,8,0}} In[7]:=sudoku[%] Out[7]= {{3,4,2,8,9,1,5,6,7}, {9,1,7,5,3,6,2,4,8}, {6,5,8,7,2,4,9,1,3}, {2,8,9,1,4,3,7,5,6}, {4,6,5,9,7,2,8,3,1}, {7,3,1,6,8,5,4,9,2}, {1,2,3,4,5,8,6,7,9}, {8,7,4,3,6,9,1,2,5}, {5,9,6,2,1,7,3,8,4}} v.a.

**References**:**A Su Doku solver***From:*"Valeri Astanoff" <astanoff@yahoo.fr>