lehrkraefte:blc:informatik:ffprg1-2020:sudoku

This is an old revision of the document!


Sudoku

Ziel ist es, ein Sudoku-Solver zu programmieren, der die allermeisten Sudokus in nützlicher Frist lösen kann.

Wir werden eine Klasse Sudoku programmieren. Darin werden die Zahlen in einem 2-dimensionalen Array 9×9-Array gespeichert. Dazu werden wir Funktionen einbauen, die wir als Aufgaben bei den Funktionen schon programmiert haben.

Klasse zum Starten

Klasse zum Starten

sudoku.py
 
class Sudoku:
 
    def __init__(self):
        self.feld = [[0 for i in range(9)] for j in range(9)]
 
    # Liest ein Sudoku als String ein, z.B.
    # "003020600900305001001806400008102900700000008006708200002609500800203009005010300"
    # "200080300\n060070084\n030500209\n000105408\n\n000000000\n402706000\n301007040\n720040060\n004010003"
    def parse(self,s):
        x=0
        y=0
        for c in s:
            if (c>="0" and c<="9") or (c=="."):
                if c==".":
                    c="0"
                self.feld[x][y] = int(c)
                x+=1
                if (x==9):
                    x=0;
                    y+=1
 
    # Liest ein Sudoku von einer Text-Datei ein.
    def fromFile(self,f):
        file1 = open(f,"r")
        sudoku = file1.read()
        file1.close()
        self.parse(sudoku)
 
    # Umwandlung in ASCII-Art
    def __str__(self):
        hbar1 = ("#==="+"===="*2)*3+"#\n"
        hbar2 = ("#---"+"+---"*2)*3+"#\n"
        symbols = [str(i) for i in range(10)]
        symbols[0] = " "
        separators = ["|", "|", "#"]
        res = hbar1
        for y in range(9):
            res += "#"
            for x in range(9):    
                res += " "+symbols[self.feld[x][y]]+" "+separators[x%3]
            res+="\n"
            if y%3==2:
                res += hbar1
            else:
                res += hbar2
        return res
 
# ENDE der Klasse Sudoku        
 
# Beginn vom Hauptprogramm
 
s = Sudoku()
s.parse("003020600900305001001806400008102900700000008006708200002609500800203009005010300")
print(s)
  • lehrkraefte/blc/informatik/ffprg1-2020/sudoku.1586950180.txt.gz
  • Last modified: 2020/04/15 13:29
  • by Ivo Blöchliger