## Saturday 16 July 2016

### Minimal Rotor Clock

The Rotor Clock I posted about last month is all very well, but there are a heck of a lot of moving parts: thirty-two rotors, each with ten faces. You could physically build it, but things would be a lot easier if there were fewer components. So I set about trying to reduce the number of rotors for a twelve-hour clock that displays the time as words.

The extreme (degenerate) case is a single rotor with 12 * 60 = 1440 faces. This would produce a working clock, but the rotor would need to be enormous (or the text very small). The next idea I had was a clock with two rotors: one for hours and one for minutes. You could repeat the twelve hours five times and make both rotors have 60 faces. This would still require very large rotors. Also, telling the time in a "natural" British English manner is quite tricky. Consider:

QUARTER TO TWELVE
TWELVE O'CLOCK
FOURTEEN MINUTES PAST TWELVE

The solution I came up with (which may not be optimal, but is possibly close) is to use four rotors, each with at most twelve words or phrases plus a blank face:

Rotor A      Rotor B      Rotor C         Rotor D
=======      =======      =======         =======
THIRTEEN     ONE          O'CLOCK         ONE
FOURTEEN     TWO          MINUTE PAST     TWO
SIXTEEN      THREE        MINUTES PAST    THREE
SEVENTEEN    FOUR         QUARTER PAST    FOUR
EIGHTEEN     FIVE         HALF PAST       FIVE
NINETEEN     SIX          QUARTER TO      SIX
TWENTY       SEVEN        MINUTES TO      SEVEN
EIGHT        MINUTE TO       EIGHT
NINE                         NINE
TEN                          TEN
ELEVEN                       ELEVEN
TWELVE                       TWELVE

Note that rotor B is identical to rotor D.

This produces a clock that can tell the time as hoped for, but with the insertion of another blank face in rotor A and a bit of duplication in rotor C, I was able to reduce the number of large rotations quite considerably. This produces a series of relatively smooth transitions. The final rotors are organised thus:

Rotor A      Rotor B      Rotor C         Rotor D
=======      =======      =======         =======
(blank)      (blank)      (blank)         (blank)
THIRTEEN     ONE          O'CLOCK         ONE
FOURTEEN     TWO          MINUTE PAST     TWO
(blank)      THREE        MINUTES PAST    THREE
SIXTEEN      FOUR         QUARTER PAST    FOUR
SEVENTEEN    FIVE         MINUTES PAST    FIVE
EIGHTEEN     SIX          HALF PAST       SIX
NINETEEN     SEVEN        MINUTES TO      SEVEN
TWENTY       EIGHT        QUARTER TO      EIGHT
(blank)      NINE         MINUTES TO      NINE
(blank)      TEN          MINUTE TO       TEN
(blank)      ELEVEN       (blank)         ELEVEN
(blank)      TWELVE       (blank)         TWELVE

If you look at the JavaScript code, you'll see that control of the rotors is via two data tables. This scheme lends itself to efficient compression. Indeed, a slightly cut-down variation of the clock can be compressed into a single 1017-byte HTML page (providing you're using a highly-compliant browser such as Google Chrome or Mozilla Firefox).