I have worked up a jess program that identifies permutations of the
"magic square" which is 3x3 and contains the numbers 1-9, 1 in each
cell such that each of the 3 rows, 3 columns and 2 diagonals sum to
15. The output includes all 8 solutions (1 arrangement rotated 4 ways
and flipped for a total of 8).
Is this code anything close to idiomatic Jess? The way that I am
expressing that all 9 squares must have unique values seems like it
must not be the "right" way.
I would appreciate any feedback.
(deftemplate square (slot number) (slot hasValue))
(defrule find-solution
(square (number 1) (hasValue ?value1))
(square (number 2) (hasValue ?value2&~?value1))
(square (number 3) (hasValue ?value3&~?value2&~?value1))
(square (number 4) (hasValue ?value4&~?value3&~?value2&~?value1))
(square (number 5) (hasValue ?value5&~?value4&~?value3&~?value2&~?value1))
(square (number 6) (hasValue
?value6&~?value5&~?value4&~?value3&~?value2&~?value1))
(square (number 7) (hasValue
?value7&~?value6&~?value5&~?value4&~?value3&~?value2&~?value1))
(square (number 8) (hasValue
?value8&~?value7&~?value6&~?value5&~?value4&~?value3&~?value2&~?value1))
(square (number 9) (hasValue
?value9&~?value8&~?value7&~?value6&~?value5&~?value4&~?value3&~?value2&~?value1))
;; rows must sum 15
(test (= (+ ?value1 ?value2 ?value3) 15))
(test (= (+ ?value4 ?value5 ?value6) 15))
(test (= (+ ?value7 ?value8 ?value9) 15))
;; columns must sum 15
(test (= (+ ?value1 ?value4 ?value7) 15))
(test (= (+ ?value2 ?value5 ?value8) 15))
(test (= (+ ?value3 ?value6 ?value9) 15))
;; diagonals must sum 15
(test (= (+ ?value3 ?value5 ?value7) 15))
(test (= (+ ?value1 ?value5 ?value9) 15))
=>
(printout t ?value1 " " ?value2 " " ?value3 crlf)
(printout t ?value4 " " ?value5 " " ?value6 crlf)
(printout t ?value7 " " ?value8 " " ?value9 crlf crlf))
(defrule generate-combinations
=>
(bind ?squareNumber 1)
(while (<= ?squareNumber 9) do
(bind ?squareValue 1)
(while (<= ?squareValue 9) do
(assert (square (number ?squareNumber) (hasValue ?squareValue)))
(bind ?squareValue (+ ?squareValue 1)))
(bind ?squareNumber (+ ?squareNumber 1))))
(reset)
(run)
--
Jeff Brown
Director North American Operations
G2One Inc.
http://www.g2one.com/
Autism Strikes 1 in 166
Find The Cause ~ Find The Cure
http://www.autismspeaks.org/
--------------------------------------------------------------------
To unsubscribe, send the words 'unsubscribe jess-users [EMAIL PROTECTED]'
in the BODY of a message to [EMAIL PROTECTED], NOT to the list
(use your own address!) List problems? Notify [EMAIL PROTECTED]
--------------------------------------------------------------------