From 6d66ecafac16ede3029b0ea14e727f25485d6ec2 Mon Sep 17 00:00:00 2001 From: pingu Date: Tue, 14 Oct 2025 17:17:32 +0200 Subject: [PATCH] Not working at the moment --- sudoku.lispbm | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/sudoku.lispbm b/sudoku.lispbm index 77406d4..f38283d 100644 --- a/sudoku.lispbm +++ b/sudoku.lispbm @@ -38,6 +38,14 @@ (_ (cons e (repeat (- x 1) e)))) 'error)) +(defun replace (lst i e) + (match lst + (((?x) . (?xs)) (match i + (0 (cons e xs)) + (_ (cons x (replace xs (- i 1) e))))) + (nil nil))) + + (defun valid (x) (if (= 9 (length x)) (foldr @@ -90,6 +98,10 @@ ('error))) (_ 'error))) +(defun place (m r c e) + (let ((row (getRow m r)) (updatedRow (replace row c e))) + (replace m r updatedRow))) + (defun getCol (grid x) (getRow (transpose grid) x)) (defun MatrixToList (m) (foldr append nil m)) @@ -106,3 +118,24 @@ (ec (+ sc 2))) (matrixToList (getSubMatrix m sr er sc ec))) 'error)) + +(defun solve (grid) + (let ((empties (findEmpty grid)) + (size1 (foldr + (lambda (x ys) + (let ((e (match x + (((?r) (?c)) (notPresent r c))))) + (if (= 1 (length e)) + (cons (append e x) ys) + ys))) + nil + empties))) + (if (eq empties nil) + grid + (if (eq size1 nil) + () ; TODO: Empty + (solve (foldr (lambda (x gs) + (match x + ((?e) (?r) (?c)) (place g r c e))) + grid size1)) + ))))