From The Sunday Times, 24th May 1981 [link]
The five champion athletes competed against one another in their five special events to decide who was the supreme champion (the one with the highest number of points). Three points were awarded for the winner in each event. two points for second place, and one for third.
The Superchamp won more events than anyone else. All scored a different number of points, and all scored in a different number of events.
Ben and Colin together scored twice as many points as Fred. Eddie was the only one to win his own special event, and in it the Superchamp came second. In another event Eddie gained one point less than the hurdler. The hurdler only came third in the hurdles, which was won by Denis, who was last in the long jump but scored in the sprint. Fred won the long jump and was second in the walk, but came nowhere in the hurdles.
Ben scored in the long jump and Colin scored in the sprint. The thousand-metre man was third in two events. The long jumper scored more points than the sprinter.
Who was the [long] jumper, and what was his score?
This puzzle is included in the book The Sunday Times Book of Brainteasers (1994).
[teaser983]
Jim Randell 8:34 am on 30 January 2026 Permalink |
Here is a solution using the [[
SubstitutedExpression]] solver from the enigma.py library.It runs in 92ms. (Internal runtime of the generated code is 14.8ms).
Solution: The total attendance was 489.
The top table seated 57.
And then there were either 12 additional tables, each seating 36; or 36 additional tables, each seating 12.
The total attendance is thus: 57 + 12 × 36 = 489.
LikeLike
ruudvanderham 9:46 am on 30 January 2026 Permalink |
import peek import istr for A, B, C, D, E, F, G, H, I in istr.permutations(range(1, 10)): if A <= 5 and G <= 4 and (A | B) + (C | D) * (E | F) == (G | H | I): peek((A | B), (C | D), (E | F), (G | H | I))LikeLike
GeoffR 5:52 pm on 30 January 2026 Permalink |
from itertools import permutations dgts = set('123456789') for p1 in permutations(dgts, 2): A, B = p1 AB = int(A + B) if AB < 60: q1 = dgts.difference({A, B}) for p2 in permutations(q1): C, D, E, F, G, H, I = p2 CD, EF = int(C + D), int(E + F) GHI = int(G + H + I) if GHI == AB + CD * EF: if GHI < 500: print(f"Total attendance = {GHI}") # Total attendance = 489LikeLike
BRG 9:30 am on 3 February 2026 Permalink |
# 10.A + B + (10.C + D).(10.E + F) == 100.G + 10.H + I < 500 # note: the order of C and E is undetermined (use C < E) from itertools import permutations # start with C and E: 100.C.E < 500 E < 4 // C + 1 for C in range(1, 10): for E in range(C + 1, 4 // C + 1): s8 = set(range(1, 10)) - {C, E} # complete the number of tables (CD) and the number on tables (EF) for D, F in permutations(s8, 2): CD, EF = 10 * C + D, 10 * E + F s6 = s8 - {D, F} # now find the number on the top table (AB < 60) for A, B in permutations(s6, 2): if (AB := 10 * A + B) < 60: # find the attendance (< 500) and ensure correct digit allocations GHI = (AB := 10 * A + B) + CD * EF s_ghi = {int(x) for x in str(GHI)} if GHI < 500 and len(s_ghi) == 3 and s_ghi.issubset(s6 - {A, B}): print(f"({AB = }) + ({CD = }) x ({EF = }) == ({GHI = })")LikeLike