From The Sunday Times, 1st October 1978 [link]

Margaret was demonstrating the use of a pocket calculator to her grandfather. (Keyboard shown above). It was of the type having algebraic logic, which does continuous mixed calculations (e.g. 5 + 2 × 3 = 21). She also demonstrated that keying two consecutive operations results in the second taking preference (e.g. 5 +× 2 = 10).
Margaret asked grandfather to calculate 80 × 5 + 40 − 10; but unfortunately grandfather’s hands were a little shaky and he was prone to strike keys horizontally oг vertically adjacent to the correct one.
Having entered the sum grandfather was about to press the = key (fortunately he hadn’t pressed it before) when Margaret stopped him.
“You have made just two errors so far, and they were consecutive”, she said, “but don’t worry, if you divide by your age on your next birthday, then press the = key, you will get the correct answer to the calculation”.
Grandfather completed the calculation and correctly pressed the = key.
“Wrong again”, said Margaret, “interesting answer though — if you deduct grandmother’s age, and take the cube root of the remainder, you will get the sum of your age, and mine, on our last birthdays”.
How old are Margaret, grandmother and grandfather?
Another early calculator-based puzzle.
This puzzle is included in the book The Sunday Times Book of Brain-Teasers: Book 2 (1981). The puzzle text above is taken from the book.
[teaser895]
Jim Randell 4:31 pm on 25 September 2026 Permalink |
Here is a solution using the rectpack.py library from the enigma-plus repository.
It runs in 81ms. (Internal runtime is 498µs).
from enigma import (irange, inf, divisors_pairs, printf) import rectpack # solve the puzzle for a collection of tiles def solve(tiles): # total area of the tiles A = sum(x * y for (x, y) in tiles) # consider possible total areas for T in irange(A, inf): sol = 0 for (x, y) in divisors_pairs(T): # possible sizes of the modern tile xss = list([]) xt = T - A if xt > 0: for (xx, xy) in divisors_pairs(xt): xss.append([(xx, xy)]) # now consider possible antique + modern tiles for xs in xss: # can we pack them into the required rectangle? for ps in rectpack.pack(y, x, tiles + xs): printf("[{x} * {y} = {T}; additional tile = {xs}]") rectpack.output_grid(y, x, ps, start="", end="--") sol += 1 break if sol > 0: printf("[{sol} solutions]") return # solve the puzzle for the given tiles solve([(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7)])Solution: The area of the room was 114 sq m.
(The published solution printed this as: “114 square miles”).
The room is 6 m × 19 m, and here is one possible layout:
The additional modern tile is one of the 1×2 tiles.
LikeLike