/* * Copyright 2002, 2003, 2004, 2005 - Koalog */ package com.koalog.jcs.examples; import org.apache.log4j.PropertyConfigurator; import com.koalog.jcs.variable.IntegerVariable; import com.koalog.jcs.solver.DefaultFFSolver; import com.koalog.jcs.constraint.BaseProblem; import com.koalog.jcs.constraint.arithmetic.ConstantSum; import com.koalog.jcs.constraint.arithmetic.Hyperplan; import com.koalog.jcs.constraint.arithmetic.AllDifferent; /** * This problem comes from the newsgroup rec.puzzle. * The numbers from 1 to 26 are assigned to the letters of the alphabet. * The numbers beside each word are the total of the values assigned to the * letters in the word (e.g for LYRE: L,Y,R,E might be to equal 5,9,20 and 13 * or any other combination that add up to 47). * * Find the value of each letter under the equations: *
* BALLET 45 GLEE 66 POLKA 59 SONG 61 * CELLO 43 JAZZ 58 QUARTET 50 SOPRANO 82 * CONCERT 74 LYRE 47 SAXOPHONE 134 THEME 72 * FLUTE 30 OBOE 53 SCALE 51 VIOLIN 100 * FUGUE 50 OPERA 65 SOLO 37 WALTZ 34 ** * @author Daniel Diaz * @author Yan Georget */ public class AlphaProblem extends BaseProblem { //------------------------------------------------------------------------ // CONSTRUCTORS //------------------------------------------------------------------------ /** * Sole constructor. */ public AlphaProblem() { super(); IntegerVariable a = new IntegerVariable("a",1,26); IntegerVariable b = new IntegerVariable("b",1,26); IntegerVariable c = new IntegerVariable("c",1,26); IntegerVariable d = new IntegerVariable("d",1,26); IntegerVariable e = new IntegerVariable("e",1,26); IntegerVariable f = new IntegerVariable("f",1,26); IntegerVariable g = new IntegerVariable("g",1,26); IntegerVariable h = new IntegerVariable("h",1,26); IntegerVariable i = new IntegerVariable("i",1,26); IntegerVariable j = new IntegerVariable("j",1,26); IntegerVariable k = new IntegerVariable("k",1,26); IntegerVariable l = new IntegerVariable("l",1,26); IntegerVariable m = new IntegerVariable("m",1,26); IntegerVariable n = new IntegerVariable("n",1,26); IntegerVariable o = new IntegerVariable("o",1,26); IntegerVariable p = new IntegerVariable("p",1,26); IntegerVariable q = new IntegerVariable("q",1,26); IntegerVariable r = new IntegerVariable("r",1,26); IntegerVariable s = new IntegerVariable("s",1,26); IntegerVariable t = new IntegerVariable("t",1,26); IntegerVariable u = new IntegerVariable("u",1,26); IntegerVariable v = new IntegerVariable("v",1,26); IntegerVariable w = new IntegerVariable("w",1,26); IntegerVariable x = new IntegerVariable("x",1,26); IntegerVariable y = new IntegerVariable("y",1,26); IntegerVariable z = new IntegerVariable("z",1,26); IntegerVariable[] vars = new IntegerVariable[] {a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}; add(new AllDifferent(vars)); add(new Hyperplan(new int[]{1, 1, 1, 2, 1}, new IntegerVariable[] {a, b, e, l, t}, 45)); add(new Hyperplan(new int[]{1, 1, 2, 1}, new IntegerVariable[] {c, e, l, o}, 43)); add(new Hyperplan(new int[]{2, 1, 1, 1, 1, 1}, new IntegerVariable[] {c, e, o, n, r, t}, 74)); add(new ConstantSum(new IntegerVariable[] {e, f, l, u, t}, 30)); add(new Hyperplan(new int[]{1, 1, 1, 2}, new IntegerVariable[] {e, f, g, u}, 50)); add(new Hyperplan(new int[]{2, 1, 1}, new IntegerVariable[] {e, g, l}, 66)); add(new Hyperplan(new int[]{1, 1, 2}, new IntegerVariable[] {a, j, z}, 58)); add(new ConstantSum(new IntegerVariable[] {e, l, r, y}, 47)); add(new Hyperplan(new int[]{1, 1, 2}, new IntegerVariable[] {b, e, o}, 53)); add(new ConstantSum(new IntegerVariable[] {a, e, o, p, r}, 65)); add(new ConstantSum(new IntegerVariable[] {a, k, l, o, p}, 59)); add(new Hyperplan(new int[]{1, 1, 1, 1, 2, 1}, new IntegerVariable[] {a, e, q, r, t, u}, 50)); add(new Hyperplan(new int[]{1, 1, 1, 2, 1, 1, 1, 1}, new IntegerVariable[]{a, e, h, o, n, p, s, x}, 134)); add(new ConstantSum(new IntegerVariable[] {a, c, e, l, s}, 51)); add(new Hyperplan(new int[]{1, 2, 1}, new IntegerVariable[] {l, o, s}, 37)); add(new ConstantSum(new IntegerVariable[] {g, n, o, s}, 61)); add(new Hyperplan(new int[]{1, 1, 2, 1, 1, 1}, new IntegerVariable[] {a, n, o, p, r, s}, 82)); add(new Hyperplan(new int[]{2, 1, 1, 1}, new IntegerVariable[] {e, h, m, t}, 72)); add(new Hyperplan(new int[]{2, 1, 1, 1, 1}, new IntegerVariable[] {i, l, n, o, v}, 100)); add(new ConstantSum(new IntegerVariable[] {a, l, t, w, z}, 34)); setVariables(vars); } //------------------------------------------------------------------------ // STATIC METHODS //------------------------------------------------------------------------ /** * Runs the problem. * @param args the command line arguments * args[0] must contain a log4j properties file location */ public static void main(String[] args) { PropertyConfigurator.configure(args[0]); new DefaultFFSolver(new AlphaProblem()).solve(1); } }