Library · The Fiddler: Solutions · Chapter 4
How Fast Can You Surf?
A surfer rides a crest of the wave , where is the height above sea level in metres, is the horizontal position in metres and is the time in seconds. On this wave alone she moves at metre per second, the speed of the wave. Then a second wave arrives from the opposite direction, half as tall and twice as fast, . The two combine, so the height of the water is and the surfer stays on top of a crest of this combined wave. What are her slowest and fastest horizontal speeds?
The Fiddler, Zach Wissner-Gross, October 9, 2026(original post)
The official solution appeared in the post of October 16, 2026 and gives and metres per second for the main puzzle, agreeing with the answer below. The Extra Credit half of that post is paywalled, so the average speed of metre per second is my own and has not been checked against it.
Solution
Adding two sine waves usually means a page of trigonometry. Here there is a shorter road, because both waves have the same shape in , a plain slid along by some amount. A sum of two such curves is again a single sine curve in , only with a new height and a new offset. The surfer sits on its top, so her position is fixed by the offset, and the whole puzzle comes down to how fast the offset changes.
Complex numbers keep that bookkeeping tidy. Since is the imaginary part of , where . Write with . Then , a single sine curve of height , and its crests sit where plus a whole number of turns. Following one crest,
The useful step is to pull out the big wave’s own rotation: The bracket is the point . It runs round the circle of radius centred at , once every seconds. If is the angle of seen from the origin, then , and the crest is at So the crest rides along with the big wave at speed , minus whatever the angle is doing. The left half of the figure shows that angle: the long arrow is the big wave, the short arrow the small one, and is the direction of their sum.
To find how fast changes, write and . For a moving point , the rate of change of its angle is the imaginary part of , where the dash means the derivative in time. Here , so using . The crest’s horizontal velocity is therefore
Two facts finish the job. The numerator is never negative and the denominator is at least , so : the surfer never goes backwards. And falls steadily as rises, since its derivative in is . Its extremes come at the two ends of ’s range. At , with the two arrows pointing the same way, . At , with the short arrow pointing back towards the origin, is as close to the origin as it gets, its direction swings fastest, and .
The question was later clarified to mean horizontal speed, but the answer survives if the vertical motion of the crest is counted too. The crest’s height is , which is momentarily still at both and , so the two extreme instants are purely horizontal. The computation below confirms that no other instant gives a total speed above .
The computation
The check does not use the formula for . It follows one crest of the actual water surface: starting from the top of the big wave at , it steps time forward by seconds and at each step slides to the nearby point where the slope of the water is zero, using Newton’s method. It confirms each point is a crest rather than a trough, and differences the positions and heights to get the speeds. Thirty full cycles of the pattern are followed.
import numpy as np
def height(x, t):
return 2*np.sin(x - t) + np.sin(x + 2*t)
def slope(x, t):
return 2*np.cos(x - t) + np.cos(x + 2*t)
def curvature(x, t):
return -2*np.sin(x - t) - np.sin(x + 2*t)
# Follow one crest: start on the big wave's crest at t = 0;
# after each small time step, slide to the nearby point of
# zero slope by Newton's method.
dt, T = 1e-4, 20*np.pi # thirty cycles of the pattern
x, xs = np.pi/2, []
for k in range(int(T/dt) + 1):
t = k*dt
for _ in range(6):
x -= slope(x, t)/curvature(x, t)
xs.append(x)
xs = np.array(xs)
ts = np.arange(len(xs))*dt
assert np.all(curvature(xs, ts) < 0) # a crest, not a trough
v = np.gradient(xs, dt) # horizontal speed
w = np.gradient(height(xs, ts), dt) # vertical speed
tot = np.hypot(v, w)
print(f"slowest {v.min():.6f}, fastest {v.max():.6f}")
print(f"total speed: slowest {tot.min():.6f}, "
f"fastest {tot.max():.6f}")
print(f"average horizontal speed {(xs[-1] - xs[0])/T:.6f}")
print(f"average total speed {tot.mean():.6f}")
It prints
slowest 0.000000, fastest 4.000000
total speed: slowest 0.000012, fastest 4.000000
average horizontal speed 1.000000
average total speed 2.397925
The first two lines settle the main puzzle in both readings (the is the time step, not a real speed). The last two belong to the Extra Credit.
Extra Credit
The surfer rides the crest of the combined wave for a very long time. What is her average speed?
Solution
There is no need to average the formula for . The crest’s position, , already says where she is, so it is enough to ask where she ends up.
Over one cycle of seconds the point goes once round its circle and comes back to where it started. That circle, of radius about the point , never reaches the origin, and it lies wholly to the right of it. So the arrow from the origin to never makes a full turn: it rocks between the two tangents to the circle, either side of the axis, and returns to its starting direction. The angle therefore ends each cycle exactly where it began, and in that time has grown by exactly , the same as .
Over a long ride the bounded wobble in counts for nothing, and because is never negative the distance she covers equals her displacement. Her average speed is the big wave’s:
The small wave travels twice as fast, in the other direction, yet over time it neither helps nor hinders her. Its only effect is to make her stall and then sprint, as the right half of the figure shows. Had the small wave been the taller one, ’s circle would enclose the origin, would gain a full turn every cycle, and the crest would instead travel with the faster wave.
As a cross-check, the same answer comes from averaging the formula. Writing and using the standard average gives .
If the vertical motion of the crest is counted as well, the average total speed is about metres per second. That number has no tidy closed form and comes only from the computation; the puzzle’s clarification asks for the horizontal speed.
The computation
The crest-following code above serves here too. Its third line of output is the total horizontal distance covered over thirty cycles divided by the time, , and its fourth is the average total speed, .