Sunday Times Teaser 2885 – Croquet Mallet
by John Owen
Published January 7 2018 [link]
My croquet mallet is less than a metre high and consists of a cylindrical shaft attached to a heavier cuboid head, both of uniform density. Knowing the total weight of the mallet, I wanted to work out the weight of the shaft. I found the point of balance along the shaft and measured the distances from there to each end of the shaft, the smaller of which was less than the height of the head. Each of these three distances was a whole prime number of cm, and taking the three distances together with the height of the mallet, no digit was repeated. I worked out that the weight of the head was a single digit multiple of the weight of the shaft.
What was the height of my mallet?
-
Brian Gladman permalink12345678910111213141516171819202122232425262728293031323334353637383940414243# with shaft weight = s, head weight = h## +-----+# | |# =================| |# a ^ b | l |# +-----+## [s.a / (a + b)].a / 2 = [s.b / (a + b)].b / 2 + h.(b + l / 2)## which simplifies to: h / s = (a - b) / (2.b + l)# list primes below 100 with no repeated digitsprms = { 2, 3, 5, 7 }prms |= {x for x in range(11, 100, 2) if all(x % p for p in prms)}pr = []for p in prms:dgts = divmod(p, 10)if len(dgts) == len(set(dgts)):pr.append(p)# the longer half of the shaftfor a in pr:# the shorter half of the shaftfor b in pr:# the height of the headfor l in pr:if b < l:# the overall mallet heightm = a + b + l# which is less than 100 and has no duplicate digitsdm = divmod(m, 10)if m < 100 and len(dm) == len(set(dm)):# all digits in the four numbers are differentdgts = ''.join(str(x) for x in (a, l, b, m))if len(dgts) == len(set(dgts)):# now check for a head/shaft weight ratio that# is a single digit integermu, r = divmod(a - b, 2 * b + l)if not r and mu < 10:print(f'Mallet height = {m}cm (shaft = {a}cm + {b}cm, head = {l}cm).')