monadiccp-0.7.7: examples/GraphColor.hs
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE FlexibleContexts #-}
import Control.CP.FD.Example
model :: ExampleMinModel ()
model () = do
let c = board
let numNodes = c!0
numEdges = c!1
edgePos = slice c ((cte 2) @.. (1+numEdges))
edge i = slice c ((2+numEdges+((i@=0) @? (cte 0,edgePos!(i-1)))) @.. (1+numEdges+(edgePos!i)))
exists $ \numColors -> do
exists $ \colors -> do
numColors @: (cte 0,numNodes)
size colors @= numNodes
colors `allin` (cte 0,numColors)
loopall (0,(size (edge 0)-1)) $ \i -> colors!((edge 0)!i) @= (size (edge 0)-1-i)
loopall (1,numEdges-1) $ allDiffD . slice colors . edge
return (numColors,colors)
main = example_min_main_void model
{-
[numNodes,numEdges,[cumul. clique sizes],[clique elems]]
0--1
| |
2--3
4,4,2,4,6,8,0,1,1,3,3,2,2,0
0-1
/ \
4-----2
\ /
\3/
5,6,2,4,6,8,10,12,0,1,1,2,2,3,3,4,4,0,2,4
-}
board :: ModelCol
board = list $
[
200,367,
30,60,85,110,135,160,185,210,235,260,285,305,325,345,365,385,405,425,445,465,485,505,525,545,565,585,600,615,630,645,660,675,690,705,720,735,750,765,780,795,810,825,840,855,870,885,900,910,920,930,940,950,955,960,965,970,975,980,985,990,995,1000,1005,1010,1015,1020,1025,1027,1029,1031,1033,1035,1037,1039,1041,1043,1045,1047,1049,1051,1053,1055,1057,1059,1061,1063,1065,1067,1069,1071,1073,1075,1077,1079,1081,1083,1085,1087,1089,1091,1093,1095,1097,1099,1101,1103,1105,1107,1109,1111,1113,1115,1117,1119,1121,1123,1125,1127,1129,1131,1133,1135,1137,1139,1141,1143,1145,1147,1149,1151,1153,1155,1157,1159,1161,1163,1165,1167,1169,1171,1173,1175,1177,1179,1181,1183,1185,1187,1189,1191,1193,1195,1197,1199,1201,1203,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379,1381,1383,1385,1387,1389,1391,1393,1395,1397,1399,1401,1403,1405,1407,1409,1411,1413,1415,1417,1419,1421,1423,1425,1427,1429,1431,1433,1435,1437,1439,1441,1443,1445,1447,1449,1451,1453,1455,1457,1459,1461,1463,1465,1467,1469,1471,1473,1475,1477,1479,1481,1483,1485,1487,1489,1491,1493,1495,1497,1499,1501,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533,1535,1537,1539,1541,1543,1545,1547,1549,1551,1553,1555,1557,1559,1561,1563,1565,1567,1569,1571,1573,1575,1577,1579,1581,1583,1585,1587,1589,1591,1593,1595,1597,1599,1601,1603,1605,1607,1609,1611,1613,1615,1617,1619,1621,1623,1625,
6,11,14,25,40,42,48,53,61,76,80,87,89,92,108,115,120,131,132,137,145,159,162,163,164,168,172,173,176,182,
3,15,16,31,34,35,37,38,49,58,67,78,86,91,100,110,114,123,129,132,133,140,143,154,167,168,174,175,193,197,
3,10,33,38,43,45,48,51,65,66,82,88,90,93,94,103,107,128,131,141,152,155,168,185,199,
0,4,7,26,28,33,36,58,61,72,79,81,90,99,105,114,115,124,135,152,159,161,173,181,192,
12,15,28,39,43,44,45,66,83,84,85,99,102,108,112,115,120,126,131,152,157,163,171,182,183,
13,14,15,38,55,66,76,78,87,91,95,99,109,110,125,130,134,137,148,153,159,169,181,185,195,
3,4,31,35,41,42,57,60,65,66,72,74,84,86,90,91,94,96,110,139,140,141,165,179,199,
0,4,5,9,28,31,42,49,54,63,65,72,74,75,76,82,91,99,107,109,140,147,154,169,182,
4,5,10,17,41,43,48,58,65,85,92,97,107,112,114,129,131,146,150,153,158,169,176,184,191,
4,8,15,16,20,21,37,55,68,84,87,104,109,112,117,119,122,123,126,133,142,164,167,180,195,
5,6,10,11,28,30,43,46,53,60,66,79,82,105,114,116,119,124,127,147,157,171,184,195,196,
15,16,30,35,36,56,66,78,81,84,99,126,128,129,138,151,152,153,166,190,
5,21,23,29,39,40,49,69,88,114,122,127,128,142,148,155,161,171,188,190,
0,3,15,23,31,41,57,60,69,76,89,107,109,128,153,155,161,169,174,183,
9,33,43,61,64,69,85,98,100,101,114,120,138,144,172,182,184,187,188,198,
4,6,8,10,23,27,45,57,66,68,71,93,110,122,139,146,150,155,156,188,
4,14,18,22,63,77,78,83,94,98,104,114,150,166,172,177,183,186,196,199,
22,35,46,47,63,64,70,78,87,99,102,112,116,119,125,131,152,165,174,186,
1,3,13,15,19,26,46,51,65,73,76,110,114,149,152,163,166,170,178,186,
9,29,33,40,50,54,102,105,111,112,119,120,124,128,136,138,144,175,190,199,
39,75,79,102,106,112,123,125,138,145,154,155,159,162,165,168,175,181,189,196,
0,11,12,23,42,63,68,71,79,83,89,98,113,117,121,141,156,176,177,193,
10,17,31,56,77,89,102,115,116,117,118,120,136,157,163,168,172,182,193,196,
9,34,35,43,44,57,60,64,79,87,88,94,103,133,156,157,166,171,174,189,
13,21,22,31,41,45,66,67,79,86,112,116,119,146,160,171,175,181,192,195,
11,24,26,45,57,91,99,102,122,123,135,141,144,146,154,156,167,191,194,199,
17,44,53,61,82,90,95,103,107,122,124,145,169,186,190,
2,14,26,37,58,61,75,95,103,109,115,116,141,154,199,
5,13,21,28,61,64,65,73,105,115,119,132,148,154,185,
10,20,38,45,61,75,109,111,115,143,150,157,163,179,186,
9,45,48,49,51,52,57,64,70,128,158,163,182,183,192,
47,55,57,64,79,80,105,131,152,163,172,180,186,190,197,
16,36,69,84,99,113,118,121,126,137,160,162,165,177,196,
16,44,50,53,54,65,69,80,96,112,125,139,150,153,193,
6,54,72,76,86,95,96,144,145,148,151,164,168,180,183,
10,18,19,37,65,85,90,104,112,128,147,158,164,192,198,
20,21,36,50,53,74,90,96,99,124,129,140,163,171,183,
13,20,27,53,65,77,86,98,110,125,133,139,147,188,196,
23,41,43,49,58,74,77,86,111,126,150,168,173,185,189,
11,35,62,89,125,132,134,141,149,163,166,167,171,194,196,
14,28,30,52,114,115,122,125,132,135,172,177,179,181,195,
0,8,9,20,23,53,77,93,121,136,141,147,150,191,199,
3,21,47,49,91,102,106,113,124,136,140,143,177,178,194,
44,46,52,53,68,82,89,90,120,128,144,147,175,178,192,
8,16,19,21,67,72,79,82,86,90,115,116,149,152,199,
12,30,78,80,97,120,122,123,143,146,151,165,173,177,178,
9,19,39,46,91,109,128,130,131,146,148,150,178,185,198,
29,44,69,74,96,115,122,126,189,199,
22,42,52,53,97,113,146,151,160,195,
19,20,32,77,81,133,134,138,147,177,
0,4,56,59,107,109,144,149,158,167,
6,69,99,104,110,114,118,134,152,172,
25,76,126,140,143,
4,54,67,116,142,
47,52,124,151,192,
32,55,61,64,73,
11,65,128,134,190,
45,48,63,131,139,
34,55,82,108,151,
24,34,54,112,156,
12,47,72,148,163,
74,126,145,162,170,
73,78,104,175,192,
19,83,127,130,166,
20,90,98,137,165,
22,24,29,49,132,
82,92,116,134,184,
160,184,
192,199,
0,129,
20,80,
8,29,
93,171,
101,165,
124,193,
2,100,
66,173,
151,191,
164,187,
3,130,
118,176,
121,184,
25,106,
159,193,
121,123,
5,62,
97,101,
6,143,
123,163,
19,125,
17,108,
122,168,
181,184,
25,41,
62,70,
29,103,
48,67,
46,160,
79,170,
143,152,
38,184,
2,40,
191,195,
7,196,
62,199,
76,141,
82,166,
36,80,
51,189,
13,97,
3,192,
90,180,
47,176,
13,172,
92,121,
50,64,
65,113,
108,123,
26,106,
34,153,
90,123,
34,39,
116,178,
22,179,
50,61,
84,105,
84,93,
19,108,
29,59,
63,185,
119,129,
50,177,
80,194,
13,36,
46,56,
38,144,
82,193,
72,93,
49,95,
42,155,
117,140,
109,189,
19,35,
31,125,
118,191,
163,169,
40,167,
91,127,
3,121,
124,149,
40,174,
30,175,
19,132,
18,165,
34,93,
37,63,
10,55,
88,95,
76,122,
7,91,
25,141,
29,173,
139,173,
8,130,
110,158,
81,174,
113,114,
95,182,
136,149,
5,199,
56,106,
36,120,
133,187,
111,172,
19,34,
96,197,
32,108,
27,63,
50,188,
20,116,
50,118,
10,50,
24,172,
86,138,
35,50,
141,153,
98,132,
70,143,
1,97,
8,160,
37,170,
4,73,
1,94,
88,146,
59,61,
104,156,
62,172,
117,139,
66,189,
33,134,
122,169,
95,163,
95,152,
83,140,
110,189,
147,159,
22,147,
59,173,
30,41,
33,183,
181,187,
88,105,
93,151,
6,130,
24,30,
84,130,
72,120,
118,159,
147,189,
122,149,
24,175,
39,169,
164,186,
93,187,
13,156,
119,176,
73,91,
174,178,
71,198,
10,134,
30,101,
79,93,
180,187,
1,50,
51,59,
18,169,
73,153,
1,198,
137,154,
61,106,
80,113,
48,142,
100,111,
97,133,
82,97,
136,170,
53,134,
65,177,
7,80,
73,137,
6,70,
115,166,
72,196,
40,109,
91,101,
2,177,
120,185,
55,65,
72,166,
104,165,
173,187,
54,71,
3,61,
52,56,
120,149,
64,72,
42,43,
75,185,
62,68,
108,147,
30,111,
25,58,
39,93,
75,117,
61,194,
140,153,
80,121,
93,102,
9,177,
7,163,
17,70,
5,168,
63,178,
74,160,
148,158,
9,84,
30,76,
63,80,
68,99,
20,152,
7,182,
7,22,
71,134,
32,100,
107,164,
23,62,
5,98,
130,192,
65,144,
139,161,
24,124,
31,47,
29,140,
61,153,
53,109,
20,26,
143,160,
47,195,
171,172,
185,193,
128,173,
38,96,
14,171,
176,199,
111,139,
21,54,
80,171,
116,185,
184,199,
37,88,
62,133,
3,150,
48,109,
46,176,
24,178,
59,172,
180,198,
64,109,
110,111,
101,146,
66,164,
5,117,
144,179,
71,126,
166,169,
107,151,
46,85,
106,139,
27,153,
97,148,
68,185,
17,179,
10,142,
168,169,
4,46,
113,152,
52,176,
6,38,
22,48,
20,120,
2,84,
71,85,
91,116,
0,189,
116,197,
142,147,
33,165,
86,198,
146,149,
152,187,
44,62,
48,175,
56,150,
63,161,
71,164,
17,171,
19,66
]