The July 10, 2026 problems posed on the Fiddler on the Proof blog go as follows.
…the Tour de Fiddler is back!
This time, we’ll be looking at a model for a cyclist’s speed \(v\) as a function of their pedaling power \(P\), their mass \(m\), and the ground’s angle of inclination \(\theta\): \[ v = \frac{P}{m\sin(\theta)+10} \]
(For the purposes of this puzzle, you needn’t worry about the units for power, mass, or speed. If you’re curious, they’re typically given in Watts, kilograms, and kilometers per hour or miles per hour, respectively.)
In cycling, roads are marked with a gradient \(g\), which is a hill’s slope, typically expressed as a percentage. Thus, an incredibly steep 45-degree incline has a gradient of 1, or “100 percent.”
Consider the following two riders: * A “climber,” who has a power of 300 and a mass of 60 * A “sprinter,” who has a power of 325 and a mass of 80
At what gradient will the climber and sprinter cycle at the same speed? (You can give your answer as a value between 0 and 1 or as a percentage.)
For really small angles of inclination \(\theta\), \(g \approx \theta\), but we’ll be sure to convert back.
Let \(v_c(\theta) =
\frac{300}{60\sin(\theta)+10}\) be the velocity of the climber
and \(v_s =
\frac{325}{80\sin(\theta)+10}\) be the velocity of the sprinter.
We’d like to solve for the \(\theta\)
such that \(v_c(\theta) =
v_s(\theta)\).
\[
\begin{aligned}
\frac{300}{60\sin(\theta)+10}
&= \frac{325}{80\sin(\theta)+10} \\
300(80\sin(\theta)+10)
&= 325(60\sin(\theta)+10) \\
24{,}000\sin(\theta)+3{,}000
&= 19{,}500\sin(\theta)+3{,}250 \\
4{,}500\sin(\theta)
&= 250 \\
\sin(\theta)
&= \frac{250}{4500}
\end{aligned}
\]
Since \(\sin\) is opposite over hypotenuse (as we learned in high school), then we’re after \(\tan(\theta)\), or rise over run… the gradient. That would be \(\tan(\theta) = \frac{250}{\sqrt{4500^2 - 250^2}} \approx 0.05564149\).
Thus, the gradient at which they go the same speed is approximately 0.0556415. Note that \(\theta = \arcsin(250/4500) = 0.05558417\), which, as we pointed out at the beginning, is a pretty close estimate.
Here is a nice chart that depicts the speed of each cyclist for the different gradients.
The climber and the sprinter are racing up a perfectly sinusoidal hill. They go from the base, where the gradient is 0 percent, to the peak, where the gradient is again 0 percent. For them to reach the top at the same time, what should the maximum gradient of the hill be? (You can give your answer as a value between 0 and 1 or as a percentage.)
Importantly, note that the formula for \(v\) given above is for a rider’s speed along the ground. Thus, when the ground is inclined, the same speed will cover less horizontal distance per unit time.
The link provided by the Fiddler gave us that a sinusoid is in the form \(f(x) = a\sin(wx + c)\) for constants \(a\), \(w\), and \(c\). Since we don’t really care about the phase, we’ll work with \(c=0\). The amplitude \(a\) and angular frequency \(w\) are what affects the gradient (or slope) at any given point.
Let’s first note that for \(f(x) = a\sin(wx)\), the base is at \(x = -\pi/(2w)\) and the peak is at \(x = \pi/(2w)\).
Next, let’s note that \(f'(x) = aw\cos(wx)\) is the slope of the road at any point \(x\), and the maximum that this can be is \(aw\) at \(x=0\). At this point, I think it is safe to assume that \(a=1\) as the units don’t really matter in terms of how high the hill is.
The formula for the length of a line defined by \(f(x)\) from \(x=a\) to \(x=b\) is given as \[ \int_a^b \sqrt{1 + (f'(x))^2} dx \] so the length of the road from base to peak of the hill is \[ \int_{-\pi/(2w)}^{\pi/(2w)} \sqrt{1 + (aw)^2\cos^2(wx)} dx \]
On each infinitesimally small slice of the road, the time it takes
the cyclist to traverse that slice is the lenghth over velocity. The
velocity of each cyclist is a function of \(\theta\), and actually, \(\sin(\theta)\). We know that \(f'(x)\) is the slope at any given time,
so \[
\begin{aligned}
\sin(\theta)
&=\sin(\arctan(f'(x))) \\
&= \sin(\arctan(aw\cos(wx))) \\
&= \frac{aw\cos(wx)}{\sqrt{1+(aw)^2\cos^2(wx)}}
\end{aligned}
\]
So, the velocity functions can be written in terms of \(x\).
Let’s now use R to create a function that will compute the time it takes for each cyclist to traverse the hill from base to peak.
climberTime <- function(a=1, w=1){
slope <- function(x) a * w * cos(w*x)
ds <- function(x) sqrt(1 + (a*w*cos(w*x))^2)
velocity <- function(x) 300/(60*slope(x)/ds(x)+10)
integrate(function(x) ds(x)/velocity(x), -pi/(2*w), pi/(2*w) )$val
}
sprinterTime <- function(a=1, w=1){
slope <- function(x) a * w * cos(w*x)
ds <- function(x) sqrt(1 + (a*w*cos(w*x))^2)
velocity <- function(x) 325/(80*slope(x)/ds(x)+10)
integrate(function(x) ds(x)/velocity(x), -pi/(2*w), pi/(2*w) )$val
}
TimeToOpt <- function(w){
abs(climberTime(a=1, w) - sprinterTime(a=1, w))
}
We can use an optimize function to get a sense of where the differences is smallest.
optimize(TimeToOpt, c(.01,0.2))
## $minimum
## [1] 0.08745051
##
## $objective
## [1] 1.840701e-05
This tells us a minimum is occuring at \(w\approx0.08745\). Let’s refine this as best we can.
w = seq(0.087, 0.088, 1e-7)
result <- sapply(w, TimeToOpt)
w[which.min(result)]
## [1] 0.087433
result[which.min(result)]
## [1] 2.184227e-09
Thus, we can see that the maximum gradient of the hill (at \(x=0\), when it is steepest) is approximately 0.087433.
Once I solved the Fiddler, my favorite thing to do with AI is get help with graphics. I plugged the following into ChatGPT.
[the write-up and code from the extra credit above along with…] “I’d like to see a chart that plots the maximum gradient to the time it takes to get up the hill with that maximum gradient. Is there something interactive you can create as well that would produce the graph of the hill for a chosen maximum gradient (say between 0% and 15%) along with points that represent the sprinter and climber where for small gradients, the sprinter point is all the way at the peak while the climber point is at whatever point she would be when the sprinter finished, and vice versa for larger gradients?”
This is what it came up with.