Skip to content

Instantly share code, notes, and snippets.

@tamurashingo
Last active January 2, 2016 07:49
Show Gist options
  • Save tamurashingo/8272594 to your computer and use it in GitHub Desktop.
Save tamurashingo/8272594 to your computer and use it in GitHub Desktop.
数独の問題を生成したい
(defun generate-numseq (size)
"指定したサイズの数列を作る"
(let ((gen-list '()))
(labels ((gen (current num-list)
(if (< current size)
(loop for x from 1 to size
if (not (member x num-list))
do (gen (1+ current) (cons x num-list)))
(push num-list gen-list))))
(loop for x from 1 to size
do (gen 1 (list x))))
gen-list))
(defun numseq-sort (seq)
"数列をソートする"
(sort seq #'(lambda (a b)
(loop for a1 in a
for b1 in b
if (< a1 b1)
do (return t)
if (> a1 b1)
do (return nil)
finally
(return t)))))
(defun duplicatep (seq)
"数列に重複があるかを判定する"
(loop for x in seq
if (member x (cdr (member x seq)))
do (return t)
finally
(return nil)))
(defun column-uniqp (seq)
"列がユニークになっているかを判定する
seq: ((1 2 3) (2 3 1)) みたいなものを想定"
(labels ((generate-seq (n)
(loop for numseq in seq
collect (nth n numseq))))
(loop for x from 0 to (1- (length (car seq)))
if (duplicatep (generate-seq x))
do (return nil)
finally
(return t))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment