Teaser 3336: Gardener’s canes
From The Sunday Times, 30th August 2026 [link] [link]
A gardener had two pairs of bamboo canes, one pair 70 inches long and one pair 94 inches long. Well, he had until his wife ran over them in her car and broke both of the 94-inch canes into 2 pieces. Remarkably all of the broken pieces ended up a whole number of inches long. Even more remarkably when he connected the longest and shortest pieces to one of the 70-inch canes and the two medium pieces to the other 70-inch cane, he was able to make two triangles with enclosed areas a whole number of square inches. He worked out that the enclosed areas differed by exactly 504 square inches.
What was the length of the shortest broken piece?
[teaser3336]





Jim Randell 7:26 am on 30 August 2026 Permalink |
Using some useful routines from the enigma.py library, I was able to write a short program for this puzzle.
Unfortunately I was not able to find a solution using the values given in the puzzle text.
However, if I make the long rods 98 inches long (instead of 94 inches long), then I do find a viable solution.
The longest and shortest pieces must come from the same cane, and likewise the remaining pieces. This Python program considers what integer sided triangles could be made from a broken rod of length L, and a complete rod of length S, that have an integer area. And then looks for two such triangles that differ by the required amount D.
It runs in 80ms. (Internal runtime is 232µs).
from enigma import (decompose, triangle_iarea, subsets, printf) # lengths of the long rod, short rod, required difference in area #(S, L, D) = (70, 94, 504) # published formulation (S, L, D) = (70, 98, 504) # alternative formulation # record the lengths of the broken rod, and the triangle area r = dict() # break a long rod in to two integer parts for (a, b) in decompose(L, 2, increasing=1, sep=0, min_v=1): # make a triangle using these pieces and a short rod A = triangle_iarea(a, b, S) if not A: continue # record possible triangles r[(a, b)] = A printf("[tri({a}, {b}, {S}) -> area {A}]") # now look for 2 breaks with the required difference in area for ((k1, A1), (k2, A2)) in subsets(r.items(), size=2): if not (abs(A1 - A2) == D): continue # output solution bits = sorted(k1 + k2) printf("bits = {bits} [{L} = {k1} -> {A1}; {L} = {k2} -> {A2}]")Solution: [To Be Revealed]
LikeLike