**From New Scientist #1033, 6th January 1977** [link]

An air of rare humility pervades the Common Room at St. Aletheia’s tonight. The seven inmates overdid the post-prandial gin and rashly confessed their sins to one another. Each owned to a different pair of the deadly ones and each sin turned out to have claimed a different pair of victims.

Constance, Emily and Flavia have no sin in common to any two of them. Beatrice, Deborah, Emily and Gertrude confessed to all seven between them. Alice and Gertrude admitted to sloth; Deborah and Emily to lust. Alice is not given to pride nor Beatrice to avarice nor Flavia to either pride or intemperance. Constance, who owned to anger, has a sin in common with Deborah, who did not.

Which pair has fallen prey to intemperance and which pair to envy?

[tantalizer482]

### Like this:

Like Loading...

To save having to decide which constraints to consider first, I expressed the puzzle as a set of MiniZinc constraints and let the solver do the hard work.

Here’s the MiniZinc model.

On its own the model executes in 84ms (using the

mzn-gecode -asolver), but the output of the decision table needs to be tidied up to make sense of it. I used theminizinc.pywrapper to let me format the solution using Python.This Python program executes in 152ms.

Solution:Alice and Emily admitted to intemperance. Beatrice and Flavia admitted to envy.The full results are:

I found the constraints that each person has a

differentpair of sins (and each sin adifferentpair of people) the hardest to express. I expressed them as “different people cannot have the same values for the sins” (i.e. for each pair of people there must be a sin that one of them admits to and the other doesn’t), and the second constraint is handled similarly. Disappointingly we don’t get additional solutions if these constraints are not included in the model, so they are superfluous.