Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using NUnit.Framework;
- namespace Clones
- {
- public class CloneVersionSystem : ICloneVersionSystem
- {
- public string Execute(string query)
- {
- var segments = query.Split(' ');
- var command = segments[0];
- var ci = int.Parse(segments[1]);
- switch (command)
- {
- case "learn":
- var pi = int.Parse(segments[2]);
- Trooper.Learn(ci, pi);
- return null;
- case "relearn":
- Trooper.Relearn(ci);
- return null;
- case "rollback":
- Trooper.Rollback(ci);
- return null;
- case "clone":
- Trooper.CloneIt(ci);
- return null;
- case "check":
- return Trooper.CheckIt(ci);
- default: throw new ArgumentException();
- }
- }
- }
- public class Trooper
- {
- public static List<Trooper> SoldiersList = new List<Trooper>();
- public Stack<int> ActivatedPrograms = new Stack<int>();
- public Stack<int> CanceledPrograms = new Stack<int>();
- public static void Learn(int number, int program)
- {
- CaseOfNull(SoldiersList, number);
- var soldier = SoldiersList[number];
- soldier.ActivatedPrograms.Push(program);
- }
- public static void Relearn(int number)
- {
- CaseOfNull(SoldiersList, number);
- var soldier = SoldiersList[number];
- if (soldier.CanceledPrograms.Count > 0)
- soldier.ActivatedPrograms.Push(soldier.CanceledPrograms.Pop());
- }
- public static void Rollback(int number)
- {
- CaseOfNull(SoldiersList, number);
- var soldier = SoldiersList[number];
- if (soldier.ActivatedPrograms.Count > 0)
- soldier.CanceledPrograms.Push(soldier.ActivatedPrograms.Pop());
- }
- public static void CloneIt(int number)
- {
- CaseOfNull(SoldiersList, number);
- var soldier = SoldiersList[number];
- SoldiersList.Add(new Trooper()
- {
- ActivatedPrograms = soldier.ActivatedPrograms,
- CanceledPrograms = soldier.CanceledPrograms
- });
- }
- public static string CheckIt(int number)
- {
- CaseOfNull(SoldiersList, number);
- var soldier = SoldiersList[number];
- if (soldier.ActivatedPrograms.Count > 0)
- {
- var lastProgram = soldier.ActivatedPrograms.Peek();
- return lastProgram.ToString();
- }
- return "basic";
- }
- private static void CaseOfNull(List<Trooper> soldiersList, int number)
- {
- if (soldiersList[number] == null)
- soldiersList.Add(new Trooper());
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement