-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a (pls suggest improvements.-a Thanks!)
PS C:\Lisp\LockPuz>-a-a-a-a-a-a-a gosh-a-a-a -I-a-a .
gosh> (load "Lock.lsp")
-a-a-a-a-a-a-a-a 1000-a-a-a ( Now applying Constraint: )-a-a-a-a-a-a-a ((6 8 2) (1 1))
-a-a-a-a-a-a-a-a 192-a-a-a-a ( Now applying Constraint: )-a-a-a-a-a-a-a ((6 1 4) (1 0))
-a-a-a-a-a-a-a-a 38-a-a-a-a-a ( Now applying Constraint: )-a-a-a-a-a-a-a ((2 0 6) (2 0))
-a-a-a-a-a-a-a-a 1
-a-a-a-a-a-a-a-a ((0 4 2))
(define (Score X Y)
-a (list (apply + (map (lambda (y) (if (member y X) 1 0))-a-a-a Y))
-a-a-a-a-a-a-a (count zero?-a (map - X Y))))
(define (MapCan f Lis)-a-a-a (apply append (map f Lis)))
(define (run)
-a (let* ((Const '(((6 8 2)-a (1 1))
-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a ((6 1 4)-a (1 0))
-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a ((2 0 6)-a (2 0)) ))
-a-a-a-a-a-a-a-a (dig (iota 10))
-a-a-a-a-a-a-a-a (Cand (MapCan (lambda (x)
-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a (map (lambda (i) (cons x i))
-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a (MapCan (lambda (y) (map (lambda (z) (list y z))
-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a dig)) dig))) dig)))
(define (Score X Y)
(list (count list? (map (lambda (y) (member y X)) Y))
(count zero? (map - X Y))))
; <--- Is there a better way? (using equal? instead of - ) ?
FYI, here is an interesting paper about playing Mastermind using a SAT solver, beating other approaches. Mastermind turns out to be well-known
to be NP-complete (a quick web search found that). https://www.seas.upenn.edu/~ncollina/Mastermind.pdf
What are some relevant sections in Knuth's book [Satisfiability] ?
| Sysop: | Amessyroom |
|---|---|
| Location: | Fayetteville, NC |
| Users: | 74 |
| Nodes: | 6 (0 / 6) |
| Uptime: | 52:23:41 |
| Calls: | 1,101 |
| Calls today: | 1 |
| Files: | 1,339 |
| Messages: | 276,091 |