latin_square.fzn 6.92 KB
Newer Older
Valentin Platzgummer's avatar
Valentin Platzgummer committed
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
predicate all_different_int(array [int] of var int: x);
predicate count(array [int] of var int: x, var int: y, var int: c);
predicate fixed_cumulative(array [int] of var int: s, array [int] of int: d, array [int] of int: r, int: b);
predicate global_cardinality(array [int] of var int: x, array [int] of int: cover, array [int] of var int: counts);
predicate maximum_int(var int: m, array [int] of var int: x);
predicate minimum_int(var int: m, array [int] of var int: x);
predicate sliding_sum(int: low, int: up, int: seq, array [int] of var int: vs);
predicate sort(array [int] of var int: x, array [int] of var int: y);
predicate table_bool(array [int] of var bool: x, array [int, int] of bool: t);
predicate table_int(array [int] of var int: x, array [int, int] of int: t);
predicate var_cumulative(array [int] of var int: s, array [int] of int: d, array [int] of int: r, var int: b);
array [1..196] of var 1..14: x :: output_array([1..14, 1..14]);
constraint all_different_int([x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], x[9], x[10], x[11], x[12], x[13], x[14]]);
constraint all_different_int([x[1], x[15], x[29], x[43], x[57], x[71], x[85], x[99], x[113], x[127], x[141], x[155], x[169], x[183]]);
constraint all_different_int([x[2], x[16], x[30], x[44], x[58], x[72], x[86], x[100], x[114], x[128], x[142], x[156], x[170], x[184]]);
constraint all_different_int([x[3], x[17], x[31], x[45], x[59], x[73], x[87], x[101], x[115], x[129], x[143], x[157], x[171], x[185]]);
constraint all_different_int([x[4], x[18], x[32], x[46], x[60], x[74], x[88], x[102], x[116], x[130], x[144], x[158], x[172], x[186]]);
constraint all_different_int([x[5], x[19], x[33], x[47], x[61], x[75], x[89], x[103], x[117], x[131], x[145], x[159], x[173], x[187]]);
constraint all_different_int([x[6], x[20], x[34], x[48], x[62], x[76], x[90], x[104], x[118], x[132], x[146], x[160], x[174], x[188]]);
constraint all_different_int([x[7], x[21], x[35], x[49], x[63], x[77], x[91], x[105], x[119], x[133], x[147], x[161], x[175], x[189]]);
constraint all_different_int([x[8], x[22], x[36], x[50], x[64], x[78], x[92], x[106], x[120], x[134], x[148], x[162], x[176], x[190]]);
constraint all_different_int([x[9], x[23], x[37], x[51], x[65], x[79], x[93], x[107], x[121], x[135], x[149], x[163], x[177], x[191]]);
constraint all_different_int([x[10], x[24], x[38], x[52], x[66], x[80], x[94], x[108], x[122], x[136], x[150], x[164], x[178], x[192]]);
constraint all_different_int([x[11], x[25], x[39], x[53], x[67], x[81], x[95], x[109], x[123], x[137], x[151], x[165], x[179], x[193]]);
constraint all_different_int([x[12], x[26], x[40], x[54], x[68], x[82], x[96], x[110], x[124], x[138], x[152], x[166], x[180], x[194]]);
constraint all_different_int([x[13], x[27], x[41], x[55], x[69], x[83], x[97], x[111], x[125], x[139], x[153], x[167], x[181], x[195]]);
constraint all_different_int([x[14], x[28], x[42], x[56], x[70], x[84], x[98], x[112], x[126], x[140], x[154], x[168], x[182], x[196]]);
constraint all_different_int([x[15], x[16], x[17], x[18], x[19], x[20], x[21], x[22], x[23], x[24], x[25], x[26], x[27], x[28]]);
constraint all_different_int([x[29], x[30], x[31], x[32], x[33], x[34], x[35], x[36], x[37], x[38], x[39], x[40], x[41], x[42]]);
constraint all_different_int([x[43], x[44], x[45], x[46], x[47], x[48], x[49], x[50], x[51], x[52], x[53], x[54], x[55], x[56]]);
constraint all_different_int([x[57], x[58], x[59], x[60], x[61], x[62], x[63], x[64], x[65], x[66], x[67], x[68], x[69], x[70]]);
constraint all_different_int([x[71], x[72], x[73], x[74], x[75], x[76], x[77], x[78], x[79], x[80], x[81], x[82], x[83], x[84]]);
constraint all_different_int([x[85], x[86], x[87], x[88], x[89], x[90], x[91], x[92], x[93], x[94], x[95], x[96], x[97], x[98]]);
constraint all_different_int([x[99], x[100], x[101], x[102], x[103], x[104], x[105], x[106], x[107], x[108], x[109], x[110], x[111], x[112]]);
constraint all_different_int([x[113], x[114], x[115], x[116], x[117], x[118], x[119], x[120], x[121], x[122], x[123], x[124], x[125], x[126]]);
constraint all_different_int([x[127], x[128], x[129], x[130], x[131], x[132], x[133], x[134], x[135], x[136], x[137], x[138], x[139], x[140]]);
constraint all_different_int([x[141], x[142], x[143], x[144], x[145], x[146], x[147], x[148], x[149], x[150], x[151], x[152], x[153], x[154]]);
constraint all_different_int([x[155], x[156], x[157], x[158], x[159], x[160], x[161], x[162], x[163], x[164], x[165], x[166], x[167], x[168]]);
constraint all_different_int([x[169], x[170], x[171], x[172], x[173], x[174], x[175], x[176], x[177], x[178], x[179], x[180], x[181], x[182]]);
constraint all_different_int([x[183], x[184], x[185], x[186], x[187], x[188], x[189], x[190], x[191], x[192], x[193], x[194], x[195], x[196]]);
constraint int_eq(x[1], 1);
constraint int_eq(x[2], 2);
constraint int_eq(x[3], 3);
constraint int_eq(x[4], 4);
constraint int_eq(x[5], 5);
constraint int_eq(x[6], 6);
constraint int_eq(x[7], 7);
constraint int_eq(x[8], 8);
constraint int_eq(x[9], 9);
constraint int_eq(x[10], 10);
constraint int_eq(x[11], 11);
constraint int_eq(x[12], 12);
constraint int_eq(x[13], 13);
constraint int_eq(x[14], 14);
constraint int_eq(x[15], 2);
constraint int_eq(x[29], 3);
constraint int_eq(x[43], 4);
constraint int_eq(x[57], 5);
constraint int_eq(x[71], 6);
constraint int_eq(x[85], 7);
constraint int_eq(x[99], 8);
constraint int_eq(x[113], 9);
constraint int_eq(x[127], 10);
constraint int_eq(x[141], 11);
constraint int_eq(x[155], 12);
constraint int_eq(x[169], 13);
constraint int_eq(x[183], 14);
solve  :: int_search([x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], x[9], x[10], x[11], x[12], x[13], x[14], x[15], x[16], x[17], x[18], x[19], x[20], x[21], x[22], x[23], x[24], x[25], x[26], x[27], x[28], x[29], x[30], x[31], x[32], x[33], x[34], x[35], x[36], x[37], x[38], x[39], x[40], x[41], x[42], x[43], x[44], x[45], x[46], x[47], x[48], x[49], x[50], x[51], x[52], x[53], x[54], x[55], x[56], x[57], x[58], x[59], x[60], x[61], x[62], x[63], x[64], x[65], x[66], x[67], x[68], x[69], x[70], x[71], x[72], x[73], x[74], x[75], x[76], x[77], x[78], x[79], x[80], x[81], x[82], x[83], x[84], x[85], x[86], x[87], x[88], x[89], x[90], x[91], x[92], x[93], x[94], x[95], x[96], x[97], x[98], x[99], x[100], x[101], x[102], x[103], x[104], x[105], x[106], x[107], x[108], x[109], x[110], x[111], x[112], x[113], x[114], x[115], x[116], x[117], x[118], x[119], x[120], x[121], x[122], x[123], x[124], x[125], x[126], x[127], x[128], x[129], x[130], x[131], x[132], x[133], x[134], x[135], x[136], x[137], x[138], x[139], x[140], x[141], x[142], x[143], x[144], x[145], x[146], x[147], x[148], x[149], x[150], x[151], x[152], x[153], x[154], x[155], x[156], x[157], x[158], x[159], x[160], x[161], x[162], x[163], x[164], x[165], x[166], x[167], x[168], x[169], x[170], x[171], x[172], x[173], x[174], x[175], x[176], x[177], x[178], x[179], x[180], x[181], x[182], x[183], x[184], x[185], x[186], x[187], x[188], x[189], x[190], x[191], x[192], x[193], x[194], x[195], x[196]], first_fail, indomain, complete) satisfy;