Hash functions for binary and ternary words Warren D. Smith NECI Abstract We describe a simple integer-valued ``hash'' function $h ( x )$, where $x$ is a binary word of some fixed length. This hash function has the properties that \begin{enumerate} \item $h(x)$ may be computed in $O(n)$ steps where $n$ is the length of $x$, \item $h(y)$ may be computed in $O(d)$ time, if $h(x)$ is known and $y$ and $x$ differ at $d$ (known) bits. \item $h$ is ``locally collisionless:'' $h(x) \neq h(y)$ if $x \neq y$ and $x$ and $y$ are Hamming distance $\le k$ apart. \end{enumerate} These properties of our hash functions emerge from simple number theoretic arguments. Modifications of the same idea work for ternary words, and binary words of constant weight. We mention two applications of this hash function in computer programming: to playing the Oriental game of Go, and to a new heuristic method of finding good local optima for intractible combinatorial optimization problems. As an application of these properties in mathematics, we obtain new error correcting codes to radix $B$, with minimal distance 3. We find a lower bound on the number of codewords which implies, subject to a certain number-theoretic conjecture, that these codes include an infinite number of new record-cardinality distance-3 codes. Regardless of the fate of that conjecture, our construction certainly leads to thousands of particular new record ternary codes. Keywords Go, combinational optimization, local optima, hash function, difference sets, prime numbers, ternary error-correcting codes, simulated annealing.