Last active
January 2, 2016 07:49
-
-
Save tamurashingo/8272594 to your computer and use it in GitHub Desktop.
数独の問題を生成したい
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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