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 #1, from Thinks.com. % % This module written by Warwick Harvey, IC-Parc, wh @icparc .ic.ac.uk. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- module(cf001). :- export cf001/1. :- lib(fd). :- use_module(crossfig). % % cf001(M): % Top-level goal for solving the puzzle. % cf001(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, 4, 1, 1), across(M, T, A4, 4, 1, 6), across(M, T, A7, 2, 2, 1), across(M, T, A8, 3, 2, 4), across(M, T, A9, 2, 2, 8), across(M, T, A10, 2, 3, 3), across(M, T, A11, 2, 3, 6), across(M, T, A13, 4, 4, 1), across(M, T, A15, 4, 4, 6), across(M, T, A17, 4, 6, 1), across(M, T, A20, 4, 6, 6), across(M, T, A23, 2, 7, 3), across(M, T, A24, 2, 7, 6), across(M, T, A25, 2, 8, 1), across(M, T, A27, 3, 8, 4), across(M, T, A28, 2, 8, 8), across(M, T, A29, 4, 9, 1), across(M, T, A30, 4, 9, 6), down(M, T, D1, 4, 1, 1), down(M, T, D2, 2, 1, 2), down(M, T, D3, 4, 1, 4), down(M, T, D4, 4, 1, 6), down(M, T, D5, 2, 1, 8), down(M, T, D6, 4, 1, 9), down(M, T, D10, 2, 3, 3), down(M, T, D12, 2, 3, 7), down(M, T, D14, 3, 4, 2), down(M, T, D16, 3, 4, 8), down(M, T, D17, 4, 6, 1), down(M, T, D18, 2, 6, 3), down(M, T, D19, 4, 6, 4), down(M, T, D20, 4, 6, 6), down(M, T, D21, 2, 6, 7), down(M, T, D22, 4, 6, 9), down(M, T, D26, 2, 8, 2), down(M, T, D28, 2, 8, 8), 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 27 across times two 4 4 down plus seventy-one 7 18 down plus four 8 6 down divided by sixteen 9 2 down minus eighteen 10 Dozen in six gross 11 5 down minus seventy 13 26 down times 23 across 15 6 down minus 350 17 25 across times 23 across 20 A square number 23 A prime number 24 A square number 25 20 across divided by seventeen 27 6 down divided by four 28 Four dozen 29 Seven gross 30 22 down plus 450 */ A1 #= 2 * A27, A4 #= D4 + 71, A7 #= D18 + 4, A8 #= D6 / 16, A9 #= D2 - 18, A10 #= 6 * 144 / 12, A11 #= D5 - 70, A13 #= D26 * A23, A15 #= D6 - 350, A17 #= A25 * A23, square(A20), prime(A23), square(A24), A25 #= A20 / 17, A27 #= D6 / 4, A28 #= 4 * 12, A29 #= 7 * 144, A30 #= D22 + 450, /* Down 1 1 across plus twenty-seven 2 Five dozen 3 30 across plus 888 4 Two times 17 across 5 29 across divided by twelve 6 28 across times 23 across 10 10 across plus four 12 Three times 24 across 14 13 across divided by sixteen 16 28 down times fifteen 17 13 across minus 399 18 29 across divided by eighteen 19 22 down minus ninety-four 20 20 across minus nine 21 25 across minus fifty-two 22 20 down times six 26 Five times 24 across 28 21 down plus twenty-seven */ D1 #= A1 + 27, D2 #= 5 * 12, D3 #= A30 + 888, D4 #= 2 * A17, D5 #= A29 / 12, D6 #= A28 * A23, D10 #= A10 + 4, D12 #= A24 * 3, D14 #= A13 / 16, D16 #= 15 * D28, D17 #= A13 - 399, D18 #= A29 / 18, D19 #= D22 - 94, D20 #= A20 - 9, D21 #= A25 - 52, D22 #= 6 * D20, D26 #= 5 * A24, D28 #= D21 + 27. |