Books · The Fiddler: Solutions
Chapter 9
Will You Be Right on Time?
A standard analog clock has an hour hand, a minute hand, and minute markers, of which are also hour markers. At a certain time, both hands point directly at minute markers (either of which may also be an hour marker), and the hour hand is markers ahead of the minute hand, measured clockwise. At what time does this happen?
The Fiddler, Zach Wissner-Gross, April 24, 2026(original post)
Solution
Number the markers to . The minute hand points at a marker only at a whole minute , sitting at marker . At o’clock and minutes the hour hand has moved markers from the top, a whole marker only when , i.e. . The clockwise lead is then Trying the five allowed minute values, only gives an integer hour: , so . At the minute hand is at marker , the hour hand at , a lead of exactly :
The computation
Test the marker condition directly: for each hour and each minute at which the hour hand also lands on a marker (), check whether the hour hand leads the minute hand by exactly markers.
sol = [(h, m) for h in range(12) for m in (0, 12, 24, 36, 48)
if ((5*h + m//12) - m) % 60 == 13]
print(sol) # [(7, 24)]
Extra Credit
Is there a time when the hour, minute, and second hands, each sweeping continuously, together form two right angles, with one of the hands in the middle: that hand making with each of the other two, which then lie apart?
Solution
There is no such exact time. Writing the three hand angles as functions of the time and searching the full twelve-hour cycle, the closest the three hands come is at about where the minute hand sits between the hour and second hands: those two are apart, and the minute hand is and from them. The residual is small but nonzero, and refining the search does not drive it to zero, so the configuration is never achieved exactly.
The computation
Sweep the twelve-hour cycle in fine steps. At each instant, for each choice of middle hand, measure how far the configuration is from “outer hands apart, middle hand from each.” The smallest residual is small but stays nonzero.
import numpy as np
t = np.arange(0, 43200, 0.005) # seconds over 12 hours
ang = [(6*t) % 360, (0.1*t) % 360, (t/120) % 360] # second, minute, hour
def gap(a, b):
d = np.abs((a - b) % 360); return np.minimum(d, 360 - d)
best = np.full_like(t, 1e18)
for mid in range(3):
o = [i for i in range(3) if i != mid]
err = ((gap(ang[o[0]], ang[o[1]]) - 180)**2
+ (gap(ang[mid], ang[o[0]]) - 90)**2
+ (gap(ang[mid], ang[o[1]]) - 90)**2)
best = np.minimum(best, err)
i = int(best.argmin()); s = t[i]
print(f"{int(s//3600)%12 or 12}:{int(s%3600//60):02d}:{s%60:06.3f}",
f"min sq.error = {best.min():.4f}") # 5:10:55.920 ~0.024 (not zero)