Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace _02_Problem
- {
- public class Program
- {
- public static void Main()
- {
- var elements = Console.ReadLine().Split(" \t".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).ToList();
- while (true)
- {
- string line = Console.ReadLine();
- if (line == "3:1")
- break;
- var tokens = line.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).ToArray();
- var command = tokens[0];
- if (command == "merge")
- {
- var startIndex = int.Parse(tokens[1]);
- var endIndex = int.Parse(tokens[2]);
- if (startIndex < 0)
- startIndex = 0;
- if (endIndex > elements.Count - 1)
- endIndex = elements.Count - 1;
- var times = endIndex - startIndex + 1;
- if (times <= 0)
- continue;
- var elementsToMerge = elements.Skip(startIndex).Take(times).ToList();
- for (int i = endIndex; i >= startIndex; i--)
- elements.RemoveAt(i);
- var merged = "";
- for (int i = 0; i < elementsToMerge.Count; i++)
- merged += elementsToMerge[i];
- elements.Insert(startIndex, merged);
- }
- else if (command == "divide")
- {
- var index = int.Parse(tokens[1]);
- var portions = int.Parse(tokens[2]);
- if (portions == 0)
- continue;
- var elementToDivide = elements[index];
- elements.RemoveAt(index);
- var dividedElements = new List<string>();
- if (elementToDivide.Length % portions == 0)
- {
- var eachPortion = elementToDivide.Length / portions;
- for (int i = 0; i < elementToDivide.Length; i += eachPortion)
- {
- var dividedElement = elementToDivide.Substring(i, eachPortion);
- dividedElements.Add(dividedElement);
- }
- elements.InsertRange(index, dividedElements);
- }
- else
- {
- var remainder = elementToDivide.Length % portions;
- var smallerGroups = portions - 1;
- var biggerElementCount = elementToDivide.Length - smallerGroups * remainder;
- var indexer = 0;
- for (int i = 0; i < smallerGroups; i++)
- {
- var dividedElement = elementToDivide.Substring(indexer, remainder);
- indexer += remainder;
- dividedElements.Add(dividedElement);
- }
- var biggerElement = elementToDivide.Substring(smallerGroups * remainder, biggerElementCount);
- dividedElements.Add(biggerElement);
- elements.InsertRange(index, dividedElements);
- }
- }
- }
- Console.WriteLine(string.Join(" ", elements));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement