2011-m2s3-city-builder/hash.cpp
2011-12-11 12:34:51 +01:00

34 lines
852 B
C++

#include "all_includes.hh"
int random_seed() {
static bool initialized = false;
if (!initialized) {
initialized = true;
srand(time(NULL));
}
return rand();
}
// Ce hash donne des bons résultats sur tous les bits de l'entier
// généré (pas d'artefacts, répartition homogène des 0 et des 1).
unsigned int hash2(unsigned int a, unsigned int b) {
unsigned int h = 1;
int i;
for (i = 0; i < 32; i+=8) {
a = a*h + 1;
b = b*h + 1;
// marche aussi avec 65521.
h = (h << 6) + (h << 16) - h + ((a >> i) & 0xff); // h * 65599 + ieme octet de a
h = (h << 6) + (h << 16) - h + ((b >> i) & 0xff); // h * 65599 + ieme octet de b
}
return h;
}
int hashInRange(int seed, int n, int a, int b) {
return (hash2(seed, n) % (b - a)) + a;
}
bool proba(int seed, int n, unsigned int a, unsigned int b) {
return ((hash2(seed, n) % b) < a);
}