Announcement

Collapse
No announcement yet.

Haskell sudoku

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Haskell sudoku

    Hi, Ich bin noch neu in Haskell und hab die Aufgabe eines Sudokus vor mir,die genaue Aufgabenstellung lautet:
    schreiben Sie ein Haskell-Programm zur Lösung von Sudokus.
    Zur Erleichterung werden folgende Annahmen gemacht:
    1. In jeder Zeile fehlt nur ein Wert.
    2. Fehlende Werte werden durch eine 0 dargestellt.
    3. Die Funktion zum Lösen des Sudokus soll vom Typ
    "
    Sudoku\ sein.
    4. Der Typ
    "
    Sudoku\ ist folgendermaen deniert:
    1 type Sudoku = [ [Wert ] ] -> [ [Wert ] ]
    5. Der Typ von
    "
    Wert\ soll in diesem Beispiel Integer sein.
    6. Es kann davon ausgegangen werden, dass ein korrektes Sudoku als Ratsel vorliegt (Es muss
    also nicht jedes 3er-Quadrat und jede Spalte zusatzlich gepruft werden, sondern es reicht
    aus in jeder Zeile zu prufen, ob die Zahlenwerte von 1 bis 9 vorkommen.)
    Ein Sudoku sieht dann zum Beispiel folgendermaen aus:
    5 3 0 6 7 8 9 1 2
    6 0 2 1 9 5 3 4 8
    0 9 8 3 4 2 5 6 7
    8 5 9 7 6 1 4 2 0
    4 2 6 0 5 3 7 9 1
    7 1 3 9 2 4 8 0 6
    9 6 1 0 3 7 2 8 4
    2 8 0 4 1 9 6 3 5
    3 4 5 2 8 0 1 7 9
    In Haskell wird das ganze wie folgt dargestellt:
    1 b e i s p i e l =
    2 [ [ 5 , 3 , 0 , 6 , 7 , 8 , 9 , 1 , 2 ] , [ 6 , 0 , 2 , 1 , 9 , 5 , 3 , 4 , 8 ] , [ 0 , 9 , 8 , 3 , 4 , 2 , 5 , 6 , 7 ] ,
    3 [ 8 , 5 , 9 , 7 , 6 , 1 , 4 , 2 , 0 ] , [ 4 , 2 , 6 , 0 , 5 , 3 , 7 , 9 , 1 ] , [ 7 , 1 , 3 , 9 , 2 , 4 , 8 , 0 , 6 ] ,
    4 [ 9 , 6 , 1 , 0 , 3 , 7 , 2 , 8 , 4 ] , [ 2 , 8 , 0 , 4 , 1 , 9 , 6 , 3 , 5 ] , [ 3 , 4 , 5 , 2 , 8 , 0 , 1 , 7 , 9 ] ]
    Gelost ergibt sich folgendes Ergebnis:
    1 Main> sudoku b e i s p i e l
    2 [ [ 5 , 3 , 4 , 6 , 7 , 8 , 9 , 1 , 2 ] , [ 6 , 7 , 2 , 1 , 9 , 5 , 3 , 4 , 8 ] , [ 1 , 9 , 8 , 3 , 4 , 2 , 5 , 6 , 7 ] ,
    3 [ 8 , 5 , 9 , 7 , 6 , 1 , 4 , 2 , 3 ] , [ 4 , 2 , 6 , 8 , 5 , 3 , 7 , 9 , 1 ] , [ 7 , 1 , 3 , 9 , 2 , 4 , 8 , 5 , 6 ] ,
    4 [ 9 , 6 , 1 , 5 , 3 , 7 , 2 , 8 , 4 ] , [ 2 , 8 , 7 , 4 , 1 , 9 , 6 , 3 , 5 ] , [ 3 , 4 , 5 , 2 , 8 , 6 , 1 , 7 , 9 ] ]

    Ich würde jetzt versuchen irgentwie die fehlende Zahl durch [1..9]-[summe der beispielliste] zu ermitteln, und dann die null zu eliminieren, aber dass kann ich mit dem ersten element der Liste, aber wie komm ich dann an das 2. ran u.s.w und wie füg ich das dann zu einer Liste zusammen? bzw. ist mein Ansatz überhaupt okay?

    liebe Grüße,
    Chirotocxa

  • #2
    Ich kann kein Haskell, aber ich denke das laeuft wie in allen ueblichen funktionalen Sprachen ueber Tail Recursion. Im Prinzip musst Du eine Funktion bauen die das Problem fuer eine Zeile loest und Dir eine neue Zeile zurueck gibt. Und dann ein neues Array erstellen mit der neuen Zeile an der Position an der sich die alte Befand.

    Comment


    • #3
      Danke, Ich werds versuchen

      Comment

      Working...
      X