EBCDIC. ASCII. Unicode. All text encoding schemes, and each better than the last, for some value of better. Today, I propose to you a scheme suited to one noble purpose- communicating short messages via bowling scores.
You might ask why. That’s the kind of question that tells me you’ve never been the world’s greatest bowler trapped behind enemy lines while knowing your nation’s spies are watching the bowling scores closely. Also, it’s a fun intellectual exercise.
Like any way of recording numbers, one naturally wonders about the entropy of a game of bowling. A simple encoding gives us 301 distinct values- from zero to a perfect score of 300. However, there are many different ways to bowl, say, a one. There are, in fact, twenty different ways to bowl a score of one, since you get two balls per frame and ten frames. Finding a bowler capable of this feat is an exercise for the reader. Since there are many different possible games of bowling, there may be a significant amount of entropy in one game.
This is equivalent to asking “How many permutations of numbers 0-10 that sum to ten or less are there?” Recall that you cannot knock down more than ten pins in one frame.
For each frame, consider the following.
If you knock down zero pins for the first ball of the frame, there are ten possibilities for the second. If you knock down one pin for the first ball, there are nine possibilities for the second, and so on, all the way down to a strike. You can see that this is the sum of numbers from one to ten- 55. More than enough to encode, for example, the letters A-Z, the ten digits, and have 19 left for abbreviations and control characters. Multiply this by ten frames to get 550 possible games of bowling.
Well, that’s not entirely true. The last frame is a little weird. If you bowl a strike or one of the ten spares, you get an extra ball. This is tricky to include in the math, since it’s an extra half frame that can only encode a small fraction of our alphabet. We’ll leave it out for now- perhaps it can be a parity bit indicating the sum of all previous frames mod ten or some such.
550 values sounds like a lot, but our simple encoding only lets our bowler send ten-character messages. Which is great for our spy pro bowler transmitting short messages via bowling scores, but we can hopefully do better. A simple solution is to have a table that maps bowling scores to message, but that’s awfully inelegant. Ideally, our bowler can keep the code in their head.
Sharp readers will notice that 550 is only a little more than 512 (2^9). In terms of bits, you need a remarkably efficient alphabet to squeeze anything better out. ASCII, the most commonly used mapping for this sort of thing, is a seven-bit code. That is, there are 127 (2^7 -1) values in the ASCII alphabet. You can’t fit many ASCII characters in a bowling score!
In closing, I believe a method for encoding information in bowling scores is novel. Below, I describe a sample encoding for mapping frames to characters.
To encode a digit, you knock over the desired number of pins, then pick up the spare. So “3 /” is a three.
To send a space, bowl a strike.
For the letters A-Z, consult the table below. There’s probably a more elegant way to do this, perhaps encoding the same characters more than once so you don’t need a perfect bowler. An empty cell indicates an impossible to bowl combination. All combinations ending with five or more that aren’t spares are available for personal use. Your intelligence agency or furtive bowling club may fill this space with useful abbreviations, foreign-language characters, or simply ignore them to make their games seem more natural.
Ball 1 0 1 2 3 4 5 6 7 8 9 10 0 a b c d e f g h i j (space) Ball 2 1 k l m n o p q r s 9 2 t u v w x y z . 8 3 ! ? $ % & @ # 7 4 « < > » ¤ = 6 5 ( free ) 5 6 (free) 4 7 " 3 8 " 2 9 " 1 10 0
« - Backspace, ignore previous frame. Should be something easier to bowl, perhaps.
» - This message continues in another game. May be followed by a message number.
¤ - End of message. Disregard following frames.
This code has room for improvement. Commonly used characters should be easiest to bowl, both to make things easier on the transmitter and to make coded games look more natural. If you’re sending a phone number (exactly ten characters in the US) or a radio frequency, you’d look petty suspicious bowling all those spares!
You could also encode certain digits more naturally- a pound sign can mean “treat the next frame as a literal number”.
Finally, 550 is not the maximum number of values encodable in a bowling game. If you had a magical bowler capable of choosing exactly which pin to knock down, you could encode even more information in the pins left standing. Given, however, that this information doesn’t usually show up on a score sheet and that many pin arrangements are difficult to arrange (try to hit the back pins without disturbing the front ones!), this is an exercise for another time.