# Constraint Programming in Ruby

Gecode/R is a Ruby interface to Gecode, an open source library for constraint programming. The interface is intended for people with no previous experience of constraint programming, aiming to be easy to pick up and use in practice.

## Describe Your Problem

Constraint programming is declarative. Describe your problem to the solver and then let it find solutions for you.

### Example

Solve the equation system `x + y = z`, `x = y - 3`, `0 <= x,y,z <= 9`.

```solution = Gecode.solve do
# Set up the variables, three integers with domain 0..9.
variables_is_an int_var_array(3, 0..9)
x,y,z = variables

# Describe the problem (in this case the equations).
(x + y).must == z
x.must == y - 3

# Tell it what the variables of the problem are.
branch_on variables
end

puts 'x y z'
puts solution.variables.values.join(' ')
```

Output:

```x y z
0 3 3
```

Constraint programming is an easy way to solve problems that are simpler to describe than to solve. Sudoku is one of many examples.