Teaser 1848: Double celebration
From The Sunday Times, 15th February 1998 [link]
It was quite a year. I’d already had my 60th birthday, and my wife Margaret was due to have hers later in the year. The following year was our 10th wedding anniversary. But all that is beside the point … almost.
By her first marriage, Margaret had two daughters. By an amazing coincidence, Helen was born on Margaret’s birthday, and then, two years later, Joanna was born on Margaret’s and Helen’s birthday. Furthermore, Margaret and Helen were both born on the same day of the week… but if I had told you how old Margaret was when Helen was born you could have worked that out for yourself.
Now, the question is…
What was the double celebration that was due to take place later in the year?
This puzzle was the first to use the name Teaser (which has continued up to the present). Prior to this they were named Brainteaser (1982 – 1998) (and before that Brain teaser (1981 – 1982) and Brain-Teaser (1961 – 1981)).
[teaser1848]
Jim Randell 10:10 am on 20 December 2022 Permalink |
Originally I considered that the setter (recounting the story) and his wife must be born sometime between 1875 and 1937. But if we consider the full range the puzzle becomes unsolvable. So instead I started from 1901.
Since the only possible multiple celebration we know about is Margaret’s 60th birthday with one (or more) of the daughters, I am assuming we need to work out possible ages for the daughters.
Instead of testing every day in every year I choose two representative dates, one before any potential leap day (I chose 1st January) and one after any potential leap day (I chose 1st March).
This Python program runs in 57ms. (Internal runtime is 983µs).
Run: [ @replit ]
from datetime import date from enigma import (cproduct, irange, diff, printf) # record ages that have the same day of the week, and those that do not same_dow = set() diff_dow = set() # consider birth dates for M for (y, m) in cproduct([irange(1901, 1937), (1, 3)]): M = date(y, m, 1) M_dow = M.isoweekday() # consider M's age at the time of H's birth for d in irange(18, 51): H = date(y + d, m, 1) if H is None: continue if H.isoweekday() == M_dow: same_dow.add(d) else: diff_dow.add(d) # look for ages that always give the same day of the week for d in diff(same_dow, diff_dow): H = 60 - d J = H - 2 printf("d={d}: M=60 -> H={H} J={J}")Solution: The double celebration was Margaret’s 60th birthday and Joanna’s 30th birthday.
The only possible age difference that guarantees the mother and child are born on the same day is 28 years (providing we don’t span 1900, which was not a leap year).
So Helen was born on Margaret’s 28th birthday, and Joanna was born 2 years later on Margaret’s 30th birthday.
Hence when Margaret is 60, Helen will be 32 and Joanna will be 30.
LikeLike