Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace ConsoleApplication1
- {
- class Program
- {
- public static readonly List<char> Variables = new List<char> { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', /*'V'*/ 'W', 'X', 'Y', 'Z' };
- public static readonly List<string> StringOperators = new List<string> {"V", "v", "&", "->", "<->", "|", "+"};
- public static readonly List<char> Operators = new List<char> {'V', 'v', '&', '2', '3', '|', '+'};
- public static readonly char Denial = '~';
- class Stack
- {
- public List<char> stack = new List<char>();
- public void PushBack(char item)
- {
- stack.Add(item);
- }
- public void PopBack()
- {
- stack.RemoveAt(stack.Count - 1);
- }
- }
- static string DeleteSpaces(string input)
- {
- var result = new StringBuilder(input);
- int i = 0;
- while (i < result.Length)
- {
- if (result[i] == ' ')
- {
- result = result.Remove(i, 1);
- }
- else
- i++;
- }
- return result.ToString();
- }
- static string DeleteBrackets(string input)
- {
- var result = new StringBuilder(input);
- int i = 0;
- while (i < result.Length)
- {
- if (result[i] == '(')
- {
- if (Operators.Contains(result[i + 1]) || result[i + 1] == Denial)
- return null;
- result.Remove(i, 1);
- continue;
- }
- if (result[i] == ')')
- {
- if (Operators.Contains(result[i - 1]) || result[i - 1] == Denial)
- return null;
- result.Remove(i, 1);
- continue;
- }
- i++;
- }
- return result.ToString();
- }
- static bool CheckBracketBalance(string input)
- {
- var bracketBalance = new Stack();
- for (int element = 0; element < input.Length; element++)
- {
- if (input[element] == '(')
- bracketBalance.PushBack('(');
- if (input[element] == ')')
- {
- if (bracketBalance.stack.Count != 0)
- bracketBalance.PopBack();
- else
- return false;
- }
- }
- if (bracketBalance.stack.Count == 0)
- return true;
- else
- return false;
- }
- static bool IsVariable(char item)
- {
- return Variables.Contains(item);
- }
- static bool IsOperator(char item)
- {
- return Operators.Contains(item);
- }
- static string AbsorbeDenials(string input)
- {
- var result = new StringBuilder(input);
- int i = 0;
- while (i < result.Length)
- {
- if (result[i] == Denial)
- {
- if (i < result.Length - 1)
- {
- if (IsVariable(result[i + 1]) || result[i + 1] == '(')
- result = result.Remove(i, 1);
- else
- return null;
- }
- else
- return null;
- }
- else
- i++;
- }
- return result.ToString();
- }
- static bool CheckStriping(string input)
- {
- var striping = new List<string>();
- for (int i = 0; i < input.Length; i++)
- {
- if (IsVariable(input[i]))
- striping.Add("variable");
- else if (IsOperator(input[i]))
- striping.Add("operator");
- else
- return false;
- }
- if (striping[0] != "variable" || striping[striping.Count - 1] != "variable")
- return false;
- for (int i = 0; i < striping.Count - 1; i++)
- {
- if (striping[i] == striping[i + 1])
- return false;
- }
- return true;
- }
- static bool IsFormula(string inputString)
- {
- inputString = FormatString(inputString);
- if (!CheckBracketBalance(inputString))
- return false;
- inputString = DeleteBrackets(inputString);
- if (inputString == null)
- return false;
- inputString = AbsorbeDenials(inputString);
- if (inputString == null)
- return false;
- if (CheckStriping(inputString))
- return true;
- else
- return false;
- }
- static string FormatString(string input)
- {
- input = DeleteSpaces(input);
- input = input.Replace("<->", "3");
- input = input.Replace("->", "2");
- return input;
- }
- static void Main(string[] args)
- {
- var inputString = Console.ReadLine();
- if (IsFormula(inputString))
- Console.WriteLine("Формула");
- else
- Console.WriteLine("Не формула");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement