dim4o

Enigmanation1

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