Advertisement
tockata

05. Bit Paths

Jul 25th, 2014
385
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.31 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. class Program
  6. {
  7.     static void Main()
  8.     {
  9.         int n = int.Parse(Console.ReadLine());
  10.         string[] paths = new string[n];
  11.         int[] numbers = new int[] { 0, 0, 0, 0, 0, 0, 0, 0 };
  12.         int position = 0;
  13.  
  14.         for (int i = 0; i < n; i++)
  15.         {
  16.             paths[i] = Console.ReadLine();
  17.         }
  18.  
  19.         for (int i = 0; i < paths.Length; i++)
  20.         {
  21.             int bitToCheck;
  22.             string[] directions = paths[i].Split(',');
  23.             switch (directions[0])
  24.             {
  25.                 case "0":
  26.                     bitToCheck = (numbers[0] & (1 << 3)) >> 3;
  27.                     if (bitToCheck == 0)
  28.                     {
  29.                         numbers[0] |= (1 << 3);
  30.                     }
  31.                     else if (bitToCheck == 1)
  32.                     {
  33.                         numbers[0] &= ~(1 << 3);
  34.                     }
  35.                     position = 3;
  36.                     break;
  37.                 case "1":
  38.                     bitToCheck = (numbers[0] & (1 << 2)) >> 2;
  39.                     if (bitToCheck == 0)
  40.                     {
  41.                         numbers[0] |= (1 << 2);
  42.                     }
  43.                     else if (bitToCheck == 1)
  44.                     {
  45.                         numbers[0] &= ~(1 << 2);
  46.                     }
  47.                     position = 2;
  48.                     break;
  49.                 case "2":
  50.                     bitToCheck = (numbers[0] & (1 << 1)) >> 1;
  51.                     if (bitToCheck == 0)
  52.                     {
  53.                         numbers[0] |= (1 << 1);
  54.                     }
  55.                     else if (bitToCheck == 1)
  56.                     {
  57.                         numbers[0] &= ~(1 << 1);
  58.                     }
  59.                     position = 1;
  60.                     break;
  61.                 case "3":
  62.                     bitToCheck = numbers[0] & 1;
  63.                     if (bitToCheck == 0)
  64.                     {
  65.                         numbers[0] |= 1;
  66.                     }
  67.                     else if (bitToCheck == 1)
  68.                     {
  69.                         numbers[0] &= ~1;
  70.                     }
  71.                     position = 0;
  72.                     break;
  73.                 default:
  74.                     break;
  75.             }
  76.             for (int j = 1; j < 8; j++)
  77.             {
  78.                 switch (directions[j])
  79.                 {
  80.                     case "0":
  81.                         bitToCheck = (numbers[j] & (1 << position)) >> position;
  82.                         if (bitToCheck == 0)
  83.                         {
  84.                             numbers[j] |= (1 << position);
  85.                         }
  86.                         else if (bitToCheck == 1)
  87.                         {
  88.                             numbers[j] &= ~(1 << position);
  89.                         }
  90.                         break;
  91.                     case "+1":
  92.                         position--;
  93.                         bitToCheck = (numbers[j] & (1 << position)) >> position;
  94.                         if (bitToCheck == 0)
  95.                         {
  96.                             numbers[j] |= (1 << position);
  97.                         }
  98.                         else if (bitToCheck == 1)
  99.                         {
  100.                             numbers[j] &= ~(1 << position);
  101.                         }
  102.                         break;
  103.                     case "-1":
  104.                         position++;
  105.                         bitToCheck = (numbers[j] & (1 << position)) >> position;
  106.                         if (bitToCheck == 0)
  107.                         {
  108.                             numbers[j] |= (1 << position);
  109.                         }
  110.                         else if (bitToCheck == 1)
  111.                         {
  112.                             numbers[j] &= ~(1 << position);
  113.                         }
  114.                         break;
  115.                     default:
  116.                         break;
  117.                 }
  118.             }
  119.         }
  120.         int sum = 0;
  121.         foreach (int number in numbers)
  122.         {
  123.             sum += number;
  124.         }
  125.         string binary = Convert.ToString(sum, 2);
  126.         Console.WriteLine(binary);
  127.         string hexademical = Convert.ToString(sum, 16).ToUpper();
  128.         Console.WriteLine(hexademical);
  129.     }
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement