diff --git a/Sudoku/SudokuEvent.mch b/Sudoku/SudokuEvent.mch index cefcf11348febd0d15eaeb22897e750e0a2b9f90..87514f55fc86335e4ca17cfa575a4a9c0327ddf5 100644 --- a/Sudoku/SudokuEvent.mch +++ b/Sudoku/SudokuEvent.mch @@ -29,51 +29,35 @@ DEFINITIONS MAX_OPERATIONS_SetBoard == 10; /* PUZZLE CONSTRAINTS : */ - PUZZLE(BOARD) == ( + PUZZLE1 == + {(1↦{(1↦7),(2↦8),(3↦1),(4↦6),(6↦2),(7↦9),(9↦5)}), + (2↦{(1↦9),(3↦2),(4↦7),(5↦1)}), + (3↦{(3↦6),(4↦8),(8↦1),(9↦2)}), + (4↦{(1↦2),(4↦3),(7↦8),(8↦5),(9↦1)}), + (5↦{(2↦7),(3↦3),(4↦5),(9↦4)}),(6↦{(3↦8),(6↦9),(7↦3),(8↦6)}), + (7↦{(1↦1),(2↦9),(6↦7),(8↦8)}), + (8↦{(1↦8),(2↦6),(3↦7),(6↦3),(7↦4),(9↦9)}), + (9↦{(3↦5),(7↦1)})} + ; + PUZZLE2 == + {(1↦{(1↦1),(2↦3),(4↦8),(5↦6),(6↦5),(9↦9)}), + (2↦{(3↦8),(6↦4),(7↦1),(9↦2)}), + (3↦{(4↦1),(5↦2)}), + (4↦{(3↦7),(4↦6),(7↦9),(9↦3)}), + (5↦{(1↦9),(2↦1),(3↦5),(4↦4),(8↦8),(9↦7)}), + (6↦{(1↦6),(3↦3),(5↦1),(6↦7),(8↦5)}), + (7↦{(7↦3),(8↦4),(9↦5)}), + (8↦{(3↦6),(4↦7),(6↦3),(7↦8),(8↦9)}), + (9↦{(3↦9),(5↦8),(9↦6)})}; - BOARD(1)(1)=7 & BOARD(1)(2)=8 & BOARD(1)(3)=1 & BOARD(1)(4)=6 & BOARD(1)(6)=2 - & BOARD(1)(7)=9 & BOARD(1)(9)=5 & - BOARD(2)(1)=9 & BOARD(2)(3)=2 & BOARD(2)(4)=7 & BOARD(2)(5)=1 & - BOARD(3)(3)=6 & BOARD(3)(4)=8 & BOARD(3)(8)=1 & BOARD(3)(9)=2 & - - BOARD(4)(1)=2 & BOARD(4)(4)=3 & BOARD(4)(7)=8 & BOARD(4)(8)=5 & BOARD(4)(9)=1 & - BOARD(5)(2)=7 & BOARD(5)(3)=3 & BOARD(5)(4)=5 & BOARD(5)(9)=4 & - BOARD(6)(3)=8 & BOARD(6)(6)=9 & BOARD(6)(7)=3 & BOARD(6)(8)=6 & - - BOARD(7)(1)=1 & BOARD(7)(2)=9 & BOARD(7)(6)=7 & BOARD(7)(8)=8 & - BOARD(8)(1)=8 & BOARD(8)(2)=6 & BOARD(8)(3)=7 & BOARD(8)(6)=3 & BOARD(8)(7)=4 & BOARD(8)(9)=9 & - BOARD(9)(3)=5 & BOARD(9)(7)=1 - ); - PUZZLE2(BOARD) == ( - - BOARD(1)(1)=1 & BOARD(1)(2)=3 & BOARD(1)(4)=8 & BOARD(1)(5)=6 & BOARD(1)(6)=5 - & BOARD(1)(9)=9 & - BOARD(2)(3)=8 & BOARD(2)(6)=4 & BOARD(2)(7)=1 & BOARD(2)(9)=2 & - BOARD(3)(4)=1 & BOARD(3)(5)=2 & - - BOARD(4)(3)=7 & BOARD(4)(4)=6 & BOARD(4)(7)=9 & BOARD(4)(9)=3 & - BOARD(5)(1)=9 & BOARD(5)(2)=1 & BOARD(5)(3)=5 & BOARD(5)(4)=4 - & BOARD(5)(8)=8 & BOARD(5)(9)=7 & - BOARD(6)(1)=6 & BOARD(6)(3)=3 & BOARD(6)(5)=1 & BOARD(6)(6)=7 & BOARD(6)(8)=5 & - - BOARD(7)(7)=3 & BOARD(7)(8)=4 & BOARD(7)(9)=5 & - BOARD(8)(3)=6 & BOARD(8)(4)=7 & BOARD(8)(6)=3 & BOARD(8)(7)=8 & BOARD(8)(8)=9 & - BOARD(9)(3)=9 & BOARD(9)(5)=8 & BOARD(9)(9)=6 - ); - - PUZZLE3(BOARD) == ( - BOARD(1)(2)=4 & BOARD(1)(3)=3 & BOARD(1)(6)=5 & BOARD(1)(8)=8 & BOARD(1)(9)=7 & - BOARD(2)(2)=9 & BOARD(2)(6)=3 & - BOARD(3)(5)=2 & BOARD(3)(8)=1 & - - BOARD(4)(3)=9 & BOARD(4)(4)=8 & BOARD(4)(9)=5 & - BOARD(5)(2)=5 & BOARD(5)(3)=8 & BOARD(5)(8)=2 & BOARD(5)(9)=6 & - BOARD(6)(2)=7 & BOARD(6)(4)=2 & - - BOARD(7)(1)=5 & BOARD(7)(2)=8 & BOARD(7)(4)=1 & BOARD(7)(6)=2 & BOARD(7)(7)=4 & BOARD (7)(8)=7 & - BOARD(8)(9)=3 & - BOARD(9)(1)=9 & BOARD(9)(2)=1 & BOARD(9)(4)=7 & BOARD(9)(5)=6 & BOARD(9)(7)=5 - ); + PUZZLE3 == + {(1↦{(2↦4),(3↦3),(6↦5),(8↦8),(9↦7)}), + (2↦{(2↦9),(6↦3)}),(3↦{(5↦2),(8↦1)}),(4↦{(3↦9),(4↦8),(9↦5)}), + (5↦{(2↦5),(3↦8),(8↦2),(9↦6)}), + (6↦{(2↦7),(4↦2)}), + (7↦{(1↦5),(2↦8),(4↦1),(6↦2),(7↦4),(8↦7)}), + (8↦{(9↦3)}),(9↦{(1↦9),(2↦1),(4↦7),(5↦6),(7↦5)})} + ; UnassignedPosition(x,y) == x:DOM & y:DOM & not(y:dom(Board(x))); PossibleVals(cx,cy) == DOM \ ran({x,y,r| x|->y : conflict_pos(cx,cy) & y:dom(Board(x)) & r=Board(x)(y)}) @@ -84,7 +68,7 @@ CONSTANTS PuzzleBoard /*@desc "Stored Puzzle" */ PROPERTIES PuzzleBoard : DOM --> (DOM +-> RAN) & - PUZZLE(PuzzleBoard) & + PuzzleBoard : {PUZZLE1,PUZZLE2,PUZZLE3} & get_square = %x.(x:DOM | 1 + (x-1)/3) /*@desc "Get square (1,2,3) for a coordinate 1..9" */ & conflict_pos = %(x,y).(x:DOM & y:DOM | {x2,y2 | x2:DOM & y2:DOM & (x,y) /= (x2,y2) &