de-su

Untitled

Mar 25th, 2020
675
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.07 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Text;
  5. using System.Text.RegularExpressions;
  6.  
  7. namespace KizhiPart1
  8. {
  9.     public static class Hello
  10.     {
  11.         public static void Main()
  12.         {
  13.             Console.OutputEncoding = Encoding.UTF8;
  14.             TextWriter writer = new StringWriter();
  15.             var interpreter = new Interpreter(writer);
  16.  
  17.             interpreter.ExecuteLine("set a 5");
  18.             interpreter.ExecuteLine("set a 6");
  19.             interpreter.ExecuteLine("print a");
  20.  
  21.            
  22.             Console.Read();
  23.         }
  24.     }
  25.     public class Interpreter
  26.     {
  27.         public TextWriter _writer;
  28.         private readonly Dictionary<string, int> _variables;
  29.         private readonly Queue<string> _output;
  30.         private readonly string pattern = @"^([a-zA-Z]+|)$";
  31.  
  32.         public Interpreter(TextWriter writer)
  33.         {
  34.             _variables = new Dictionary<string, int>();
  35.             _output = new Queue<string>();
  36.             _writer = writer;
  37.         }
  38.  
  39.         public void ExecuteLine(string command)
  40.         {
  41.             _writer = new StringWriter();
  42.  
  43.             var sequence = command.Split(' ');
  44.  
  45.             if (sequence.Length > 3 || sequence.Length < 2)
  46.             {
  47.  
  48.                 _output.Clear();
  49.                 _writer.Write($"Неизвестная команда: ");
  50.                 foreach (var item in sequence)
  51.                 {
  52.                     _writer.Write(item + ' ');
  53.                 }
  54.                 _writer.WriteLine();
  55.                 return;
  56.             }
  57.  
  58.             else if (sequence.Length == 3)
  59.             {
  60.                 bool success = int.TryParse(sequence[2], out int value);
  61.  
  62.                 if (Regex.IsMatch(sequence[1], pattern) && success && value > 0)
  63.                 {
  64.                     if (sequence[0] == "set")
  65.                     {
  66.                         if (!_variables.ContainsKey(sequence[1]))
  67.                         {
  68.                             _variables.Add(sequence[1], value);
  69.                             return;
  70.                         }
  71.                         else
  72.                         {
  73.                             _variables[sequence[1]] = value;
  74.                             return;
  75.                         }
  76.                     }
  77.  
  78.                     else if (sequence[0] == "sub")
  79.                     {
  80.                         if (_variables.ContainsKey(sequence[1]))
  81.                         {
  82.                             if (_variables[sequence[1]] - value > 0)
  83.                             {
  84.                                 _variables[sequence[1]] -= value;
  85.                                 return;
  86.                             }
  87.                             else
  88.                             {
  89.                                 _output.Clear();
  90.                                 _writer.WriteLine("Результат операции sub должен быть натуральным числом");
  91.                                 return;
  92.                             }
  93.                         }
  94.                         else
  95.                         {
  96.                             _output.Clear();
  97.                             _writer.WriteLine("Переменная отсутствует в памяти");
  98.                             return;
  99.                         }
  100.                     }
  101.                     else
  102.                     {
  103.                         _output.Clear();
  104.                         _writer.Write($"Неизвестная команда: ");
  105.                         foreach (var item in sequence)
  106.                         {
  107.                             _writer.Write(item + ' ');
  108.                         }
  109.                         _writer.WriteLine();
  110.                         return;
  111.                     }
  112.                 }
  113.                 else
  114.                 {
  115.                     _output.Clear();
  116.                     _writer.Write($"Неизвестная команда: ");
  117.                     foreach (var item in sequence)
  118.                     {
  119.                         _writer.Write(item + ' ');
  120.                     }
  121.                     _writer.WriteLine();
  122.                     return;
  123.                 }
  124.             }
  125.  
  126.             else if (sequence.Length == 2)
  127.             {
  128.                 if (Regex.IsMatch(sequence[1], pattern))
  129.                 {
  130.                     if (sequence[0] == "print")
  131.                     {
  132.                         if (_variables.ContainsKey(sequence[1]))
  133.                         {
  134.                             _output.Enqueue(_variables[sequence[1]].ToString());
  135.                         }
  136.                         else
  137.                         {
  138.                             _output.Clear();
  139.                             _writer.WriteLine("Переменная отсутствует в памяти");
  140.                             return;
  141.                         }
  142.                     }
  143.  
  144.                     else if (sequence[0] == "rem")
  145.                     {
  146.                         if (_variables.ContainsKey(sequence[1]))
  147.                         {
  148.                             _variables.Remove(sequence[1]);
  149.                             return;
  150.                         }
  151.                         else
  152.                         {
  153.                             _output.Clear();
  154.                             _writer.WriteLine("Переменная отсутствует в памяти");
  155.                             return;
  156.                         }
  157.                     }
  158.                 }
  159.                 else
  160.                 {
  161.                     _output.Clear();
  162.                     _writer.Write($"Неизвестная команда: ");
  163.                     foreach (var item in sequence)
  164.                     {
  165.                         _writer.Write(item + ' ');
  166.                     }
  167.                     _writer.WriteLine();
  168.                     return;
  169.                 }
  170.             }
  171.  
  172.             foreach (var item in _output)
  173.             {
  174.                 _writer.WriteLine(item);
  175.             }
  176.             _output.Clear();
  177.         }
  178.     }
  179. }
Advertisement
Add Comment
Please, Sign In to add comment