Teaser 2334: Tetrahedral cubes
From The Sunday Times, 17th June 2007 [link]
I have constructed a tetrahedron (a solid with four triangular faces and six edges). On measuring those six edges, I find that their lengths, in centimetres, form six consecutive perfect cubes. Furthermore, if you managed to construct a tetrahedron with the same properties, the longest side of yours could not be shorter than any side of mine.
How long is the longest side of my tetrahedron?
[teaser2334]





Jim Randell 10:17 am on 8 August 2025 Permalink |
So we want to find the smallest set of consecutive cubes that allows us to construct a tetrahedron.
This is a problem that we have encountered before, see Enigma 1152 (also set by Adrian Somerfield, 6 years before this puzzle).
from enigma import (Enumerator, powers, inf, tuples, ipartitions, sq, is_triangle, printf) # compute the Cayley-Menger determinant (= 288 vol^2) def CMdet(x, y, z, X, Y, Z): (x2, X2, y2, Y2, z2, Z2) = map(sq, (x, X, y, Y, z, Z)) # calculate: Matrix([[0, 1, 1, 1, 1], [1, 0, x2, y2, Z2], [1, x2, 0, z2, Y2], [1, y2, z2, 0, X2], [1, Z2, Y2, X2, 0]]).det() return ( 2 * x2 * X2 * (y2 + Y2 + z2 + Z2 - x2 - X2) + 2 * y2 * Y2 * (x2 + X2 + z2 + Z2 - y2 - Y2) + 2 * z2 * Z2 * (x2 + X2 + y2 + Y2 - z2 - Z2) - (x2 - X2) * (y2 - Y2) * (z2 - Z2) - (x2 + X2) * (y2 + Y2) * (z2 + Z2) ) # check length form a tetrahedron: base = (x, y, z), opposite edges = (X, Y, Z) # return 288 V^2 if the tetrahedron is viable, else None def is_tetra(x, y, z, X, Y, Z): # check each face is a triangle if not all(is_triangle(*s) for s in [(x, y, z), (x, Y, Z), (X, y, Z), (X, Y, z)]): return # does it have a positive volume? d = 288 V^2 d = CMdet(x, y, z, X, Y, Z) if d < 0: return return d # generate tetrahedra for sides in cs def tetras(cs): # group the sides into pairs for ((x, X), (y, Y), (z, Z)) in ipartitions(cs, 2): # do they form a tetrahedron? if is_tetra(x, y, z, X, Y, Z): yield ((x, X), (y, Y), (z, Z)) # generate consecutive cubes for cs in tuples(powers(1, inf, 3), 6): ss = Enumerator(tetras(cs)) for ((x, X), (y, Y), (z, Z)) in ss: # output solution printf("({x}, {X}) ({y}, {Y}) ({z}, {Z}) -> max = {m}", m=cs[-1]) if ss.count > 0: break # stop at smallest solutionSolution: The longest side is 2197 cm.
So it is quite a large tetrahedron.
LikeLike