Teaser 3181: “No slack, Alice!” says Grace
From The Sunday Times, 10th September 2023 [link] [link]
Grace mimicked Mr Dodgson: “Take two different positive odd numbers with no shared prime factor. Multiply the larger by their sum, giving the perimeter of a distinct right-angled triangle with whole-number sides. Only such values and their multiples work”.
Alice created a loop from part of a 1m thread. She was able to pull it tightly on a pinboard into a right-angled triangle with whole-number cm sides in two ways (with different-shaped triangles).
Alice then pulled the same loop tight over the thin polar spike of the classroom globe, down two meridians and along the equator. Thinking “Logic’s dead!”, she saw 90° equatorial angles and a non-zero polar angle, which obviously didn’t add to 180°.
Grace calculated the polar angle to the nearest degree. Curiously, transposing its two digits gave the globe’s whole-number centimetre radius.
Find this radius.
[teaser3181]










Jim Randell 5:09 pm on 8 September 2023 Permalink |
If the string has length p and angle (in radians) made by the loop at the pole is 𝛂 on a globe of radius r, then we have:
This Python program finds perimeters (that are whole numbers of centimetres, less than 100), such that (at least) two dissimilar Pythagorean triangles can be constructed, and then looks for a corresponding radius for a globe that fits the remaining conditions.
It runs in 58ms. (Internal runtime is 296µs).
from math import (pi, degrees) from enigma import (pythagorean_triples, group, item, fdiv, irange, intr, nrev, printf) # generate possible pythagorean triangles, return (<perimeter>, <triangles>) def generate(M): for ss in pythagorean_triples(M // 2): p = sum(ss) if p < M: yield (p, ss) # group pythagorean triangles by their perimeter g = group(generate(100), by=item(0), f=item(1)) # consider possible perimeters for (p, ts) in g.items(): if len(ts) < 2: continue printf("[p={p} -> {ts}]") # consider possible globe radii for r in irange(10, 99): # calculate the polar angle (to the nearest degree) a = intr(degrees(fdiv(p, r) - pi)) if a > 99: continue if a < 10: break if a == nrev(r): printf("-> r={r} a={a}")Solution: The globe has a radius of 19 cm.
The loop used 90 cm of thread.
Which allows (planar) right-angled triangles with sides of (15, 36, 39) cm and (9, 40, 41) cm to be formed.
It can also be used on a 19cm radius globe to form a triangle on the globe with approx. 30.31 cm running along the equator and 29.85 cm running up meridians to the north pole, meeting at an angle of approx. 91.4°. So the three sides are each close to 30 cm, and the angles are all about 90°.
LikeLike