[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