I am still experimenting with hash functions, and I was toying with the Zobrist hash function[1] that is best known for its use in chess engines. The hash function is conceptually simple: you need a large table of random numbers, indexed, in a chess application, by the position on the board of the piece and by the piece itself. To compute a hash for a whole board configuration, you simply xor all the random numbers together. The hard part is choosing the random numbers.

## Storage size from bits

March 29, 2016Last week, we had a look at the computation of Log2 using templates and `constexpr`. Of course, I had ulterior motives. In particular, I was interested in allocating just the right number of bits for a field in a bit field, but rather than hard-coding it, having it deduced from a template argument. Let’s see how we can do that.

## Log2 (with C++ metaprogramming)

March 22, 2016C++ meta-programming a powerful tool. Not only can you use it to build generic types (such as the STL’s `std::list`), you can also use it to have compile-time evaluation. Let’s have a look at a simple problem that can be solved in two very different ways: computing the Log base 2 of an integer.

## Rotating Arrays (part II)

February 16, 2016Last week we had a look at Kernighan’s algorithm to rotate an array position and concluded that it might not be optimal, as each element was moved twice. This week, we’ll have a look at another algorithm that moves some items more than once, but overall will do less than two exchanges per items.

## Rotating Arrays (Part I)

February 9, 2016To “rotate” an array position to the left (or to the right, doesn’t really matter) we could repeat times a shift of one, using only one temporary variable. This method doesn’t use much auxiliary memory but is inefficient: it will do copies if we apply it to an array of size . Surely we can do better.

## Selection, Revisited.

February 2, 2016When we think of searching, we generally think of searching a value in a sorted collection of some sort. For a simple array, this implies the array is sorted and that we use binary search or a variant. But what if we want to search by rank? In a sorted array, that’s not very hard: the th item is in slot . But what if the array is not sorted?

## LaTeXify C/C++ code snippets

January 26, 2016So I’m still writing lecture notes. This time, I need to include kind of larger pieces of C or C++ code, and environments do not really help me a lot. Some are better than others, but you still have to escape and fancify text yourself. This is laborious and error-prone, and is an obvious target for automation. A script of some sort. The task isn’t overly complicated: highlight keywords, and escape symbols like { } _ and & that make unhappy. This looks like a job for

`sed`.