From The Sunday Times, 17th August 1980 [link]
There are three teams In the Midchester football league: Albion, United and Victoria. During the season they play each other twice; once at home and once away.
A team gets two points for a win and one point tor a draw. After each match the local paper publishes the current league table. In this table the teams are listed according to points and if two or more teams have equal points then they are listed according to goal difference, (i.e. “goals for” minus “goals against”). If two or more teams have equal points and equal goal difference then they are listed alphabetically.
At the end of last season the sports editor published the results of all the matches:
Albion 4 – United 0
Albion 0 – Victoria 0
United 0 – Albion 1
United 2 – Victoria 0
Victoria 3 – Albion 0
Victoria 1 – United 2
He also said that each of the six league tables published during the season had put the teams in a different order. Thus each of the six possible orders of the teams (AUV, AVU, UAV, UVA, VAU, VUA) had occurred in one of the six league tables. Finally, he said that the third match of the season had been the draw, A vs. V.
List the six matches in the order in which they were played during the season.
This puzzle is included in the book The Sunday Times Book of Brainteasers (1994).
[teaser943]
Jim Randell 8:15 am on 11 August 2026 Permalink |
Here is a solution using the [[
SubstitutedExpression.split_sum]] solver from the enigma.py library.We solve the alphametic expression:
where each letter stands for a different digit, except X is the same as one of D, M, N, R, S, T.
We then determine which of the consonants X is the same as and output the solution(s).
It runs in 68ms. (Internal runtime is 5.4ms).
from enigma import (SubstitutedExpression, peek, printf) # the alphametic sum to solve expr = "SUNDX + TIMES = TEASER" p = SubstitutedExpression.split_sum( expr, # symbols other than X are distinct distinct="ADEIMNRSTU", # X is the same as one of the other consonants extra=["X in {D, M, N, R, S, T}"], ) for s in p.solve(verbose=0): X = s['X'] k = peek(k for k in "DMNRST" if s[k] == X) printf("{s}; X={k}", s=p.substitute(s, expr))Solution: The consonant replaced by the * is S.
The four possible solutions to the sum SUNDS + TIMES = TEASER are:
U and I are {5, 7} (in some order), and N and M are {3, 4} (in some order). So UN + IM = 127.
LikeLike
Ruud 10:54 am on 11 August 2026 Permalink |
import istr for t, i, m, e, s, a, r in istr.permutations(range(10), 7): if len(sund_ := istr(":=teaser") - istr(":=times")) == 5: sund_.decompose("SundX") if t and s == S and istr("=timesarund").all_distinct() and X in (t, m, s, r, n, d): for letter in "tmsrnd": if istr(f"={letter}") == X: print(f"*={letter.upper()} {sund_} + {times} = {teaser}")LikeLike
Frits 7:03 pm on 11 August 2026 Permalink |
Optimizing code lead to a manual solution.
''' SUNDX TIMES ----- + TEASER ''' T = 1 # obvious E = 0 # as carry + S + T >= 10 and T = 1 D = 9 # if X + S < 10 then D would have to be 0 as well S = 8 # S can be 8 or 9 (carry + S + T >= 10) but D is already 9 # 1 + M + N = S or M + N = 7 # U + I + A must be even as A = U + I, M + N = 7 so T + E + S + R + D # must be even as well (sum symbols = 45) meaning R has to be even # --> X has to be even as well, now we know value 7 must be in {U, I, A} # U + I >= 10 (as S = 8 and a carry is needed) # if sorted(U, I, A) = [x, y, 7] then y + 7 = 10 + x or y - x = 3 and # y >= 5 as x >= 2 so [x, y, 7] is [3, 6, 7] or [2, 5, 7] # that means R can only be resp. 45 - 18 - 7 - 16 and 45 - 18 - 7 - 14 or # resp. 4 or 6. # if R = 4 (and X is 6) then value 6 is not used by symbols S, T, D, E and R # so consonants M or N must have value 6. This is not possible as M + N = 7 # and T = 1. # What remains is R = 6 (and X is 8) so {U, I, A, M, N} = {2, 3, 4, 5, 7} # a valid solution is {M, N} = {3, 4}, A = 2 and {U, I} = {5, 7} # # answer: consonant SLikeLike