From The Sunday Times, 2nd January 1977
There was a large table set out under a tree in front of the house, and the March Hare and the Hatter were having tea at it; a Dormouse was sitting between them.
“Why are there so many tea things put out here?” asked Alice.
“Because it’s always tea-time” said the Hatter with a sigh, “and we’ve no time to wash the things between whiles”.
“Then you keep moving round, I suppose?” said Alice.
“Exactly so” said the Hatter. “When the things are used up, each of us moves a different number of spaces, clockwise, although each keeps his own number for all the moves”.
“No one moves more than half-way round, of course, and no one occupies a place that has already been used. On each occasion, the March Hare moves twice as many places as the Dormouse and myself put together”.
“Unfortunately”, he added, “when we make the next move, we’ll all be back where we started, having used up every place”.
What is the minimum possible total number of places at the table?
This puzzle was included in the book The Sunday Times Book of Brain-Teasers: Book 2 (1981, edited by Victor Bryant and Ronald Postill).
This puzzle is missing from The Sunday Times digital archive, so the puzzle text is taken from the book.
[teaser806]
Jim Randell 4:37 pm on 28 August 2026 Permalink |
The following Python program finds candidate 3-digit lucky numbers, and groups them by age. It then looks for ages with a unique lucky number, and examines the neighbourhood of these to find viable solutions.
It runs in 75ms. (Internal runtime is 731µs).
from enigma import (irange, dsum, group, item, printf) # generate lucky numbers def generate(): # consider 3-digit numbers for n in irange(100, 999): # that are multiples of their digit sum d = dsum(n) if n % d == 0: yield (n, d) # collect lucky numbers by digit sum g = group(generate(), by=item(1), f=item(0)) # check for 3 ages; k is unique, one of x, y has no values; the other has many def check(k, x, y): (ks, xs, ys) = (g.get(z, []) for z in (k, x, y)) if len(ks) != 1: return if len(xs) == 0 and len(ys) > 1: printf("one = {k} {ks}; none = {x} {xs}; many = {y} {ys}") if len(ys) == 0 and len(xs) > 1: printf("one = {k} {ks}; none = {y} {ys}; many = {x} {xs}") # look for unique lucky numbers for k in sorted(g.keys()): # and check the neighbours check(k, k + 1, k + 2) check(k, k - 1, k + 1) check(k, k - 2, k - 1)There are three possible sets of ages:
Presumably we are to discard the first of these sets as the girls are too young to be interested in lucky numbers (or at least some of them are). (But you could argue that “100” is an acceptable answer to the puzzle).
And so we are left with the final two sets, and in either case the unique lucky number is the same.
Solution: The unique lucky number is 874.
LikeLike