#include <iostream>
using namespace std;
namespace detail
{
template<size_t Count>
inline constexpr size_t countof(const char(&string)[Count])
{
return Count - 1;
}
template<typename T>
struct ascii_hash_t
{
template<typename L>
static constexpr T f(L const& data, T hash, size_t i = 0)
{
return i < countof(data) ? f(data, (hash & (~0u)) ^ (hash << 7) ^ T(data[i]), i + 1) : hash;
}
};
template<typename T, typename L>
inline constexpr T generate_ascii_hash(L const& data)
{
return detail::ascii_hash_t<T>::f(data, 0);
}
};
template<size_t Count>
inline constexpr uint32_t hash_constexpr(const char(&string)[Count])
{
return detail::generate_ascii_hash<uint32_t>(string);
}
int main() {
// your code goes here
constexpr uint32_t asd = hash_constexpr("asdasd");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpuYW1lc3BhY2UgZGV0YWlsCnsKICAgIHRlbXBsYXRlPHNpemVfdCBDb3VudD4KICAgIGlubGluZSBjb25zdGV4cHIgc2l6ZV90IGNvdW50b2YoY29uc3QgY2hhcigmc3RyaW5nKVtDb3VudF0pCiAgICB7CiAgICAgICAgcmV0dXJuIENvdW50IC0gMTsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgc3RydWN0IGFzY2lpX2hhc2hfdAogICAgewogICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEw+CiAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBUIGYoTCBjb25zdCYgZGF0YSwgVCBoYXNoLCBzaXplX3QgaSA9IDApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gaSA8IGNvdW50b2YoZGF0YSkgPyBmKGRhdGEsIChoYXNoICYgKH4wdSkpIF4gKGhhc2ggPDwgNykgXiBUKGRhdGFbaV0pLCBpICsgMSkgOiBoYXNoOwogICAgICAgIH0KICAgIH07CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgTD4KICAgIGlubGluZSBjb25zdGV4cHIgVCBnZW5lcmF0ZV9hc2NpaV9oYXNoKEwgY29uc3QmIGRhdGEpCiAgICB7CiAgICAgICAgcmV0dXJuIGRldGFpbDo6YXNjaWlfaGFzaF90PFQ+OjpmKGRhdGEsIDApOwogICAgfQp9OwoKdGVtcGxhdGU8c2l6ZV90IENvdW50PgppbmxpbmUgY29uc3RleHByIHVpbnQzMl90IGhhc2hfY29uc3RleHByKGNvbnN0IGNoYXIoJnN0cmluZylbQ291bnRdKQp7CiAgICByZXR1cm4gZGV0YWlsOjpnZW5lcmF0ZV9hc2NpaV9oYXNoPHVpbnQzMl90PihzdHJpbmcpOwp9CmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJY29uc3RleHByIHVpbnQzMl90IGFzZCA9IGhhc2hfY29uc3RleHByKCJhc2Rhc2QiKTsKCXJldHVybiAwOwp9