Brain-Teaser 968: Friends and neighbours
From The Sunday Times, 8th February 1981 [link]
My old school friends, Rose and May, both live on the sunny side of Woodland Grove in a row of five houses. I know that May lives with her parents, Mr and Mrs Joiner, in the house called “The Oaks”, but Rose had never told me her surname nor the name of her house.
I wanted to send both of them invitations to my 21st birthday party, so I asked the local paper boy if he knew which house Rose lived in or the name of her parents. He was not sure, but came up with the following facts:
1. Each of the five houses is occupied by a married couple with one unmarried daughter.
2. The last of the five houses on the right is called “Fir Trees”.
3. The Turner family lives in the house immediately to the right of the house called “The Willows”.
4. The Carpenters live next door but one to the house called “Silver Birches”.
5. The second house from the left is the home of the Sawyer family.
6. Cherry is the daughter of the couple in the middle house.
7. Ivy lives with her parents at The Elms”.
8. Hazel is the daughter of Mr and Mrs Woodman.From this information I was able to deduce Rose’s surname and the name of her house.
What are they?
This puzzle is included in the book The Sunday Times Book of Brainteasers (1994).
[teaser968]


Jim Randell 7:34 am on 24 March 2026 Permalink |
Here is a solution using the [[
SubstitutedExpression]] solver from the enigma.py library.It runs in 80ms. (Internal runtime of the generated code is 85µs).
And here is a Python wrapper to prettify the output:
from enigma import (SubstitutedExpression, irange, printf) # load the puzzle p = SubstitutedExpression.from_file(["{dir}/teaser968.run"]) # link symbols to values s2h = dict(A="The Elms", B="Fir Trees", C="The Oaks", D="Silver Birches", E="The Willows") s2f = dict(F="Carpenter", G="Joiner", H="Sawyer", I="Turner", J="Woodman") s2n = dict(K="Cherry", L="Hazel", M="Ivy", N="May", P="Rose") # solve the puzzle for s in p.solve(verbose=0): # fill out the slots (house, family, name) = (dict((s[k], v) for (k, v) in m.items()) for m in (s2h, s2f, s2n)) # output the solution for i in irange(1, 5): (h, f, n) = (m.get(i, '???') for m in (house, family, name)) printf("{i}: {n} {f}, \"{h}\"") printf()Solution: Rose is Rose Sawyer, she lives at “The Willows”.
The complete solution is:
LikeLike