55 lines
3.6 KiB
Plaintext
55 lines
3.6 KiB
Plaintext
HAKMEM
|
|
|
|
/hakmem/ , n. MIT AI Memo 239 (February 1972). A legendary collection of
|
|
neat mathematical and programming hacks contributed by many people at MIT
|
|
and elsewhere. (The title of the memo really is HAKMEM , which is a
|
|
6-letterism for hacks memo. ) Some of them are very useful techniques,
|
|
powerful theorems, or interesting unsolved problems, but most fall into the
|
|
category of mathematical and computer trivia. Here is a sampling of the
|
|
entries (with authors), slightly paraphrased: Item 41 (Gene Salamin): There
|
|
are exactly 23,000 prime numbers less than 2 18. Item 46 (Rich Schroeppel):
|
|
The most probable suit distribution in bridge hands is 4-4-3-2, as compared
|
|
to 4-3-3-3, which is the most evenly distributed. This is because the world
|
|
likes to have unequal numbers: a thermodynamic effect saying things will not
|
|
be in the state of lowest energy, but in the state of lowest disordered
|
|
energy. Item 81 (Rich Schroeppel): Count the magic squares of order 5 (that
|
|
is, all the 5-by-5 arrangements of the numbers from 1 to 25 such that all
|
|
rows, columns, and diagonals add up to the same number). There are about 320
|
|
million, not counting those that differ only by rotation and reflection.
|
|
Item 154 (Bill Gosper): The myth that any given programming language is
|
|
machine independent is easily exploded by computing the sum of powers of 2.
|
|
If the result loops with period = 1 with sign + , you are on a
|
|
sign-magnitude machine. If the result loops with period = 1 at -1 , you are
|
|
on a twos-complement machine. If the result loops with period greater than
|
|
1, including the beginning, you are on a ones-complement machine. If the
|
|
result loops with period greater than 1, not including the beginning, your
|
|
machine isn't binary the pattern should tell you the base. If you run out of
|
|
memory, you are on a string or bignum system. If arithmetic overflow is a
|
|
fatal error, some fascist pig with a read-only mind is trying to enforce
|
|
machine independence. But the very ability to trap overflow is machine
|
|
dependent. By this strategy, consider the universe, or, more precisely,
|
|
algebra: Let X = the sum of many powers of 2 =. ..111111 (base 2). Now add X
|
|
to itself: X + X =. ..111110. Thus, 2X = X - 1 , so X = -1. Therefore
|
|
algebra is run on a machine (the universe) that is two's-complement. Item
|
|
174 (Bill Gosper and Stuart Nelson): 21963283741 is the only number such
|
|
that if you represent it on the PDP-10 as both an integer and a
|
|
floating-point number, the bit patterns of the two representations are
|
|
identical. Item 176 (Gosper): The banana phenomenon was encountered when
|
|
processing a character string by taking the last 3 letters typed out,
|
|
searching for a random occurrence of that sequence in the text, taking the
|
|
letter following that occurrence, typing it out, and iterating. This ensures
|
|
that every 4-letter string output occurs in the original. The program typed
|
|
BANANANANANANANA.... We note an ambiguity in the phrase, the N th occurrence
|
|
of. In one sense, there are five 00's in 0000000000; in another, there are
|
|
nine. The editing program TECO finds five. Thus it finds only the first ANA
|
|
in BANANA, and is thus obligated to type N next. By Murphy's Law, there is
|
|
but one NAN, thus forcing A, and thus a loop. An option to find overlapped
|
|
instances would be useful, although it would require backing up N 1
|
|
characters before seeking the next N -character string. Note: This last item
|
|
refers to a Dissociated Press implementation. See also banana problem.
|
|
HAKMEM also contains some rather more complicated mathematical and technical
|
|
items, but these examples show some of its fun flavor. An HTML transcription
|
|
of the entire document is available at
|
|
http://www.inwap.com/pdp10/hbaker/hakmem/hakmem.html.
|
|
|