to be least diff

MiniZinc model

include "globals.mzn"; 
int: n = 10;
int: m = n div 2;
array[1..m] of int: bases = [ceil(pow(10.0,int2float(m-i))) | i in 1..m];

set of int: digits = 0..9;
var digits: A;
var digits: B;
var digits: C;
var digits: D;
var digits: E;
var digits: F;
var digits: G;
var digits: H;
var digits: I;
var digits: J;
array[0..n-1] of string: s = array1d(0..n-1,
                           ["to1 ", 
                            "be1 ", 
                            "or ", 
                            "not ", 
                            "to2 ", 
                            "be2 ", 
                            "that ", 
                            "is ",
                            "the ", 
                            "question"]);
array[1..n] of var digits: FD =  [A, B, C, D, E, F, G, H, I, J];
var int: X;
var int: Y;
var int: difference = X - Y;
predicate scalar_product(array[int] of var int: arr1, array[int] of var int: arr2, var int: result) =
          assert(card(index_set(arr1)) == card(index_set(arr2)), 
            "scalar_product: arr1 and arr2 must be of same length.",
             result = sum(i in index_set(arr1)) (
                arr1[i] * arr2[i]
             )
          )
;

constraint
      scalar_product(bases, [A,B,C,D,E], X) /\
      scalar_product(bases, [F,G,H,I,J], Y) /\
      all_different(FD) /\
      difference > 0
; 

solve minimize difference;
output 
["<li> ("] ++
[
  show(s[fix(FD[i])]) ++ " "
  | i in 1..5
]
++ [") - ("] ++ 
[
  show(s[fix(FD[i])]) ++ " "
  | i in 6..10
]
++ [") = "] ++ 
[
  show(difference)
];


Back to Constrained-based constraint poetry
Created by Hakan Kjellerstrand hakank@gmail.com