Advertisement
Guest User

Untitled

a guest
Nov 18th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.73 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace Interpreter
  5. {
  6.  
  7.     class Context
  8.     {
  9.  
  10.         private string input;
  11.         private int output;
  12.  
  13.         public Context(string input)
  14.         {
  15.             this.input = input;
  16.         }
  17.  
  18.         public string Input
  19.         {
  20.             get { return input; }
  21.             set { input = value; }
  22.         }
  23.  
  24.         public int Output
  25.         {
  26.             get { return output; }
  27.             set { output = value; }
  28.         }
  29.  
  30.     }
  31.  
  32.  
  33.     abstract class Phrase
  34.     {
  35.  
  36.         public void Interpreter(Context context)
  37.         {
  38.  
  39.             if (context.Input.Length == 0)
  40.                 return;
  41.             if (context.Input.StartsWith(Nine()))
  42.             {
  43.                 context.Output += (Multiplier() * 9);
  44.                 context.Input = context.Input.Substring(2);
  45.             }
  46.             else if (context.Input.StartsWith(Five()))
  47.             {
  48.                 context.Output += (Multiplier() * 5);
  49.                 context.Input = context.Input.Substring(1);
  50.             }
  51.             else if (context.Input.StartsWith(Four()))
  52.             {
  53.                 context.Output += (Multiplier() * 4);
  54.                 context.Input = context.Input.Substring(2);
  55.             }
  56.             while (context.Input.StartsWith(One()))
  57.             {
  58.                 context.Output += (Multiplier() * 1);
  59.                 context.Input = context.Input.Substring(1);
  60.             }
  61.         }
  62.  
  63.         public abstract string One();
  64.         public abstract string Four();
  65.         public abstract string Five();
  66.         public abstract string Nine();
  67.         public abstract int Multiplier();
  68.  
  69.     }
  70.  
  71.  
  72.  
  73.     class PhraseOnes : Phrase
  74.     {
  75.         public override string One() { return "I"; }
  76.         public override string Four() { return "IV"; }
  77.         public override string Five() { return "V"; }
  78.         public override string Nine() { return "IX"; }
  79.         public override int Multiplier() { return 1; }
  80.     }
  81.     class PhraseTens : Phrase
  82.     {
  83.         public override string One() { return "X"; }
  84.         public override string Four() { return "XL"; }
  85.         public override string Five() { return "L"; }
  86.         public override string Nine() { return "XC"; }
  87.         public override int Multiplier() { return 10; }
  88.     }
  89.  
  90.     class PhraseHundreds : Phrase
  91.     {
  92.         public override string One() { return "C"; }
  93.         public override string Four() { return "CD"; }
  94.         public override string Five() { return "D"; }
  95.         public override string Nine() { return "CM"; }
  96.         public override int Multiplier() { return 100; }
  97.     }
  98.  
  99.  
  100.     class PhraseThousands : Phrase
  101.     {
  102.         public override string One() { return "M"; }
  103.         public override string Four() { return " "; }
  104.         public override string Five() { return " "; }
  105.         public override string Nine() { return " "; }
  106.         public override int Multiplier() { return 1000; }
  107.     }
  108.  
  109.  
  110.     class Apka
  111.     {
  112.         static void Main()
  113.         {
  114.            
  115.             List<Phrase> tree = new List<Phrase>();
  116.             tree.Add(new PhraseThousands());
  117.             tree.Add(new PhraseHundreds());
  118.             tree.Add(new PhraseTens());
  119.             tree.Add(new PhraseOnes());
  120.  
  121.             string roman = "CMXVII";
  122.             string roman2 = "MDXLIII";
  123.             var context = new Context(roman);
  124.             var context2 = new Context(roman2);
  125.             foreach (Phrase item in tree)
  126.             {
  127.                 item.Interpreter(context);
  128.                 item.Interpreter(context2);
  129.             }
  130.             Console.WriteLine(roman2 + " = " + context2.Output);
  131.             Console.WriteLine(roman + " = " + context.Output);
  132.         }
  133.     }
  134.  
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement