forked from brandtdudziak/CS231-constraint-programming
/
lights.ecl
61 lines (40 loc) · 1.16 KB
/
lights.ecl
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
:- lib(lists).
:- lib(fd).
:- lib(fd_search).
%Q6
lights(Lights) :-
Lights = [A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P],
Lights::0..1,
At #= (_ * 2),
At #= A + B + C + D + E + I + M,
Bt #= (_ * 2),
Bt #= B + A + C + D + F + J + N,
Ct #= (_ * 2),
Ct #= C + A + B + D + G + K + O,
Dt #= (_ * 2) + 1,
Dt #= D + A + B + C + H + L + P,
Et #= (_ * 2),
Et #= E + F + G + H + A + I + M,
Ft #= (_ * 2),
Ft #= F + E + G + H + B + J + N,
Gt #= (_ * 2),
Gt #= G + E + F + H + C + K + O,
Ht #= (_ * 2) + 1,
Ht #= H + E + F + G + D + L + P,
It #= (_ * 2) + 1,
It #= I + J + K + L + A + E + M,
Jt #= (_ * 2),
Jt #= J + I + K + L + B + F + N,
Kt #= (_ * 2) + 1,
Kt #= K + I + J + L + C + G + O,
Lt #= (_ * 2),
Lt #= L + I + J + K + G + H + P,
Mt #= (_ * 2) + 1,
Mt #= M + N + O + P + A + E + I,
Nt #= (_ * 2),
Nt #= N + M + O + P + B + F + J,
Ot #= (_ * 2),
Ot #= O + M + N + P + C + G + K,
Pt #= (_ * 2),
Pt #= P + M + N + O + D + H + L,
labeling(Lights).