Shakespearean Monkeys
September 20, 2021
Since the middle of the
19th century,
English playwright,
poet, and
actor,
William Shakespeare (1564-1616) is regarded as the greatest
writer in the
English language. His
authorship of
plays is easily explained as a means to secure steady
employment as an actor. However, the idea that a mere actor could be such a great author wasn't accepted by the
academic elite, who
thought his plays were written by a more skilled author, possibly an
educated nobleman or
courtier who desired
anonymity. I'm in
good company with the vast majority of Shakespeare
scholars who reject this
theory. We also have the example of a mere
teacher,
J. K. Rowling (b. 1965), who wrote the highly successful
Harry Potter books.
Among the possible authors of Shakespeare's works are
Francis Bacon (1561-1626), one of the developers of the
scientific method about whom I've written in this
blog (
400 Years of the Novum Organum, July 6, 2020). Another is English playwright,
Christopher Marlowe (1564-1593).
Mark Twain, as revealed in his 1909
book,
Is Shakespeare Dead?, agreed with the theory that
Bacon was the author of Shakespeare's works.
The Cobbe portrait of William Shakespeare (1564-1616), thought to have been painted circa 1610, during his lifetime.
The Cobbe portrait is similar in likeness to the Droeshout engraving of Shakespeare that appears in the First Folio of 1623, albeit with a little more hair.
In 2016, BBC television produced a satirical television sitcom about Shakespeare's life called the Upstart Crow to commemorate the 400th anniversary of his death.[1] Christopher Marlowe was a character in this series, which jokes about Shakespeare being the actual author of some of Marlowe's plays.
The Upstart Crow title comes from its use by playwright and poet, Robert Greene, in a 1592 pamphlet that marks Shakespeare as "an upstart Crow, beautified with our feathers."
(Via Wikimedia Commons.)
Most people are familiar with the
infinite monkey theorem that proposes that a
monkey hitting
keys at
random on a
typewriter for an
infinite amount of
time would reproduce the complete works of Shakespeare. Although the
text of
Hamlet has 132680
alphabetic characters,[2] infinity makes many things
mathematically possible, and this theorem is mathematically
proven. However,
reality is working against the infinite time
postulate of this theorem, since the
universe appears to have a finite lifetime, and even a slight
probability of a monkey's success would require a time many hundreds of thousands of
orders of magnitude longer than the
age of the universe.
The Shakespearean monkey acts as a
physical source of randomness, but
computers can generate randomness much more quickly at a
cost of far fewer
bananas. An
average banana is a source of 105
food calories, or 105
physics kilocalories. Since a kcal is equivalent to 1.162
watt-hour, this is 122 watt-hours, which is enough to fuel a
desktop computer for about half an hour. The
mathematical constant,
pi, has been computed to tens of trillions of
digits through the aid of rapidly
convergent series. While the digits of the pi have not been proven to be
normally distributed,
statistical analysis shows that they are random to a high degree. We can use the digits of pi as our source of randomness, but the problem remains as to how to convert pi to alphabet characters.
Digits of pi are found at many places on the
Internet in either its
decimal (
radix 10) or
hexadecimal (radix 16) form. The first few decimal and hexadecimal digits of pi are as follow:
3.1415926535897932384626433832795...
3.243F6A8885A308D313198A2E037073...
If we limit ourselves to just
lowercase letters, our problem becomes the conversion of a list of radix 10 digits of pi to radix 26. While this operation is mathematically quite simple, most computer
programming languages calculate with limited
precision and the simple operation will fail after just a few digits. Fortunately, there are
arbitrary precision code libraries that allow complete conversion. I used the
GNU Multiple Precision Floating-Point Reliable Library (GNU MPFR) in a simple
C language program to accomplish this conversion for the first million decimal digits of pi.
While this can be done in many
operating systems, in my
Linux system I used the
gcc compiler with the libgmp3-dev and libmpfr-dev packages, and I compiled the code using the
command, gcc -o pi-26 pi-26.c -lmpfr -lgmp -lm. The
source code and a file of the first million decimal digits of pi can be found as a
zip file here.
More powerful computers with more
memory than my desktop computer could convert from more than a million decimal digits. Likewise, a
spigot algorithm would give many more. Alas, my main experience with
spigots involves the
kitchen sink. I checked the result of this computation using data from Michael Keith's 1999
paper on the radix 26 encoding of pi.[3] To search for positions of
words in the alphabetic file, I used the
PHP code below (
Click image for a text file of the source code). The computation matches his results as shown in the following table.
Word |
Position |
|
Word |
Position |
zero |
389,247 |
|
six |
14,295 |
one |
10,087 |
|
seven |
--- |
two |
13,463 |
|
eight |
--- |
three |
--- |
|
nine |
175,372 |
four |
11,324 |
|
ten |
15,276 |
five |
64,838 |
|
|
|
Keith writes that "seven" appears at position 786,958. My computation, which starts with a million decimal digits of pi, could only give about 638,200 radix 26 digits of pi, so that number was outside my range. Keith writes that Hans Haverman extracted 5 million radix 26 digits of pi and discovered the word three at position 1,556,763, and fifty at 2,300,987 and 4,896,456.[3]
References:
- The Upstart Crow (2016, Matt Lipsey and Richard Boden, Directors) at the Internet Movie Database.
- William Shakespeare, "Hamlet, Prince of Denmark, via Project Gutenberg.
- Michael Keith, "The Pi Code," April, 1999. Also available here.