Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- namespace Clones
- {
- public class StackItem
- {
- public string Value { get; set; }
- public StackItem Next { get; set; }
- }
- public class Stack
- {
- public StackItem tail;
- public void Push(string value)
- {
- if (tail == null)
- tail = new StackItem { Value = value, Next = null };
- else
- {
- var item = new StackItem { Value = value, Next = tail };
- tail = item;
- }
- }
- public string Depush()
- {
- if (tail == null) throw new InvalidOperationException();
- var result = tail.Value;
- tail = tail.Next;
- return result.ToString();
- }
- internal Stack GetCopy()
- {
- return new Stack { tail = tail };
- }
- }
- public class Clone
- {
- public Stack learnedProgramm = new Stack();
- public Stack unlearnedProgramm = new Stack();
- public Clone()
- {
- if (learnedProgramm.tail == null)
- learnedProgramm.Push("basic");
- }
- public void Learn(string programm)
- {
- learnedProgramm.Push(programm);
- }
- public void Rollback()
- {
- var lastProgramm = learnedProgramm.Depush();
- unlearnedProgramm.Push(lastProgramm);
- }
- public Clone GetCLone()
- {
- return new Clone { learnedProgramm = learnedProgramm.GetCopy(), unlearnedProgramm = unlearnedProgramm };
- }
- public string Chek()
- {
- return learnedProgramm.tail.Value;
- }
- public void Relearn()
- {
- learnedProgramm.Push(unlearnedProgramm.Depush());
- }
- }
- public class CloneVersionSystem : ICloneVersionSystem
- {
- public List<Clone> clones = new List<Clone>();
- public CloneVersionSystem()
- => clones.Add(new Clone());
- public string Execute(string query)
- {
- var instruction = query.Split();
- switch (instruction[0])
- {
- case "learn": clones[int.Parse(instruction[1]) - 1].Learn(instruction[2]); break;
- case "rollback": clones[int.Parse(instruction[1]) - 1].Rollback(); break;
- case "check": return clones[int.Parse(instruction[1]) - 1].learnedProgramm.tail.Value;
- case "relearn": clones[int.Parse(instruction[1]) - 1].Relearn(); break;
- case "clone": clones.Add(clones[int.Parse(instruction[1]) - 1].GetCLone()); break;
- }
- return null;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement