Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- public class WiggleWiggle
- {
- static void Main()
- {
- string input = Console.ReadLine();
- string[] inputTokens = input.Split(' ');
- // we will need this later - a number that has 63 ones
- long reverseMask = long.MaxValue;
- // we increment the index with 2, so that we read the numbers in pairs
- for (int i = 0; i < inputTokens.Length; i += 2)
- {
- long firstNumber = long.Parse(inputTokens[i]);
- long secondNumber = long.Parse(inputTokens[i + 1]);
- // bitIndex is also incremented by 2 - this way we only check the bits at even positions
- for (int bitIndex = 0; bitIndex < 63; bitIndex += 2)
- {
- // formula that will obtain the bit at the current position (bitIndex)
- long currentBitFirstNumber = (firstNumber >> bitIndex) & 1;
- long currentBitSecondNumber = (secondNumber >> bitIndex) & 1;
- // if bits are not the same, switch them using XOR
- // bit | mask | result
- // 0 ^ 1 = 1
- // 1 ^ 1 = 0
- if (currentBitFirstNumber != currentBitSecondNumber)
- {
- long mask = 1L << bitIndex;
- firstNumber = firstNumber ^ mask;
- secondNumber = secondNumber ^ mask;
- }
- }
- // reverse every single bit
- firstNumber = firstNumber ^ reverseMask;
- secondNumber = secondNumber ^ reverseMask;
- // we are ready with the numbers - print them and continue with the next iteration
- Console.WriteLine("{0} {1}", firstNumber, Convert.ToString(firstNumber, 2).PadLeft(63, '0'));
- Console.WriteLine("{0} {1}", secondNumber, Convert.ToString(secondNumber, 2).PadLeft(63, '0'));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement