Advertisement
Guest User

Untitled

a guest
Nov 18th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.91 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.  
  42. if (context.Input.StartsWith(Nine()))
  43. {
  44. context.Output += (9 * Multiplier());
  45. context.Input = context.Input.Substring(2);
  46. }
  47. else if (context.Input.StartsWith(Four()))
  48. {
  49. context.Output += (4 * Multiplier());
  50. context.Input = context.Input.Substring(2);
  51. }
  52. else if (context.Input.StartsWith(Five()))
  53. {
  54. context.Output += (5 * Multiplier());
  55. context.Input = context.Input.Substring(1);
  56. }
  57.  
  58. while (context.Input.StartsWith(One()))
  59. {
  60. context.Output += (1 * Multiplier());
  61. context.Input = context.Input.Substring(1);
  62. }
  63.  
  64.  
  65.  
  66. }
  67.  
  68. public abstract string One();
  69. public abstract string Four();
  70. public abstract string Five();
  71. public abstract string Nine();
  72.  
  73. public abstract int Multiplier();
  74.  
  75. }
  76.  
  77.  
  78. class PhraseThousands : Phrase
  79. {
  80. public override string One() { return "M"; }
  81.  
  82. public override string Four() { return " "; }
  83. public override string Five() { return " "; }
  84.  
  85. public override string Nine() { return " "; }
  86. public override int Multiplier() { return 1000; }
  87. }
  88.  
  89. class PhraseHundreds : Phrase
  90. {
  91. public override string One() { return "C"; }
  92.  
  93. public override string Four() { return "CD"; }
  94. public override string Five() { return "D"; }
  95.  
  96. public override string Nine() { return "CM"; }
  97. public override int Multiplier() { return 100; }
  98. }
  99.  
  100. class PhraseTens : Phrase
  101. {
  102. public override string One() { return "X"; }
  103.  
  104. public override string Four() { return "XL"; }
  105. public override string Five() { return "L"; }
  106.  
  107. public override string Nine() { return "XC"; }
  108. public override int Multiplier() { return 10; }
  109. }
  110.  
  111. class PhraseOnes : Phrase
  112. {
  113. public override string One() { return "I"; }
  114.  
  115. public override string Four() { return "IV"; }
  116. public override string Five() { return "V"; }
  117.  
  118. public override string Nine() { return "IX"; }
  119. public override int Multiplier() { return 1; }
  120. }
  121.  
  122.  
  123.  
  124.  
  125. //
  126. //
  127. //
  128. //
  129.  
  130.  
  131. class Apka
  132. {
  133. static void Main()
  134. {
  135.  
  136. List<Phrase> tree = new List<Phrase>();
  137. tree.Add(new PhraseThousands());
  138. tree.Add(new PhraseHundreds());
  139. tree.Add(new PhraseTens());
  140. tree.Add(new PhraseOnes());
  141.  
  142.  
  143. string roman = "MDXLIII";
  144. Context context = new Context(roman);
  145. foreach (Phrase item in tree)
  146. {
  147. item.Interpreter(context);
  148. }
  149. Console.WriteLine(roman + " = " + context.Output);
  150. // MDXLIII = 1543
  151.  
  152.  
  153.  
  154. roman = "CMXVII";
  155. context = new Context(roman);
  156. foreach (Phrase item in tree)
  157. {
  158. item.Interpreter(context);
  159. }
  160. Console.WriteLine(roman + " = " + context.Output);
  161. // CMXVII = 917
  162.  
  163. }
  164. }
  165.  
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement