Advertisement
enevlogiev

WiggleWiggle

Aug 22nd, 2015
248
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.91 KB | None | 0 0
  1. using System;
  2.  
  3. public class WiggleWiggle
  4. {
  5.     static void Main()
  6.     {
  7.         string input = Console.ReadLine();
  8.         string[] inputTokens = input.Split(' ');
  9.  
  10.         // we will need this later - a number that has 63 ones
  11.         long reverseMask = long.MaxValue;
  12.  
  13.         // we increment the index with 2, so that we read the numbers in pairs
  14.         for (int i = 0; i < inputTokens.Length; i += 2)
  15.         {
  16.             long firstNumber = long.Parse(inputTokens[i]);
  17.             long secondNumber = long.Parse(inputTokens[i + 1]);
  18.  
  19.             // bitIndex is also incremented by 2 - this way we only check the bits at even positions
  20.             for (int bitIndex = 0; bitIndex < 63; bitIndex += 2)
  21.             {
  22.                 // formula that will obtain the bit at the current position (bitIndex)
  23.                 long currentBitFirstNumber = (firstNumber >> bitIndex) & 1;
  24.                 long currentBitSecondNumber = (secondNumber >> bitIndex) & 1;
  25.                
  26.                 // if bits are not the same, switch them using XOR
  27.                 // bit | mask | result
  28.                 //  0  ^  1  =  1
  29.                 //  1  ^  1  =  0
  30.                 if (currentBitFirstNumber != currentBitSecondNumber)
  31.                 {
  32.                     long mask = 1L << bitIndex;
  33.                     firstNumber = firstNumber ^ mask;
  34.                     secondNumber = secondNumber ^ mask;
  35.                 }
  36.             }
  37.  
  38.             // reverse every single bit
  39.             firstNumber = firstNumber ^ reverseMask;
  40.             secondNumber = secondNumber ^ reverseMask;
  41.  
  42.             // we are ready with the numbers - print them and continue with the next iteration
  43.             Console.WriteLine("{0} {1}", firstNumber, Convert.ToString(firstNumber, 2).PadLeft(63, '0'));
  44.             Console.WriteLine("{0} {1}", secondNumber, Convert.ToString(secondNumber, 2).PadLeft(63, '0'));
  45.         }  
  46.     }
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement