You are viewing a single comment's thread. Return to all comments →
C# solution (including code to parse STDIN):
using System; using System.Collections.Generic; using System.IO; using System.Text; class Solution { static void Main(String[] args) { var numOps = int.Parse(Console.ReadLine()); var sb = new StringBuilder(); var undoStack = new Stack<(int, string)>(); for (var i = 0; i < numOps; i++) { var op = Console.ReadLine(); SimpleTextEditor(op, sb, undoStack); } } public static void SimpleTextEditor(string op, StringBuilder sb, Stack<(int, string)> undoStack) { var elems = op.Split(" "); var opType = int.Parse(elems[0]); switch (opType) { case 1: Append(elems[1], sb, undoStack); break; case 2: Delete(int.Parse(elems[1]), sb, undoStack); break; case 3: Print(int.Parse(elems[1]), sb); break; case 4: Undo(sb, undoStack); break; } } static void Append(string text, StringBuilder sb, Stack<(int, string)> undoStack) { sb.Append(text); undoStack.Push((1, text)); } static void Delete(int count, StringBuilder sb, Stack<(int, string)> undoStack) { var size = sb.Length; var delStack = new Stack<char>(); for (var i = 0; i < count; i++) { delStack.Push(sb[size - i - 1]); } sb.Remove(size - count, count); undoStack.Push((2, string.Join("", delStack))); } static void Print(int idx, StringBuilder sb) { Console.WriteLine(sb[idx - 1]); } static void Undo(StringBuilder sb, Stack<(int, string)> undoStack) { if (undoStack.Count > 0) { var lastOp = undoStack.Pop(); switch (lastOp.Item1) { case 1: sb.Remove(sb.Length - lastOp.Item2.Length, lastOp.Item2.Length); break; case 2: sb.Append(lastOp.Item2); break; } } } }
Seems like cookies are disabled on this browser, please enable them to open this website
Simple Text Editor
You are viewing a single comment's thread. Return to all comments →
C# solution (including code to parse STDIN):