Skip to content
Vamshi Jandhyala

Books · The Riddler

Chapter 50

Can You Skillfully Ski The Slopes?

You and an evenly matched opponent each ski two runs; the lower total time wins gold. All four run times are independent draws from the same normal distribution. Your opponent skis the first run, then you ski yours and your coach signals that you were faster. Without knowing the times, what is the probability you still win after the second run? Extra credit: in the snowboarding final there are 30 finalists; you go last on the first run and are told you are in the lead. What is your chance of gold?

The Riddler, FiveThirtyEight(original post)

Solution

Write your run times as Y1,Y2Y_1, Y_2 and the opponent’s as A1,A2A_1, A_2. Let U=A1Y1U = A_1 - Y_1 and V=A2Y2V = A_2 - Y_2. You were faster on run one, so U>0U > 0; you win gold when your total is smaller, U+V>0U + V > 0. Both UU and VV are differences of independent identical normals, so they are independent, normal, mean zero, and jointly rotationally symmetric about the origin.

By that symmetry the direction of (U,V)(U,V) is uniform around the circle. The event U>0U > 0 is a half-plane (a 180180^\circ sector); the event U+V>0U + V > 0 is the half-plane above the line V=UV = -U. Their overlap is the sector from 45-45^\circ to 9090^\circ, a span of 135135^\circ, so Pr(U>0 and U+V>0)=135360=38,\Pr(U>0 \text{ and } U+V>0) = \frac{135^\circ}{360^\circ} = \frac38, and dividing by Pr(U>0)=12\Pr(U>0) = \tfrac12, Pr(winled after run 1)=3/81/2=34.\Pr(\text{win} \mid \text{led after run 1}) = \frac{3/8}{1/2} = \boxed{\tfrac34}.

For the extra credit there is no such tidy sector. Being fastest on the first run among 3030 is strong evidence but far from decisive over a second independent run; simulating the conditional probability gives about 0.31.\boxed{0.31}.

The computation

For each field size, draw two independent runs per skier, keep the trials where you led after the first run, and measure how often you also had the lowest total.

import numpy as np
rng = np.random.default_rng(0)
def prob_gold(n, runs=2_000_000):
    first = rng.normal(0, 1, (runs, n))
    total = first + rng.normal(0, 1, (runs, n))
    led = first.argmin(1) == n - 1            # you (last skier) fastest run 1
    won = total.argmin(1) == n - 1
    return (led & won).sum() / led.sum()
print(prob_gold(2))                           # ~0.75 = 3/4
print(prob_gold(30))                          # ~0.31