using System;
using System.Collections.Generic;
public class Test
{
static void Main()
{
int[] ints = { 10001, 10002, 10003, 10004, 10005 };
int hash = GetHashCode(ints);
int[] reorderedInts = { 10004, 10002, 10005, 10001, 10003 };
int reorderedHash = GetHashCode(reorderedInts);
Console.WriteLine("hash == {0}", hash);
Console.WriteLine("hashReordered == {0}", reorderedHash);
}
static int GetHashCode(IEnumerable<int> integers)
{
int hash = 0;
foreach(int integer in integers)
{
int x = integer;
x ^= x >> 17;
x *= 830770091; // 0xed5ad4bb
x ^= x >> 11;
x *= -1404298415; // 0xac4c1b51
x ^= x >> 15;
x *= 830770091; // 0x31848bab
x ^= x >> 14;
hash += x;
}
return hash;
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKCnB1YmxpYyBjbGFzcyBUZXN0CnsKICAgIHN0YXRpYyB2b2lkIE1haW4oKQogICAgewogICAgICAgIGludFtdIGludHMgPSB7IDEwMDAxLCAxMDAwMiwgMTAwMDMsIDEwMDA0LCAxMDAwNSB9OwogICAgICAgIGludCBoYXNoID0gR2V0SGFzaENvZGUoaW50cyk7CiAgICAgICAgaW50W10gcmVvcmRlcmVkSW50cyA9IHsgMTAwMDQsIDEwMDAyLCAxMDAwNSwgMTAwMDEsIDEwMDAzIH07CiAgICAgICAgaW50IHJlb3JkZXJlZEhhc2ggPSBHZXRIYXNoQ29kZShyZW9yZGVyZWRJbnRzKTsKCiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoImhhc2ggICAgICAgICAgPT0gezB9IiwgaGFzaCk7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoImhhc2hSZW9yZGVyZWQgPT0gezB9IiwgcmVvcmRlcmVkSGFzaCk7CiAgICB9CgogICAgc3RhdGljIGludCBHZXRIYXNoQ29kZShJRW51bWVyYWJsZTxpbnQ+IGludGVnZXJzKQogICAgewogICAgICAgIGludCBoYXNoID0gMDsKCiAgICAgICAgZm9yZWFjaChpbnQgaW50ZWdlciBpbiBpbnRlZ2VycykKICAgICAgICB7CiAgICAgICAgICAgIGludCB4ID0gaW50ZWdlcjsKCiAgICAgICAgICAgIHggXj0geCA+PiAxNzsKICAgICAgICAgICAgeCAqPSA4MzA3NzAwOTE7ICAgLy8gMHhlZDVhZDRiYgogICAgICAgICAgICB4IF49IHggPj4gMTE7CiAgICAgICAgICAgIHggKj0gLTE0MDQyOTg0MTU7IC8vIDB4YWM0YzFiNTEKICAgICAgICAgICAgeCBePSB4ID4+IDE1OwogICAgICAgICAgICB4ICo9IDgzMDc3MDA5MTsgICAvLyAweDMxODQ4YmFiCiAgICAgICAgICAgIHggXj0geCA+PiAxNDsKCiAgICAgICAgICAgIGhhc2ggKz0geDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBoYXNoOwogICAgfQp9