Loading [Contrib]/a11y/accessibility-menu.js
Download
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 #2, from Thinks.com.
%
% This module written by Warwick Harvey, IC-Parc, wh@icparc.ic.ac.uk.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
:- module(cf002).
 
:- export cf002/1.
 
:- lib(fd).
:- use_module(crossfig).
 
%
% cf002(M):
%   Top-level goal for solving the puzzle.
%
 
cf002(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 A prime number
     3 27 across times three
     5 6 down plus twenty-five
     7 5 down minus 821
     8 2 down plus 1046
     9 24 down times four
    11 21 down divided by six
    13 21 down divided by three
    15 13 down divided by eleven
    16 12 down divided by seven
    17 9 across minus sixteen
    20 A square number
    22 20 across plus three
    24 8 across minus 234
    25 24 across minus 122
    27 22 across divided by six
    28 22 down plus nineteen
    29 26 down minus twenty
    */
 
    prime(A1),
    A3 #= 3 * A27,
    A5 #= D6 + 25,
    A7 #= D5 - 821,
    A8 #= D2 + 1046,
    A9 #= 4 * D24,
    A11 #= D21 / 6,
    A13 #= D21 / 3,
    A15 #= D13 / 11,
    A16 #= D12 / 7,
    A17 #= A9 - 16,
    square(A20),
    A22 #= A20 + 3,
    A24 #= A8 - 234,
    A25 #= A24 - 122,
    A27 #= A22 / 6,
    A28 #= D22 + 19,
    A29 #= D26 - 20,
 
    /*
    Down
 
     1 Two times 24 down
     2 23 down times four
     3 21 down divided by twelve
     4 28 across plus 161
     5 1 across times 1 down
     6 29 across times two
    10 13 across divided by nine
    11 3 down plus 180
    12 Seven times 27 across
    13 23 down minus 159
    14 26 down times eleven
    18 8 across plus 908
    19 10 down minus four
    21 22 across times nine
    22 22 across plus thirty-four
    23 A square number
    24 A prime number
    26 20 across divided by five
    */
 
    D1 #= 2 * D24,
    D2 #= 4 * D23,
    D3 #= D21 / 12,
    D4 #= A28 + 161,
    D5 #= A1 * D1,
    D6 #= 2 * A29,
    D10 #= A13 / 9,
    D11 #= D3 + 180,
    D12 #= 7 * A27,
    D13 #= D23 - 159,
    D14 #= 11 * D26,
    D18 #= A8 + 908,
    D19 #= D10 - 4,
    D21 #= 9 * A22,
    D22 #= A22 + 34,
    square(D23),
    prime(D24),
    D26 #= A20 / 5.