⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 solve.clp

📁 clips源代码
💻 CLP
📖 第 1 页 / 共 3 页
字号:
;;; Version 1.1;;;;;; Added Unique Rectangles;;; #######################;;; DEFTEMPLATES & DEFFACTS;;; #######################(deffacts techniques   (technique (name Naked-Single) (priority 1))   (technique (name Hidden-Single) (priority 2))   (technique (name Locked-Candidate-Single-Line) (priority 3))   (technique (name Locked-Candidate-Multiple-Lines) (priority 4))   (technique (name Naked-Pairs) (priority 5))   (technique (name Hidden-Pairs) (priority 6))   (technique (name X-Wing) (priority 7))   (technique (name Naked-Triples) (priority 8))   (technique (name Hidden-Triples) (priority 9))   (technique (name XY-Wing) (priority 10))   (technique (name Swordfish) (priority 11))   (technique (name Duplicate-Color) (priority 12))   (technique (name Color-Conjugate-Pair) (priority 13))   (technique (name Multi-Color-Type-1) (priority 14))   (technique (name Multi-Color-Type-2) (priority 15))   (technique (name Forced-Chain-Convergence) (priority 16))   (technique (name Forced-Chain-XY) (priority 17))   (technique (name Unique-Rectangle) (priority 18)))(deffacts color-pairs   (color-pair green magenta)   (color-pair magenta green)   (color-pair orange azure)   (color-pair azure orange)   (color-pair violet chartruese)   (color-pair chartruese violet)   (color-pair aquamarine fuchsia)      (color-pair fuchsia aquamarine)      (color-pair yellow blue)   (color-pair blue yellow)   (color-pair red cyan)   (color-pair cyan red))(deftemplate position-value-color   (slot row)   (slot column)   (slot group)   (slot id)   (slot value)   (slot color))(deftemplate chain   (slot start-row)   (slot start-column)   (slot start-value)   (slot row)   (slot column)   (slot group)   (slot id)   (slot value))   ;;; #################;;; ELIMINATION RULES;;; #################;;; *************;;; remove-colors;;; *************(defrule remove-colors   (declare (salience 20))   (phase elimination)      ?f <- (position-value-color)   =>      (retract ?f));;; *************;;; remove-chains;;; *************(defrule remove-chains   (declare (salience 20))   (phase elimination)      ?f <- (chain)   =>      (retract ?f)) ;;; *********;;; eliminate;;; *********(defrule eliminate   (declare (salience 10))   (phase elimination)      ?f1 <- (impossible (id ?id) (value ?v) (priority ?p) (reason ?r))      (not (impossible (id ?id2&:(< ?id2 ?id))))      (not (impossible (id ?id) (value ?v2&:(< ?v2 ?v))))      (not (impossible (id ?id) (value ?v) (priority ?p2&:(< ?p2 ?p))))      ?f2 <- (possible (id ?id) (value ?v))   =>      (retract ?f1 ?f2)      (assert (technique-employed (priority ?p) (reason ?r))))      ;;; ************;;; remove-extra;;; ************(defrule remove-extra   (declare (salience 10))      (phase elimination)      ?f <- (impossible (id ?id) (value ?v))      (not (possible (id ?id) (value ?v)))      =>      (retract ?f))   ;;; ****************;;; elimination-done;;; ****************(defrule elimination-done   (declare (salience 10))      ?f <- (phase elimination)      (not (impossible))      =>      (retract ?f)      (assert (phase match)));;; ###############;;; TECHNIQUE RULES;;; ###############;;; #############;;; Naked Singles;;; #############;;; ******************;;; naked-single-group;;; ******************(defrule naked-single-group      (priority ?p)   (technique (name Naked-Single) (priority ?p))      (possible (value ?v) (group ?g) (id ?id))      (not (possible (value ~?v) (group ?g) (id ?id)))      (possible (value ?v) (group ?g) (id ?id2&~?id))      =>      (assert (impossible (id ?id2) (value ?v) (priority ?p) (reason "Naked Single"))))   ;;; ****************;;; naked-single-row;;; ****************(defrule naked-single-row      (priority ?p)   (technique (name Naked-Single) (priority ?p))      (possible (value ?v) (row ?r) (id ?id))      (not (possible (value ~?v) (row ?r) (id ?id)))      (possible (value ?v) (row ?r) (id ?id2&~?id))      =>      (assert (impossible (id ?id2) (value ?v) (priority ?p) (reason "Naked Single"))))   ;;; *******************;;; naked-single-column;;; *******************(defrule naked-single-column      (priority ?p)   (technique (name Naked-Single) (priority ?p))      (possible (value ?v) (column ?c) (id ?id))      (not (possible (value ~?v) (column ?c) (id ?id)))      (possible (value ?v) (column ?c) (id ?id2&~?id))      =>      (assert (impossible (id ?id2) (value ?v) (priority ?p) (reason "Naked Single"))));;; ##############;;; Hidden Singles;;; ##############   ;;; *******************;;; hidden-single-group;;; *******************(defrule hidden-single-group      (priority ?p)   (technique (name Hidden-Single) (priority ?p))      (possible (value ?v) (group ?g) (id ?id))      (not (possible (value ?v) (group ?g) (id ~?id)))      (possible (value ?v2&~?v) (group ?g) (id ?id))      =>      (assert (impossible (id ?id) (value ?v2) (priority ?p) (reason "Hidden Single"))))   ;;; *****************;;; hidden-single-row;;; *****************(defrule hidden-single-row      (priority ?p)   (technique (name Hidden-Single) (priority ?p))      (possible (value ?v) (row ?r) (id ?id))      (not (possible (value ?v) (row ?r) (id ~?id)))      (possible (value ?v2&~?v) (row ?r) (id ?id))      =>      (assert (impossible (id ?id) (value ?v2) (priority ?p) (reason "Hidden Single"))))   ;;; ********************;;; hidden-single-column;;; ********************(defrule hidden-single-column      (priority ?p)   (technique (name Hidden-Single) (priority ?p))      (possible (value ?v) (column ?c) (id ?id))      (not (possible (value ?v) (column ?c) (id ~?id)))      (possible (value ?v2&~?v) (column ?c) (id ?id))      =>      (assert (impossible (id ?id) (value ?v2) (priority ?p) (reason "Hidden Single"))));;; ############################;;; Locked Candidate Single Line;;; ############################;;; ********************************;;; locked-candidate-single-line-row;;; ********************************(defrule locked-candidate-single-line-row      (priority ?p)   (technique (name Locked-Candidate-Single-Line) (priority ?p))      (possible (value ?v) (row ?r) (group ?g))      (not (possible (value ?v) (row ~?r) (group ?g)))      (possible (value ?v) (row ?r) (group ~?g) (id ?id))      =>      (assert (impossible (id ?id) (value ?v) (priority ?p) (reason "Locked Candidate Single Line"))));;; ***********************************;;; locked-candidate-single-line-column;;; ***********************************(defrule locked-candidate-single-line-column      (priority ?p)   (technique (name Locked-Candidate-Single-Line) (priority ?p))      (possible (value ?v) (column ?c) (group ?g))      (not (possible (value ?v) (column ~?c) (group ?g)))      (possible (value ?v) (column ?c) (group ~?g) (id ?id))      =>      (assert (impossible (id ?id) (value ?v) (priority ?p) (reason "Locked Candidate Single Line"))));;; ###############################;;; Locked Candidate Multiple Lines;;; ###############################;;; ***********************************;;; locked-candidate-multiple-lines-row;;; ***********************************(defrule locked-candidates-multiple-lines-row   (priority ?p)   (technique (name Locked-Candidate-Multiple-Lines) (priority ?p))      (possible (value ?v) (row ?r) (group ?g))      (not (possible (value ?v) (row ?r) (group ~?g)))      (possible (value ?v) (row ~?r) (group ?g) (id ?id))      =>      (assert (impossible (id ?id) (value ?v) (priority ?p) (reason "Locked Candidate Multiple Lines"))));;; **************************************;;; locked-candidate-multiple-lines-column;;; **************************************(defrule locked-candidate-multiple-lines-column   (priority ?p)   (technique (name Locked-Candidate-Multiple-Lines) (priority ?p))      (possible (value ?v) (column ?c) (group ?g))      (not (possible (value ?v) (column ?c) (group ~?g)))      (possible (value ?v) (column ~?c) (group ?g) (id ?id))      =>      (assert (impossible (id ?id) (value ?v) (priority ?p) (reason "Locked Candidate Multiple Lines"))));;; ###########;;; Naked Pairs;;; ###########;;; ***************;;; naked-pairs-row;;; ***************(defrule naked-pairs-row   (priority ?p)   (technique (name Naked-Pairs) (priority ?p))      (possible (value ?v1) (row ?r) (column ?c1))      (possible (value ?v2&~?v1) (row ?r) (column ?c1))      (not (possible (value ~?v2&~?v1) (row ?r) (column ?c1)))      (possible (value ?v1) (row ?r) (column ?c2&~?c1))      (possible (value ?v2) (row ?r) (column ?c2))      (not (possible (value ~?v2&~?v1) (row ?r) (column ?c2)))   (possible (value ?v& ?v1 | ?v2) (row ?r) (column ~?c1&~?c2) (id ?id))   =>      (assert (impossible (id ?id) (value ?v) (priority ?p) (reason "Naked Pairs"))));;; ******************;;; naked-pairs-column;;; ******************(defrule naked-pairs-column   (priority ?p)   (technique (name Naked-Pairs) (priority ?p))   (possible (value ?v1) (row ?r1) (column ?c))      (possible (value ?v2&~?v1) (row ?r1) (column ?c))      (not (possible (value ~?v2&~?v1) (row ?r1) (column ?c)))      (possible (value ?v1) (row ?r2&~?r1) (column ?c))      (possible (value ?v2) (row ?r2) (column ?c))      (not (possible (value ~?v2&~?v1) (row ?r2) (column ?c)))   (possible (value ?v& ?v1 | ?v2) (row ~?r1&~?r2) (column ?c) (id ?id))   =>      (assert (impossible (id ?id) (value ?v) (priority ?p) (reason "Naked Pairs"))));;; *****************;;; naked-pairs-group;;; *****************(defrule naked-pairs-group   (priority ?p)   (technique (name Naked-Pairs) (priority ?p))   (possible (value ?v1) (group ?g) (id ?id1))      (possible (value ?v2&~?v1) (id ?id1))      (not (possible (value ~?v2&~?v1) (id ?id1)))      (possible (value ?v1) (group ?g) (id ?id2&~?id1))      (possible (value ?v2) (id ?id2))      (not (possible (value ~?v2&~?v1) (id ?id2)))   (possible (value ?v& ?v1 | ?v2) (group ?g) (id ?id&~?id2&~?id1))   =>      (assert (impossible (id ?id) (value ?v) (priority ?p) (reason "Naked Pairs"))));;; ############;;; Hidden Pairs;;; ############;;; ****************;;; hidden-pairs-row;;; ****************(defrule hidden-pairs-row   (priority ?p)   (technique (name Hidden-Pairs) (priority ?p))      (possible (value ?v1) (row ?r) (column ?c1))      (possible (value ?v2&~?v1) (row ?r) (column ?c1))         (possible (value ?v1) (row ?r) (column ?c2&~?c1))      (possible (value ?v2) (row ?r) (column ?c2))      (not (possible (value ?v1 | ?v2) (row ?r) (column ?c3&~?c2&~?c1)))   (possible (value ?v&~?v1&~?v2) (row ?r) (column ?c1 | ?c2) (id ?id))   =>      (assert (impossible (id ?id) (value ?v) (priority ?p) (reason "Hidden Pairs"))));;; *******************;;; hidden-pairs-column;;; *******************(defrule hidden-pairs-column   (priority ?p)   (technique (name Hidden-Pairs) (priority ?p))      (possible (value ?v1) (row ?r1) (column ?c))      (possible (value ?v2&~?v1) (row ?r1) (column ?c))         (possible (value ?v1) (row ?r2&~?r1) (column ?c))      (possible (value ?v2) (row ?r2) (column ?c))      (not (possible (value ?v1 | ?v2) (row ?r3&~?r2&~?r1) (column ?c)))   (possible (value ?v&~?v1&~?v2) (row ?r1 | ?r2) (column ?c) (id ?id))   =>      (assert (impossible (id ?id) (value ?v) (priority ?p) (reason "Hidden Pairs"))));;; ******************;;; hidden-pairs-group;;; ******************(defrule hidden-pairs-group   (priority ?p)   (technique (name Hidden-Pairs) (priority ?p))      (possible (value ?v1) (group ?g) (id ?id1))      (possible (value ?v2&~?v1) (id ?id1))      

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -