This commit is contained in:
2025-10-14 14:39:29 +02:00
parent 25537445fb
commit 8974eed235

View File

@ -27,6 +27,17 @@
(defun amount (x y) (defun amount (x y)
(foldr (lambda (z q) (if (eq x z) (+ q 1) q)) 0 y)) (foldr (lambda (z q) (if (eq x z) (+ q 1) q)) 0 y))
(defun in (x xs) (foldr (lambda (y z) (if (eq x y) t z)) nil xs))
(defun intersection (xs ys) (filter (lambda (x) (in x ys)) xs))
(defun repeat (x e)
(if (number? x)
(match x
(0 nil)
(_ (cons e (repeat (- x 1) e))))
'error))
(defun valid (x) (defun valid (x)
(if (= 9 (length x)) (if (= 9 (length x))
(foldr (foldr
@ -35,8 +46,36 @@
(map (lambda (y) (amount y x)) nums)) (map (lambda (y) (amount y x)) nums))
nil)) nil))
(defun notPresentRow (xs)
(foldr
(lambda (x ys) (if (in x xs) ys (cons x ys)))
nil
nums))
(defun notPresent (grid row col)
(intersection (notPresentRow (getRow grid row))
(notPresentRow (getCol grid col))))
(defun getRow (grid x) (ix grid x)) (defun getRow (grid x) (ix grid x))
(defun findEmpty (grid)
(foldr (lambda (zs ys)
(match zs
(((?row) . (?rowVal))
(append
(zip
(repeat 9 row)
(foldr (lambda (x qs)
(match x
(((?col) . (?val)) (if (eq val nil) (cons col qs) qs))
(_ 'error)))
nil
(zip (iota 9) rowVal)))
ys))
(_ 'error)))
nil
(zip (iota 9) grid)))
(defun transpose (grid) (defun transpose (grid)
(match grid (match grid
(nil nil) (nil nil)
@ -59,7 +98,6 @@
(let ((f (lambda (x start stop) (take (drop x start) (- (+ 1 stop) start))))) (let ((f (lambda (x start stop) (take (drop x start) (- (+ 1 stop) start)))))
(map (lambda (x) (f x startcol stopcol)) (f m startrow stoprow)))) (map (lambda (x) (f x startcol stopcol)) (f m startrow stoprow))))
(defun getSubGridAsList (m x) (defun getSubGridAsList (m x)
(if (and (>= x 0) (< x 9)) (if (and (>= x 0) (< x 9))
(let ((sr (* (// x 3) 3)) (let ((sr (* (// x 3) 3))
@ -68,4 +106,3 @@
(ec (+ sc 2))) (ec (+ sc 2)))
(matrixToList (getSubMatrix m sr er sc ec))) (matrixToList (getSubMatrix m sr er sc ec)))
'error)) 'error))