Teaser 3309: Family street
From The Sunday Times, 22nd February 2026 [link] [link]
George and Martha live in Millipede Avenue, a road with 1000 houses numbered from 1 to 1000. Their five daughters and their families will also shortly be buying houses along that road.
“It’s quite simple”, commented Martha. “Andrea rang this afternoon. If you multiply her house number by three and square that product, you get Bertha’s. If you subtract Bertha’s number from 900, you get Caroline’s. If you subtract Andrea’s number from 20 and multiply the result by 36, you get Dorothy’s and finally Elizabeth’s is the average of Caroline’s and Dorothy’s”.
“Priceless!” retorted George. “Four pieces of information and five unknowns. Who do you think I am, Nostradamus?”
“Oh, come, come!” replied Martha. “Even someone of your pathetic mathematical ability can work it out!”
In increasing order, which five houses will their daughters be living in?
[teaser3309]



Jim Randell 7:51 am on 22 February 2026 Permalink |
On the face of it there seem to be multiple solutions.
But Martha thinks George can work it out, using additional information that he knows. (Presumably he knows his own house number, and maybe some of the other numbers on the street that cannot occur in any candidate solution). So any candidate that includes an invalid number can be discarded.
It turns out that there is a number that appears in all the candidate solutions but one. So we can identify the candidate that does not include this number as the likely required answer.
This Python program runs in 69ms. (Internal runtime is 71µs).
from enigma import (irange, sq, div, multiset, printf) # generate candidate solutions def generate(): for A in irange(1, 9): B = sq(3 * A) C = 900 - B D = 36 * (20 - A) E = div(C + D, 2) ns = {A, B, C, D, E} if len(ns) < 5 or None in ns or min(ns) < 1 or max(ns) > 1000: continue printf("[A={A} B={B} C={C} D={D} E={E}]") yield (A, B, C, D, E) # collect candidate solutions ss = list(generate()) # count the numbers that occur in each solution m = multiset.from_seq(*ss) # look for a number that occurs in all but one of the candidates for (k, v) in m.items(): if not (v + 1 == len(ss)): continue # so, if G and M live at house k, there is only one remaining candidate for ns in ss: if k in ns: continue (A, B, C, D, E) = ns printf("k={k} -> A={A} B={B} C={C} D={D} E={E} -> {ns}", ns=sorted(ns))Solution: [To Be Revealed]
LikeLike