Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2017
482
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.48 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4.  
  5. namespace Clones
  6. {
  7. public class CloneVersionSystem : ICloneVersionSystem
  8. {
  9. public class StackItem
  10. {
  11. public int Value { get; set; }
  12. public StackItem Next { get; set; }
  13. }
  14.  
  15. public class Stack
  16. {
  17. public StackItem head = null;
  18.  
  19. public Stack()
  20. {
  21. head = null;
  22. }
  23.  
  24. public Stack(Stack programs)
  25. {
  26. head = programs.head;
  27. }
  28.  
  29. public bool IsEmpty()
  30. {
  31. return head == null;
  32. }
  33.  
  34. public int Peek()
  35. {
  36. return head.Value;
  37. }
  38.  
  39. public void Push(int value)
  40. {
  41. head = new StackItem { Value = value, Next = head };
  42. }
  43.  
  44. public int Pop()
  45. {
  46. if (head == null) throw new InvalidOperationException();
  47. var result = head.Value;
  48. head = head.Next;
  49.  
  50. return result;
  51. }
  52. }
  53.  
  54. public class Clones
  55. {
  56. Stack learnedPrograms = new Stack();
  57. Stack canceledPrograms = new Stack();
  58.  
  59. public string Learn(int numberOfProgram)
  60. {
  61. learnedPrograms.Push(numberOfProgram);
  62. canceledPrograms.head = null;
  63.  
  64. return null;
  65. }
  66.  
  67. public string Rollback()
  68. {
  69. canceledPrograms.Push(learnedPrograms.Pop());
  70.  
  71. return null;
  72. }
  73.  
  74. public string Relearn()
  75. {
  76. learnedPrograms.Push(canceledPrograms.Pop());
  77.  
  78. return null;
  79. }
  80.  
  81. public Clones Clone()
  82. {
  83. var newClone = new Clones
  84. {
  85. learnedPrograms = new Stack { head = learnedPrograms.head },
  86. canceledPrograms = new Stack { head = canceledPrograms.head }
  87. };
  88.  
  89. return newClone;
  90. }
  91.  
  92. public string Check()
  93. {
  94. if (learnedPrograms.IsEmpty())
  95. return "basic";
  96.  
  97. return learnedPrograms.Peek().ToString();
  98. }
  99. }
  100.  
  101. List<Clones> cloneList = new List<Clones>();
  102. public CloneVersionSystem()
  103. {
  104. cloneList.Add(new Clones());
  105. }
  106.  
  107. public string Execute(string query)
  108. {
  109. var parts = query.Split(' ');
  110. var cloneNumber = int.Parse(parts[1]);
  111. switch (parts[0])
  112. {
  113. case "learn":
  114. var programNumber = int.Parse(parts[2]);
  115. cloneList[cloneNumber - 1].Learn(programNumber);
  116. break;
  117. case "rollback":
  118. cloneList[cloneNumber - 1].Rollback();
  119. break;
  120. case "relearn":
  121. cloneList[cloneNumber - 1].Relearn();
  122. break;
  123. case "clone":
  124. cloneList.Add(cloneList[cloneNumber - 1].Clone());
  125. break;
  126. case "check":
  127. return cloneList[cloneNumber - 1].Check();
  128. }
  129.  
  130. return null;
  131. }
  132. }
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement