#include <stdio.h>
#include <string.h>
unsigned int hash_function(const char *k){
unsigned int current = 0;
unsigned int rot = 0;
int i = 0;
int r = 0;
for(i
= 0; i
< strlen(k
); i
++){ for(r = 0; r < 3; r++){
rot = (rot & (1 << 31)) >> 31 | (rot << 1);
}
rot += k[i];
current ^= rot;
rot = current;
}
return current;
}
int main() {
printf("gimme: %d\n", hash_function
("gimme")); printf("shelter: %d\n", hash_function
("shelter")); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCnVuc2lnbmVkIGludCBoYXNoX2Z1bmN0aW9uKGNvbnN0IGNoYXIgKmspeyAgIAogICAgdW5zaWduZWQgaW50IGN1cnJlbnQgPSAwOyAgIAogICAgdW5zaWduZWQgaW50IHJvdCA9IDA7ICAKICAgIGludCBpID0gMDsgIAogICAgaW50IHIgPSAwOyAgCiAgICBmb3IoaSA9IDA7IGkgPCBzdHJsZW4oayk7IGkrKyl7ICAKICAgICAgICBmb3IociA9IDA7IHIgPCAzOyByKyspeyAgCiAgICAgICAgICAgIHJvdCA9IChyb3QgJiAoMSA8PCAzMSkpID4+IDMxIHwgKHJvdCA8PCAxKTsgIAogICAgICAgIH0gIAogICAgICAgIHJvdCArPSBrW2ldOyAgCiAgICAgICAgY3VycmVudCBePSByb3Q7ICAKICAgICAgICByb3QgPSBjdXJyZW50OyAgCiAgICB9ICAKICAgIHJldHVybiBjdXJyZW50OyAgCn0KCmludCBtYWluKCkgewogICAgcHJpbnRmKCJnaW1tZTogJWRcbiIsIGhhc2hfZnVuY3Rpb24oImdpbW1lIikpOwogICAgcHJpbnRmKCJzaGVsdGVyOiAlZFxuIiwgaGFzaF9mdW5jdGlvbigic2hlbHRlciIpKTsKICAgIHJldHVybiAwOwp9