Advertisement
dipique

Transposition Multiplication Method

Nov 13th, 2018
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.82 KB | None | 0 0
  1. void Main()
  2. {
  3.     //initialize
  4.     int tries = 100_000_000;
  5.     Random rnd = new Random();
  6.     var fieldArrays = Enumerable.Range(1, tries).Select(i => LongRandom(rnd)).ToArray();
  7.  
  8.     Console.WriteLine("Starting test 1...");
  9.     var start = DateTime.Now;
  10.     for (int x = 0; x < tries; x++)
  11.     {
  12.         ///////////////////////////
  13.         ///     Test 1
  14.         //////////////////////////
  15.         var fld = Transpose2(fieldArrays[x]);
  16.         /////////////////////////
  17.     }
  18.     var end = DateTime.Now;
  19.     var duration = end - start;
  20.     Console.WriteLine(duration.ToString());
  21.  
  22.     Console.WriteLine("Starting test 2...");
  23.     start = DateTime.Now;
  24.     for (int x = 0; x < tries; x++)
  25.     {
  26.         ///////////////////////////
  27.         ///     Test 2
  28.         //////////////////////////
  29.         var fld = Transpose(fieldArrays[x]);
  30.         /////////////////////////
  31.     }
  32.     end = DateTime.Now;
  33.     duration = end - start;
  34.     Console.WriteLine(duration.ToString());
  35. }
  36.  
  37. // Define other methods and classes here
  38. public static ulong Transpose2(ulong state)
  39. {
  40.     ulong r0 = state & 0xF0000F0000F0000FL; //unchanged diagonals
  41.  
  42.     ulong t = (state & 0x0000F000FF000FF0UL) * ((1UL << 12) + (1UL << 24));
  43.     ulong r1 = (state & 0x0F0000F0000F0000L) >> 12;
  44.     r0 |= (state & 0x00F0000F00000000L) >> 24;
  45.     r1 |= (state & 0x000F000000000000L) >> 36;
  46.     r0 |= (state & 0x000000000000F000L) << 36;
  47.     r1 |= t & 0x0FF000FF000F0000UL;
  48.  
  49.     return r0 | r1;
  50. }
  51.  
  52. public static ulong Transpose(ulong state)
  53. {
  54.     return state & 0xF0000F0000F0000FL //unchanged diagonals
  55.         | (state & 0x0F0000F0000F0000L) >> 12
  56.         | (state & 0x0000F0000F0000F0L) << 12
  57.         | (state & 0x00F0000F00000000L) >> 24
  58.         | (state & 0x00000000F0000F00L) << 24
  59.         | (state & 0x000F000000000000L) >> 36
  60.         | (state & 0x000000000000F000L) << 36;
  61. }
  62.  
  63. public static ulong LongRandom(Random rand)
  64. {
  65.     byte[] buf = new byte[8];
  66.     rand.NextBytes(buf);
  67.     return BitConverter.ToUInt64(buf, 0);
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement