[python-users] Pydoku

Muharem Hrnjadovic muharem at hrnjad.net
Mi Okt 17 13:24:38 CEST 2007


Hier ist die Peter Norvig (Director of Research at Google) Variante:
http://norvig.com/sudoku.html

Mit freundlichen Grüßen

--
Muharem Hrnjadovic
mailto:muharem at hrnjad.net



On Oct 17, 2007, at 1:08 PM, Benjamin Wolters wrote:

> Hallo zusammen,
>
> Anfang des Jahres benötigte ich einen Sudoku erzeugendes Programm.
> Damals habe ich mich das erste Mal mit Python auseinander gesetzt und
> somit auch Pydoku geschrieben. Jetzt möchte ich ihm mal gegen lesen
> lassen, ob dieser auch Python konform ist oder ob ihr ihn anders
> geschrieben hättet. Wahrscheinlich bekomme ich es demnächst öfters mit
> Python zu tun, deshalb die späte Mail.
>
> Hier mein Pydoku (auch im Anhang als py):
> _____________________
> import random
> import operator
>
> ##########################################
> #Basic Pydoku Class
> class Pydoku(object):
>     pydoku = [[ 0,0,0,0,0,0,0,0,0 ],
>               [ 0,0,0,0,0,0,0,0,0 ],
>               [ 0,0,0,0,0,0,0,0,0 ],
>               [ 0,0,0,0,0,0,0,0,0 ],
>               [ 0,0,0,0,0,0,0,0,0 ],
>               [ 0,0,0,0,0,0,0,0,0 ],
>               [ 0,0,0,0,0,0,0,0,0 ],
>               [ 0,0,0,0,0,0,0,0,0 ],
>               [ 0,0,0,0,0,0,0,0,0 ]]
>
>     def checkPydokuRules(self, r, c, val):
>         rb = abs(r / 3) * 3
>         cb = abs(c / 3) * 3
>         for row in range(rb, rb+3):
>             for col in range(cb, cb+3):
>                 if self.pydoku[row][col] == val:
>                     return False
>         return self.checkRow(r, val) & self.checkLine(c, val)
>
>     def checkRow(self,rowNumber,checkNumber):
>         for cell in self.pydoku[rowNumber]:
>             if cell == checkNumber:
>                 return False
>         return True
>
>
>     def checkLine(self,lineNumber,checkNumber):
>         for row in self.pydoku:
>             if row[lineNumber] == checkNumber:
>                 return False
>         return True
>
>     def printPydoku(self):
>         i = 0
>         print 'Pydoku:'
>         for row in self.pydoku:
>             print  row
>
>     def getPydoku(self):
>         return self.pydoku
>
> ##########################################
> # PydokuCreator Class
> class PydokuCreator(Pydoku):
>
>     def createPydoku(self):
>         for row in range(9):
>             while operator.contains(self.pydoku[row],0):
>                 self.pydoku[row] = [ 0,0,0,0,0,0,0,0,0 ]
>                 for val in range(1,10):
>                     self.addNumber(row,range(9),val)
>
>     def addNumber(self,row,cols,val):
>         ok = True
>         col = random.choice( cols )
>         if self.pydoku[row][col] == 0 and
> self.checkPydokuRules(row,col,val):
>                 self.pydoku[row][col] = val
>         else:
>             cols.remove(col)
>             if len(cols) == 0:
>                 return
>             self.addNumber(row,cols,val)
>
>     def getPydoku(self,grade):
>         tmpPydoku = self.pydoku
>         removed = False
>         for i in range(81-grade):
>             removed = False
>             while not removed:
>                 row = random.randint(0,8)
>                 col = random.randint(0,8)
>                 if tmpPydoku[row][col] != 0:
>                     tmpPydoku[row][col] = 0
>                     removed = True
>         return tmpPydoku
>
> ##########################################
> # PydokuSolver
> #class PydokuSolver(Pydoku):
> #
> #    def solvePydoku(self):
> #        self
>
> p = PydokuCreator()
> p.createPydoku()
> p.printPydoku()
>
> tmp = p.getPydoku(22)
> print 'Pydoku of grade:', grade
> for row in tmp:
>     print row
>
> ______________________
>
>
> Die 22 steht für den Schwierigkeitsgrad und der Solver ist in Prolog
> geschrieben, deshalb auch nicht implementiert.
>
> Viele Grüße
> Ben
> <pydoku.py>
> ________________________________________
> Diese Mail erhalten Sie ueber die Mailingliste Python-users der  
> Universitaet zu Koeln
> Python-users at uni-koeln.de
> https://lists.uni-koeln.de/mailman/listinfo/python-users

-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://lists.uni-koeln.de/pipermail/python-users/attachments/20071017/3cbf99c4/attachment.html>


Mehr Informationen über die Mailingliste python-users