1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % ECLiPSe module for solving Crossfigure Puzzle #9, from Thinks.com. % % This module written by Warwick Harvey, IC-Parc, wh @icparc .ic.ac.uk. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- module(cf009). :- export cf009/1. :- lib(fd). :- use_module(crossfig). % % cf009(M): % Top-level goal for solving the puzzle. % cf009(M) :- constrain(M, Vars), labeling(Vars), print_matrix(M). constrain(M, MVars) :- dim(M, [9, 9]), dim(T, [9, 9]), % Set up the constraints between the matrix elements and the % clue numbers. across(M, T, A1, 2, 1, 1), across(M, T, A3, 3, 1, 4), across(M, T, A5, 2, 1, 8), across(M, T, A7, 4, 2, 1), across(M, T, A8, 4, 2, 6), across(M, T, A9, 3, 3, 4), across(M, T, A11, 3, 4, 1), across(M, T, A13, 3, 4, 7), across(M, T, A15, 2, 5, 3), across(M, T, A16, 2, 5, 6), across(M, T, A17, 3, 6, 1), across(M, T, A20, 3, 6, 7), across(M, T, A22, 3, 7, 4), across(M, T, A24, 4, 8, 1), across(M, T, A25, 4, 8, 6), across(M, T, A27, 2, 9, 1), across(M, T, A28, 3, 9, 4), across(M, T, A29, 2, 9, 8), down(M, T, D1, 2, 1, 1), down(M, T, D2, 4, 1, 2), down(M, T, D3, 3, 1, 4), down(M, T, D4, 3, 1, 6), down(M, T, D5, 4, 1, 8), down(M, T, D6, 2, 1, 9), down(M, T, D10, 2, 3, 5), down(M, T, D11, 3, 4, 1), down(M, T, D12, 3, 4, 3), down(M, T, D13, 3, 4, 7), down(M, T, D14, 3, 4, 9), down(M, T, D18, 4, 6, 2), down(M, T, D19, 2, 6, 5), down(M, T, D21, 4, 6, 8), down(M, T, D22, 3, 7, 4), down(M, T, D23, 3, 7, 6), down(M, T, D24, 2, 8, 1), down(M, T, D26, 2, 8, 9), init_matrix(M, T, MVars), % Make a nice graphical display of the search if the user is % using TkECLiPSe. make_display_matrix(M, matrix), % Set up the clue constraints. /* Across 1 20 across divided by twelve 3 Four times 19 down 5 29 across minus nine 7 A square number 8 9 across times 6 down 9 10 down times six 11 8 across divided by nine 13 11 down minus twelve 15 6 down plus nineteen 16 A prime number 17 13 down minus twenty-seven 20 14 down plus ninety 22 17 across minus twenty-five 24 8 across minus 648 25 5 down minus 287 27 16 across minus forty-seven 28 Eight times 15 across 29 24 down minus thirty */ A1 #= A20 / 12, A3 #= 4 * D19, A5 #= A29 - 9, square(A7), A8 #= A9 * D6, A9 #= 6 * D10, A11 #= A8 / 9, A13 #= D11 - 12, A15 #= D6 + 19, prime(A16), A17 #= D13 - 27, A20 #= D14 + 90, A22 #= A17 - 25, A24 #= A8 - 648, A25 #= D5 - 287, A27 #= A16 - 47, A28 #= 8 * A15, A29 #= D24 - 30, /* Down 1 26 down minus twenty-one 2 8 across plus 212 3 28 across minus 198 4 22 across minus forty 5 18 down minus 575 6 A square number 10 A prime number 11 11 across minus fifteen 12 Eleven times 10 down 13 13 across plus twenty-one 14 8 across divided by twelve 18 Five times 7 across 19 Two times 6 down 21 Five times 12 down 22 8 across divided by nine 23 18 down divided by eight 24 9 across divided by three 26 Two times 10 down */ D1 #= D26 - 21, D2 #= A8 + 212, D3 #= A28 - 198, D4 #= A22 - 40, D5 #= D18 - 575, square(D6), prime(D10), D11 #= A11 - 15, D12 #= 11 * D10, D13 #= A13 + 21, D14 #= A8 / 12, D18 #= 5 * A7, D19 #= 2 * D6, D21 #= 5 * D12, D22 #= A8 / 9, D23 #= D18 / 8, D24 #= A9 / 3, D26 #= 2 * D10. |