"col speed" <ajarnco...@gmail.com> wrote

HI again, I realise that I should have included more information in the
above e-mail. Here goes:

a/ I have a 9*9 nested list called "rows", which contains the given numbers
in a sudoku puzzle - with "0"s where the blanks go.

b/ I create roworder (roworder = [[str(j)+str(i) for i in range(9)] for j in range(9)]) - [["00" --> "08"], ["10" --> "18"] --> ["80" --> "88"]]

c/ I populate a dictionary ("dic") with keys from "roworder" and values from
"rows"

d/ I loop through the dict, changing any value"0" to be set(range(1, 10))- a
list of "possible numbers".

e/ Then I do:
for i in roworder:
   notPoss = set([dic[j] for j in i if type(dic[j]) == int])
   for k in j:
       if type(dic[k]) == set:
           dic[k].difference_update(notPoss)

thus removing the numbers that exist in the row from the "possible numbers"

I need to do this for the columns and squares aswell, which is why I do:

That approach should work.
Personally I'd probably create a Square class and bae my data on 9 squares. Each square can return a row(of 3 items) given an index and a column(of 3 items)
given an index.

class Square:
def __init__(self, size=3): self.cells = [0 for n in range(size*size)] ...
     def __str__(self):...
     def getRow(self,n): ...
     def getCol(self,n):...
     def setCell(self,x,y,value)
     def check(self):...

Thus I'd build my rows and columns dynamically from the squares rather
than the other way round. It just feels more natural to me.
But your approach should work too.

However I confess I haven't studied you code in detail.
Is there any specific problem or question you have or are you looking
for general feedback?

HTH,


--
Alan Gauld
Author of the Learn to Program web site
http://www.alan-g.me.uk/



_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to