Chapter 66
Will Riddler Nation Win Gold In Archery?
Riddler Express
Each Riddler archer’s arrow scores , or , each with probability ; each Conundrum archer scores exactly . Three arrows per team per round, higher total wins, ties replay another three-arrow round until broken. Which team is favoured, and with what probability?
Solution
Conundrum scores every round, dead certain. Riddler’s three arrows give a random total, so in one round Riddler wins, ties, or loses against the fixed . Let be Riddler’s overall chance of winning. A round either settles it in Riddler’s favour (probability ) or ties (probability ), and after a tie the situation resets, so Among the equally likely arrow triples, the totals beat in cases, equal in (the rearrangements of ), and fall short in . So , , and Riddler Nation is favoured: its risky archers clear slightly more often than they miss it.
The computation
Enumerate all arrow triples, count wins and ties against , and apply the replay formula exactly.
from fractions import Fraction as F
from itertools import product
totals = [sum(t) for t in product([10, 9, 5], repeat=3)]
win = sum(s > 24 for s in totals); draw = sum(s == 24 for s in totals)
pwf, pd = F(win, 27), F(draw, 27)
print(pwf / (1 - pd)) # 11/21 = 0.5238...
Riddler Classic
A chain has links of lengths (), laid in a straight line with the longest link pinned. The chain bends so that every consecutive pair of links makes the same angle . As ranges over all values, what shape does the tail (the far, infinitesimal end) trace?
Solution
Treat the plane as the complex numbers. The first link points along the real axis; each next link is shorter by a factor and turned by a further angle , so the -th link is . The tail of the infinite chain sits at the sum of all links: As runs around the circle, traces the unit circle, and is a Möbius transformation, which sends circles to circles. So the tail traces a circle. Its two extreme points come from and , namely and , which are ends of a diameter; their midpoint and half-distance give
The computation
Sweep , plot the tail position , and check every point lies on the predicted circle (residual near zero).
import numpy as np
f = 0.5
th = np.linspace(0, 2 * np.pi, 100_000, endpoint=False)
z = 1 / (1 - f * np.exp(1j * th))
c, r = 1 / (1 - f**2), f / (1 - f**2)
residual = np.abs((z.real - c)**2 + z.imag**2 - r**2).max()
print(c, r, residual) # 1.333, 0.667, ~1e-15