Teaser 2942: What do points make?
From The Sunday Times, 10th February 2019 [link] [link]
In the Premier League table a team’s points are usually roughly equal to their goals scored (Burnley were an interesting exception in 2017-18). That was exactly the case in our football league after the four teams had played each other once, with 3 points for a win and 1 for a draw.
A ended up with the most points, followed by B, C and D in that order. Fifteen goals had been scored in total, and all the games had different scores. The best game finished 5-0, and the game BvD had fewer than three goals.
What were the results of B’s three games (in the order BvA, BvC, BvD)?
[teaser2942]
Jim Randell 11:38 am on 8 February 2019 Permalink |
I think this puzzle could have been worded more clearly.
I took the first part to mean we are looking for situations where each team has exactly the same number of points as the number of goals scored by that team. And that the “best game finished 5-0” means that that game had the most goals scored altogether (i.e. the other games had no more than 4 goals scored in total). I took the fact that all matches had different scores to mean that you couldn’t have (for example) one game with a score of 2-0 and another with a score of 0-2.
This program uses the [[
Football()]] helper class from the enigma.py library. It looks for possible games for a team that can give the same number of points as the number of goals scored by that team, and then chooses outcomes for the four teams that satisfy the remaining conditions of the puzzle. It runs in 340ms.Run: [ @replit ]
from itertools import (product, combinations) from enigma import (defaultdict, Football, ordered, printf) # scoring system football = Football(games='wdl', points=dict(w=3, d=1)) # possible scores (a 5-0 and then no more than 4 goals in any match) scores = dict() scores['w'] = set([(1, 0), (2, 0), (3, 0), (4, 0), (5, 0), (2, 1), (3, 1)]) scores['d'] = set([(0, 0), (1, 1), (2, 2)]) scores['l'] = set((x, y) for (y, x) in scores['w']) # record possible games by points (= goals for) ss = defaultdict(list) # consider outcomes for three matches for team T against X, Y, Z for (TX, TY, TZ) in football.games(repeat=3): # make the table for team T T = football.table([TX, TY, TZ], [0, 0, 0]) # make possible score lines that give "goals for" = "points" for (sTX, sTY, sTZ) in product(scores[TX], scores[TY], scores[TZ]): (fT, aT) = football.goals([sTX, sTY, sTZ], [0, 0, 0]) if not (fT == T.points): continue ss[fT].append((sTX, sTY, sTZ)) # choose possible points (= goals for) for A, B, C, D for (pA, pB, pC, pD) in combinations(sorted(ss.keys(), reverse=1), 4): # but points = goals for, and the total number of goals is 15 if not (pA + pB + pC + pD == 15): continue # choose matches for B for (BA, BC, BD) in ss[pB]: # B vs D has less than 3 goals scored if not (sum(BD) < 3): continue # choose matches for A for (AB, AC, AD) in ss[pA]: if not (AB == BA[::-1]): continue # choose matches for C for (CA, CB, CD) in ss[pC]: if not (CA == AC[::-1] and CB == BC[::-1]): continue # check matches for D if not ((AD[::-1], BD[::-1], CD[::-1]) in ss[pD]): continue # all games have different scores s = set(ordered(*x) for x in (AB, AC, AD, BC, BD, CD)) if not (len(s) == 6): continue # there is a 5-0 game if not ((0, 5) in s): continue printf("AB={AB} AC={AC} AD={AD} BC={BC} BD={BD} CD={CD}, A={pA} B={pB} C={pC} D={pD}")Solution: The scores in B’s games are: B vs A = 1-2; B vs C = 2-2; B vs D = 1-0.
It turns out that the fact that there is a 5-0 game means that there are only 10 goals to distribute between the remaining 5 matches, and there are no further solutions if games with more than 4 goals scored are considered, so it is enough to know that there is a 5-0 score.
If we allow “mirror” scores (e.g. one game with a score of 2-0 and another with a score of 0-2), then there are no further solutions either. (Although if we allow repeated scores then there are additional solutions).
If we relax the conditions that the number of points is exactly the same as the number of goals scored then there are multiple solutions, even if they must be within 1 of each other.
LikeLike