Here is a question from the Mathematical Association of America’s American Mathematics Competitions blog (which I found through this constraint programming blog):
Let x and y be two-digit integers such that y is obtained by reversing the digits of x. The integers x and y satisfy x^2 – y^2 = m^2 for some positive integer m. What is x + y + m?
This is easily solved using Solver Foundation’s constraint programming solver. The OML model is simple:
Model[ Decisions[ Integers[0, 9], x1, x2, y1, y2 ], Decisions[Integers[10, 100], x, y], Decisions[Integers[1, Infinity], m, theAnswer], Constraints[ x == 10 * x1 + x2, y == 10 * y1 + y2, y == 10 * x2 + x1, x * x - y * y == m * m, theAnswer == x + y + m ] ]
Update 10/4/2011: reader Bruno Repetto noted the following:
- In the declaration
Decisions[Integers[0, 9], x1, x2, y1, y2],
the range should be Integers[1, 9]. If 0 is included, this declaration alone could allow for one of the numbers x or y to be single-digit. - In the declaration
Decisions[Integers[10, 100], x, y],
the range should be Integers[10, 99], as x and y are restricted to be two-digit integers.
Of course, given the constraints of the problem, the first and second declarations will work together to ensure that the x and y numbers are only two-digit integers, but it doesn’t hurt that the declarations be tighter.