Brain-Teaser 48: Championship chances
From The Sunday Times, 18th February 1962 [link]
Wolfe was playing Lambe in a match (over the best of five sets) for our Lawn Tennis Championship. At the end of the third set Wolfe was leading by two sets to one, the score being 5-7, 8-6, 6-4.
“It is strange”, said Fred, “that though there were at least half a dozen service breaks in the first set, there was only one service break in the next 22 games”.
“It is even more strange”, said David, “that if only Wolfe had lost the very first game (and all other game results had remained unchanged) he would be champion now. As it is he might easily lose”. (In fact Lambe went on to win the championship by three sets to two, though that does not concern us here).
Which of the first 36 games did Wolfe actually win?
Who served in that vital [first] game?
And what would the score have been if Wolfe had lost that first game?
[teaser48]







Jim Randell 10:29 am on 31 October 2026 Permalink |
You need to know a little bit about tennis to solve this puzzle. Specifically:
This Python 3 program considers possible sequences of games with the required number of service breaks, and where changing the outcome of the first game (but none of the others) leads to a match win for W.
It runs in 92ms. (Internal runtime is 12ms).
from enigma import (trim, first, printf) # labels for the players (p0, p1) = players = "WL" # find a sequence of games that gives the required scores def games(x, y, gs=""): if x == y == 0: yield gs else: if x > 0: yield from games(x - 1, y, gs + p0) if y > 0: yield from games(x, y - 1, gs + p1) # play games <gs> until a set is won # return (<score>, <remaining games>) # <remaining games> is None if the set is incomplete def play_set(gs): x = y = 0 for g in gs: if g == p0: x += 1 elif g == p1: y += 1 else: return if abs(x - y) >= 2 and (x >= 6 or y >= 6): # return score, and any unused games from the sequence return ((x, y), trim(gs, head=x + y)) return ((x, y), None) # None = set is incomplete # is the set complete? # i.e. the set is won/lost, and all games are consumed def set_complete(gs): (s, gs) = play_set(gs) return (gs == "") # count the breaks (where the winner is not the server) # i = index of initial server def breaks(gs, i=0): n = 0 for g in gs: n += (g != players[i]) i ^= 1 return n # play a match from games <gs> # return (<scores>, <remaining games>) def play_match(gs): x = y = 0 ss = list() while gs: (s, gs) = play_set(gs) ss.append(s) if gs is not None: (sx, sy) = s if sx > sy: x += 1 if sy > sx: y += 1 if x == 3 or y == 3: break return (ss, gs) # we know W won the first game; so allocate the remaining games in set 1 S1 = list(gs for gs in games(4, 7, "W") if set_complete(gs)) # allocate games for sets 2 and 3 S2 = list(gs for gs in games(8, 6) if set_complete(gs)) S3 = list(gs for gs in games(6, 4) if set_complete(gs)) # consider possible sequence of games for sets 2, 3, 1: # choose the index of service at the start of set 2 for i2 in [0, 1]: # allocate games in set 2 for gs2 in S2: # at most 1 service break in the second set b2 = breaks(gs2, i2) if b2 > 1: continue # allocate the games in set 3 for gs3 in S3: # exactly 1 service break in set 2 and the first 8 games of set 3 i3 = (i2 + len(gs2)) % 2 b3 = breaks(first(gs3, 8), i3) if b2 + b3 != 1: continue # allocate the games in set 1 for gs1 in S1: # there should be at least 6 service breaks in the first set i1 = (i2 - len(gs1)) % 2 b1 = breaks(gs1, i1) if not (b1 >= 6): continue # now consider the current game sequence, but with L winning the first game xs = 'L' + trim(gs1 + gs2 + gs3, head=1) (ss, rs) = play_match(xs) if rs is None: continue # find a match where W wins 3 of the sets if not (sum(x > y for (x, y) in ss) == 3): continue # output solution printf("sets: 1={gs1} 2={gs2} 3={gs3}; start={i}", i=players[i1]) printf("-> W could have won {ss}") printf()Solution: Wolfe won games: 1, 7, 8, 9, 10, 14, 16, 18, 20, 22, 24, 25, 26, 28, 30, 32, 34, 35, 36. Lambe served in the first game. If Wolfe had lost the first game he would have won the match 0-6, 6-4, 6-4, 6-4.
The games won in each set were:
If Wolfe had lost the first game, the remaining games would have played out as follows:
LikeLike