Teaser 3347: Croquet league
From The Sunday Times, 15th November 2026 [link] [link]
In our croquet league, everyone plays against everyone else exactly once during the season. At the end of the season, the top four players, ranked by number of wins (draws are not possible), progress to the playoff stage. If players are tied on number of wins, then individual game scores are used to determine the ranking. The minimum number of wins needed to guarantee progression (irrespective of individual game scores) is four times the maximum number of wins with which it is impossible to progress (again irrespective of game scores).
How many players are in the league?
[teaser3347]





Jim Randell 7:17 am on 15 November 2026 Permalink |
We can use the [[
landau()]] function in the enigma.py library to check if a score sequence is viable. (Originally implemented for Teaser 3324).This Python program considers increasing numbers of players/teams (supposing there are at least 5 teams), and collects the top 4 scores (for the teams who progress) and the remaining scores (for the teams that don’t), and then calculates:
Fortunately the solution is found for a relatively small number of teams, so the program runs in a reasonable time.
This Python program runs in 108ms. (Internal runtime is 27ms).
from enigma import (irange, inf, C, decompose, landau, printf) # check a league with <n> teams def check(n): # record: # A = numbers of wins for the teams that progress (top 4) # B = numbers of wins for teams that fail to progress (rest) (A, B) = (set(), set()) # the total number of wins is ... t = C(n, 2) # find possible score sequences for ss in decompose(t, n, increasing=1, sep=0, min_v=0, max_v=n - 1): if not landau(n, ss): continue A.update(ss[-4:]) B.update(ss[:-4]) return ( # the minimum number wins needed to guarantee progression min(A.difference(B)), # the maximum number of wins with which it is impossible to progress max(B.difference(A)), ) # consider increasing numbers of teams (at least 5) for n in irange(5, inf): (A, B) = check(n) printf("{n} teams [A = {A}, B = {B}]") if A == 4 * B: breakSolution: [To Be Revealed]
In general we find:
LikeLike