Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Main()
- {
- //initialize
- int tries = 100_000_000;
- Random rnd = new Random();
- var fieldArrays = Enumerable.Range(1, tries).Select(i => LongRandom(rnd)).ToArray();
- Console.WriteLine("Starting test 1...");
- var start = DateTime.Now;
- for (int x = 0; x < tries; x++)
- {
- ///////////////////////////
- /// Test 1
- //////////////////////////
- var fld = Transpose2(fieldArrays[x]);
- /////////////////////////
- }
- var end = DateTime.Now;
- var duration = end - start;
- Console.WriteLine(duration.ToString());
- Console.WriteLine("Starting test 2...");
- start = DateTime.Now;
- for (int x = 0; x < tries; x++)
- {
- ///////////////////////////
- /// Test 2
- //////////////////////////
- var fld = Transpose(fieldArrays[x]);
- /////////////////////////
- }
- end = DateTime.Now;
- duration = end - start;
- Console.WriteLine(duration.ToString());
- }
- // Define other methods and classes here
- public static ulong Transpose2(ulong state)
- {
- ulong r0 = state & 0xF0000F0000F0000FL; //unchanged diagonals
- ulong t = (state & 0x0000F000FF000FF0UL) * ((1UL << 12) + (1UL << 24));
- ulong r1 = (state & 0x0F0000F0000F0000L) >> 12;
- r0 |= (state & 0x00F0000F00000000L) >> 24;
- r1 |= (state & 0x000F000000000000L) >> 36;
- r0 |= (state & 0x000000000000F000L) << 36;
- r1 |= t & 0x0FF000FF000F0000UL;
- return r0 | r1;
- }
- public static ulong Transpose(ulong state)
- {
- return state & 0xF0000F0000F0000FL //unchanged diagonals
- | (state & 0x0F0000F0000F0000L) >> 12
- | (state & 0x0000F0000F0000F0L) << 12
- | (state & 0x00F0000F00000000L) >> 24
- | (state & 0x00000000F0000F00L) << 24
- | (state & 0x000F000000000000L) >> 36
- | (state & 0x000000000000F000L) << 36;
- }
- public static ulong LongRandom(Random rand)
- {
- byte[] buf = new byte[8];
- rand.NextBytes(buf);
- return BitConverter.ToUInt64(buf, 0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement