Teaser 2435: [Swimming across the river]
From The Sunday Times, 24th May 2009 [link]
Philip, the fastest swimmer, was on one bank of the River Times; Beth and Sam were directly opposite him on the other bank. Simultaneously, each of them started to swim at their own steady speed to the opposite bank, then, without pause, back to where they had started. On each stretch, Philip crossed each of the others once, and he noted the distances to the nearer bank on each occasion. These four distances were all different whole numbers of metres between 10 and 15, inclusive.
How wide was the river?
This puzzle was originally published with no title.
[teaser2435]
Jim Randell 8:16 am on 29 May 2026 Permalink |
Consider Philip (starting from the far bank) and one of the other swimmers (starting from the near bank). They set off at the same time, and as Philip is the stronger swimmer, he encounters the other swimmer a distance a from the near bank. They have been swimming for the same amount of time, so the ratio of the swimming speeds is:
As the stronger swimmer, Philip makes the turn first, and then passes the other swimmer for a second time at a distance b from the far bank (b < a). This time we get:
Equating these ratios gives:
So, we can choose a pair of values (a, b) (given 10 ≤ a < b ≤ 15) and calculate the corresponding value x (which is the width of the river).
And we then need to find two disjoint pairs that give the same value for the width of the river.
This Python program runs in 68ms. (Internal runtime is 81µs).
from enigma import (defaultdict, irange, subsets, union, printf) # record pairs by calculated width d = defaultdict(list) # consider possible pairs of distances for (b, a) in subsets(irange(10, 15), size=2): # calculate the width of the river = x # (x - a)(x + b) = (2x - b)a # => x = 3.a - b x = 3*a - b # check b < x / 2 if x < 2 * b: continue d[x].append((a, b)) printf("[({b}, {a}) -> x={x}]") # look for 2-different, disjoint pairs for (x, ps) in d.items(): for (p1, p2) in subsets(ps, size=2): if len(set(p1 + p2)) != 4: continue # output solution printf("x={x} -> p1={p1} p2={p2}")Solution: The river is 32 m wide.
The pairs of distances are (14, 10) and (15, 13).
And the ratios of the speeds are 15/17 (≈ 0.882) and 7/9 (≈ 0.778).
Other widths that give multiple pairs are:
But these cannot give two disjoint pairs.
LikeLike