utils.scm 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. (define-module (sudoku utils))
  2. (use-modules (srfi srfi-1)
  3. (ice-9 receive)
  4. (ice-9 control)
  5. (sudoku square))
  6. (define-public (string->num-list s)
  7. (map (lambda (char)
  8. (string->number (string char)))
  9. (string->list s)))
  10. (define-public (rank1->rank2 l)
  11. (letrec ((n (inexact->exact (expt (length l)
  12. (/ 1 2))))
  13. (loop (lambda (r1l r2l)
  14. (if (null? r1l)
  15. r2l
  16. (loop (drop r1l n)
  17. (cons (take r1l n) r2l))))))
  18. (reverse (loop l '()))))
  19. (define-public (array-fold proc acc array)
  20. (do ((i 0 (1+ i)))
  21. ((>= i (array-length array)) acc)
  22. (do ((j 0 (1+ j)))
  23. ((>= j (array-length array)))
  24. (set! acc (proc (list (array-ref array i j) i j) acc)))))
  25. (define-public (display-board board)
  26. (let ((v-board (make-array 0 9 9)))
  27. (newline)
  28. (array-map! v-board get-value board)
  29. (map (lambda (row)
  30. (display row) (newline))
  31. (array->list v-board))))