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).
No comments:
Post a Comment