# Gecode/R 0.9.0

**URL:** <https://www.ruby-forum.com/t/gecode-r-0-9-0/146254>\
**Category:** Ruby\
**Created:** [August 19, 2008, 2:29pm UTC](https://www.ruby-forum.com/t/gecode-r-0-9-0/146254 "2008-08-19T14:29:19Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![andreas\_l](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/7bcc69/32.png) [@andreas\_l](https://www.ruby-forum.com/u/andreas_l)\
**Post date:** [August 19, 2008, 2:29pm UTC](https://www.ruby-forum.com/t/gecode-r-0-9-0/146254/1 "2008-08-19T14:29:19Z")

</div>

Gecode/R version 0.9.0 has been released.

[http://gecoder.rubyforge.org/](http://gecoder.rubyforge.org/)

This release contains all functionality planned for 1.0.0.

== What is Gecode/R?

Gecode/R is a Ruby interface to the Gecode constraint programming  
library[1]. Gecode/R is intended for people with no previous experience  
of constraint programming, aiming to be easy to pick up and use.

Constraint programming means that you describe the problem to the  
solver, using variables and constraints, and then let the solver find  
the solution. It is useful for solving problems where you have to do a  
search through various assignments to find the best solution (or just  
any solution). This includes problems such as scheduling and sudoku.

== Installation

Install Gecode and Gecode/R:

gem install gecoder-with-gecode

== Example

The send+more=money problem, covered in a Ruby Q.[3], is one of many  
examples[2].

```
send

```

- more

* * *

money

The problem is to assign digits to each letter so that the above  
equation holds when the letter are substituted with the assigned digits.  
No two letters are assigned the same digit and the first letter of a  
word is not assigned 0 (so that no number starts with 0). Using Gecode/R  
to solve the problem is simple and much faster than a naive solution.

require ‘rubygems’  
require ‘gecoder’

solution = Gecode.solve do  
# A helper to make the linear equation a bit tidier. Takes a number  
# of variables and computes the linear combination as if the  
# variable were digits in a base 10 number. E.g. x,y,z becomes  
# 100_x + 10_y + z .  
def equation\_row(_variables)  
variables.inject{ |result, variable| variable + result_10 }  
end

```
# Set up the variables.
# Let "letters" be an array of 8 integer variables with domain 0..9.
# The elements represents the letters s, e, n, d, m, o, r and y.
letters_is_an int_var_array(8, 0..9)
s,e,n,d,m,o,r,y = letters

# Set up the constraints.
# The equation must hold.
(equation_row(s, e, n, d) + equation_row(m, o, r, e)).must ==
  equation_row(m, o, n, e, y)

# The initial letters may not be 0.
s.must_not == 0
m.must_not == 0

# All letters must be assigned different digits.
letters.must_be.distinct

# Tell Gecode what variables we want to know the values of.
branch_on letters, :variable => :smallest_size, :value => :min

```

end

puts ‘s e n d m o r y’  
puts solution.letters.values.join(’ ')

Output:

s e n d m o r y  
9 5 6 7 1 0 8 2

== Future plan

The current plan is to get ready for a 1.0.0 release by focusing on the  
website documentation and checking for performance problems (cases when  
Gecode/R does a poor translation of constraints to Gecode). Feedback on  
how the website documentation could be improved and/or reorganized is  
valued highly, especially if it comes from someone who is new to  
constraint programming.

This is also the last chance to make backwards-compatibility breaking  
changes before putting stakes in the ground. If you have any such  
suggestions then this would be the time to present them.

== Changes

See [http://gecoder.rubyforge.org/details/changes.html](http://gecoder.rubyforge.org/details/changes.html) for the list of  
changes.

[1] [http://www.gecode.org/](http://www.gecode.org/)  
[2] [http://gecoder.rubyforge.org/examples.html](http://gecoder.rubyforge.org/examples.html)  
[3] [Ruby Quiz - Verbal Arithmetic (#128)](http://rubyquiz.com/quiz128.html)

---

<div class="post-metadata">

**Author:** ![andreas\_l](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/7bcc69/32.png) [@andreas\_l](https://www.ruby-forum.com/u/andreas_l)\
**Post date:** [August 19, 2008, 4:13pm UTC](https://www.ruby-forum.com/t/gecode-r-0-9-0/146254/2 "2008-08-19T16:13:26Z")

</div>

Andreas L. wrote:

> Gecode/R version 0.9.0 has been released.
> 
> [http://gecoder.rubyforge.org/](http://gecoder.rubyforge.org/)
> 
> This release contains all functionality planned for 1.0.0.

Con-gra-tu-la-tions Andreas, that’s a big accomplishment! Thanks for  
sharing your work.

Greets!

P.S.: I had to put Con-gra-tu-la-tions because otherwise ruby-forum  
treats my post as spam… weird 🙂

> **[Old Emmanuel Oga's Weblog (new one is at www.emmanueloga.com)](https://emmanueloga.wordpress.com/)**
>
> the way that denies by denying
