dim4o

Enigmanation2

Aug 18th, 2014
318
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Numerics;
  3. namespace Enigmanation
  4. {
  5.     class Program
  6.     {
  7.         static void Main()
  8.         {
  9.             string input = Console.ReadLine();// "(1+9)%6-(7%2)*8=";
  10.             char[] delimiters = new char[] { '(', ')', '=' };
  11.             string[] arr = input.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
  12.             int result = 0;
  13.  
  14.             string expression = "";
  15.             for (int index = 0; index < arr.Length; index++)
  16.             {
  17.                 if (arr[index].Length > 2 && getDigit(arr[index], 0) > 0 &&
  18.                     getDigit(arr[index], arr[index].Length - 1) > 0)
  19.                 {
  20.                     result = getResult(arr[index]);
  21.                    
  22.                     if (result < 0)
  23.                     {
  24.                         expression += result.ToString().Replace('-', '&');              
  25.                     }
  26.                     else
  27.                     {
  28.                         expression += result.ToString();
  29.                     }                
  30.                 }
  31.                 else
  32.                 {
  33.                     expression += arr[index];
  34.                 }
  35.             }
  36.  
  37.             result = getResult(expression);
  38.             Console.WriteLine("{0:F3}", result);
  39.         }
  40.         static int getResult(string str)
  41.         {
  42.             int num;
  43.             if (int.TryParse(str, out num))
  44.             {
  45.                 return int.Parse(str);
  46.             }
  47.  
  48.             char[] operators = new char[] { '+', '-', '*', '%' };
  49.             char[] digits = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '&' };
  50.             string[] numbers = str.Split(operators, StringSplitOptions.RemoveEmptyEntries);
  51.             string[] oper = str.Split(digits, StringSplitOptions.RemoveEmptyEntries);
  52.            
  53.             if (numbers[0][0] == '&')
  54.             {
  55.                 numbers[0] = numbers[0].Replace('&', '-');
  56.             }
  57.  
  58.             int result = int.Parse(numbers[0]);
  59.  
  60.             for (int i = 0; i < numbers.Length - 1; i++)
  61.             {
  62.                 int a = result;
  63.                 if (numbers[i + 1][0] == '&')
  64.                 {
  65.                     numbers[i + 1] = numbers[i + 1].Replace('&', '-');
  66.                 }
  67.                 int b = int.Parse(numbers[i + 1]);
  68.                 switch (oper[i])
  69.                 {
  70.                     case "+": result = a + b; break;
  71.                     case "-": result = a - b; break;
  72.                     case "*": result = a * b; break;
  73.                     case "%": result = a % b; break;
  74.                 }
  75.             }
  76.             return result;
  77.         }
  78.         static int getDigit(string str, int i)
  79.         {
  80.             int digit = 0;
  81.             switch (str[i])
  82.             {
  83.                 case '1': digit = 1; break;
  84.                 case '2': digit = 2; break;
  85.                 case '3': digit = 3; break;
  86.                 case '4': digit = 4; break;
  87.                 case '5': digit = 5; break;
  88.                 case '6': digit = 6; break;
  89.                 case '7': digit = 7; break;
  90.                 case '8': digit = 8; break;
  91.                 case '9': digit = 9; break;
  92.                 default: digit = -1; break;
  93.             }
  94.             return digit;
  95.         }
  96.     }
  97. }
RAW Paste Data