Einen Sudoku-Löser machen

Ich versuche, ein Sudoku-Solver-Programm zu erstellen, das einen Vektor von Vektoren als Eingabe erhält, wobei jeder Vektor innerhalb des Vektors eine Zeile des Sudoku ist, wobei jede '0' eine leere Zelle im Sudoku ist.

Ich habe bis jetzt jede mögliche Nummer gefunden, die eine Zelle mit '0' bekommen kann.

Das Problem ist also, nachdem ich herausgefunden habe, welche Zelle nur eine mögliche Lösung hat, wie kann ich diese einzigartige Lösung trotz der Unveränderlichkeit von Clojure an ihre Position bringen?

Das Programm muss den gleichen Vektor von Vektoren zurückgeben, wobei jede '0' durch eine Zahl ersetzt wird, die die Anforderungen erfüllt.

0
ru

3 Antworten

Wenn Sie einen Vektor von Vektoren haben, können Sie einen Zellenwert mit assoc-in festlegen, z.

(def cells [[1 3 0]
            [4 2 1]
            [6 3 0]])

(defn set-cell-value [board row col value]
    (assoc-in board [row col] value))

(set-cell-value cells 0 2 2)
0
hinzugefügt
Ich werde das definitiv versuchen
hinzugefügt der Autor smith, Quelle

Wenn Sie einen Vektor von Vektoren haben, können Sie einen Zellenwert mit assoc-in festlegen, z.

(def cells [[1 3 0]
            [4 2 1]
            [6 3 0]])

(defn set-cell-value [board row col value]
    (assoc-in board [row col] value))

(set-cell-value cells 0 2 2)
0
hinzugefügt
Ich werde das definitiv versuchen
hinzugefügt der Autor smith, Quelle

Wenn Sie einen Zustand haben möchten, geben Sie ihn in das atom https://clojuredocs ein. org/clojure.core/atom Dies ist ein veränderlicher Referenztyp, der unveränderliche Werte enthält.

0
hinzugefügt
Im Grunde muss ich diesen einzigartigen Wert auf seine Position in der ursprünglichen Matrix legen. Einer, über den man nachgedacht hat, ist, eine Akkumulatormatrix zu erstellen und die Elemente dort zu platzieren
hinzugefügt der Autor smith, Quelle