Chapter 253
Can You Roll The Perfect Bowl?
The Riddler for January 31, 2020, inspired by a viral bowls shot. The Express finds the shallowest angle at which a rolling bowl can thread between two others; the Classic maximises the volume of a pyramid built from identical thin triangular tiles.
Riddler Express
Each bowl is a sphere of radius . Your opponent’s two red bowls are separated by a gap of , so their centres are apart. Your green bowl travels in a straight line; let be the angle between that line and the line joining the two red centres. What is the minimum that lets your bowl pass between the reds without touching either?
The Riddler, FiveThirtyEight, January 31, 2020(original post)
Solution
Follow the centre of the green bowl. To clear a red bowl without touching it, the green centre must stay at least from that red centre. So the green centre traces a straight line that must keep distance at least from each of the two red centres and , which are apart.
The shallowest such line just grazes both reds, sitting at distance exactly from and from . By symmetry it passes through the midpoint of , with . Drop the perpendicular from to the line: it has length (the clearance) and meets the line at a right angle, since a sphere’s radius is perpendicular to a tangent at the point of contact. In the right triangle with hypotenuse and the side of length opposite the angle the path makes with , Any larger angle threads the gap with room to spare; any smaller angle drives the green centre within of a red centre, a collision.
The computation
Re-encode the geometry rather than the formula: send the green centre along a line through the midpoint at angle , measure the smallest distance from that line to each red centre, and find the least for which both distances reach the clearance .
import numpy as np
A, B = np.array([-2.5, 0.0]), np.array([2.5, 0.0]) # red centres, 5 apart
def clears(theta_deg):
t = np.radians(theta_deg)
d = np.array([np.cos(t), np.sin(t)]) # path direction at M=origin
dist = lambda P: abs(P[0]*d[1] - P[1]*d[0]) # distance from P to the line
return dist(A) >= 2 and dist(B) >= 2
thetas = np.linspace(0, 90, 900001)
print(min(th for th in thetas if clears(th))) # ~53.13
The smallest passing angle is about , matching .
Riddler Classic
The Magna-Tiles are identical isosceles triangles with one angle and two angles. Twelve of them, with their corners at the centre, lie flat as a regular dodecagon. Using fewer (between three and eleven) of them in the same way builds a pyramid on a regular-polygon base. To maximise the volume enclosed by the pyramid, how many tiles should you use?
The Riddler, FiveThirtyEight, January 31, 2020(original post)
Solution
Put tiles together with their corners meeting at the apex. Their angles total degrees; at this fills and the figure lies flat, and for it folds up into a pyramid whose base is a regular -gon.
Fix the tile. Let its short side (opposite the apex) be and its two equal legs be . By the law of sines, , so , a constant of the tile. The short sides form the base, a regular -gon of side and circumradius The legs are the slant edges from the apex to the base vertices, all of length , so the pyramid’s height is and the volume is As grows the base widens ( up) but the pyramid flattens ( down to at , where ), so the volume peaks at an interior . Evaluating for , the maximum is at (about cubic inches for a -inch short side). For very large pancakes of tiles the best fraction approaches of them, close to .
The computation
Build each pyramid from the tile geometry and read off the maximiser: compute , the height and the volume for every from to .
import math
s = 3.0 # short side (inches)
leg = s * math.sin(math.radians(75)) / math.sin(math.radians(30))
def volume(n):
R = s / (2 * math.sin(math.pi / n))
h = math.sqrt(leg**2 - R**2) # apex height
area = 0.5 * n * R*R * math.sin(2 * math.pi / n)
return area * h / 3
best = max(range(3, 12), key=volume)
print(best, round(volume(best), 1)) # 10 73.1
The volume is largest at tiles (about cubic inches), as boxed.