When Voyager visited Saturn and Jupiter, data for the pictures used blocks of Golay code. Each 24-bit block of data could have up to three errors, and the computers here on Earth could fix these errors. The Golay code is thus an error-correcting code. It was originally published in 1949 with Marcel Golay's half-page paper, "Notes on Digital Coding". Today, this paper is considered one of the most remarkable papers ever published, with deep, deep connections to group theory, graph theory, number theory, combinatorics, game theory, multidimensional geometry, and even particle physics.
The 23-bit Golay code is called a perfect code. Any integer from 0 to is within distance three of one of the code words, so that up to three errors can be detected and corrected. The automorphism group is the Mathieu group The only other nontrivial perfect codes are the ternary Golay code and the Hamming code. The code words of weight 7 are elements of an (4, 7, 23) Steiner system.
The 24-bit Golay code is called a semiperfect code. Any integer from 0 to is within distance four of one of the code words. Up to four errors can be detected and up to three errors can be corrected. The automorphism group is the Mathieu group The code words of weight eight are elements of an (5, 8, 24) Steiner system.
This Demonstration builds the Golay code in four different ways.
1. Greedy method. Start a list with the 24-bit 0 word (000…000). Add the first 24-bit word that has eight or more differences from all words in the list. Repeat, to get the 4096 code words. The code words are winning positions in the game of Mogul, played with 24 coins in a row. Each turn flips between one and seven coins such that the leftmost flipped coin goes from heads to tails. Last to move wins.
2. Icosahedron method. Start with the adjacency matrix of an icosahedron, and append the 12×12 matrix 1-I. These 12 vectors serve as a basis for the 4096 code words.
3. Nonresidue method. If an integer is squared modulus 23, the result will not be in , the quadratic nonresidues mod 23. In a 24-bit code word, change those places to 1. Obtain 11 more lists by adding 1 to 11 to , mod 23. Finally, change the bit of each to 1 and gain a basis for the 4096 code words.
4. Polynomial method. Modulus 2, one factor of is Consider the powers of , namely . There are 253 polynomials with seven terms. Choose 12 polynomial powers with differing initial terms, and append 1 to each polynomial's coefficient list to obtain a basis for the 4096 code words.
M. J. E. Golay, "Notes on Digital Coding," Proc. IRE, 37, 1949 p. 657.
J. H. Conway and N. J. A. Sloane, Sphere Packings, Lattices, and Groups, 3rd ed., New York: Springer, 1999.