Advertisement
Rayk

Untitled

Nov 5th, 2017
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.56 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace _02_Problem
  7. {
  8. public class Program
  9. {
  10. public static void Main()
  11. {
  12. var elements = Console.ReadLine().Split(" \t".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).ToList();
  13.  
  14. while (true)
  15. {
  16. string line = Console.ReadLine();
  17. if (line == "3:1")
  18. break;
  19.  
  20. var tokens = line.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).ToArray();
  21. var command = tokens[0];
  22.  
  23. if (command == "merge")
  24. {
  25. var startIndex = int.Parse(tokens[1]);
  26. var endIndex = int.Parse(tokens[2]);
  27.  
  28. if (startIndex < 0)
  29. startIndex = 0;
  30.  
  31. if (endIndex > elements.Count - 1)
  32. endIndex = elements.Count - 1;
  33.  
  34. var times = endIndex - startIndex + 1;
  35.  
  36. if (times <= 0)
  37. continue;
  38.  
  39. var elementsToMerge = elements.Skip(startIndex).Take(times).ToList();
  40.  
  41. for (int i = endIndex; i >= startIndex; i--)
  42. elements.RemoveAt(i);
  43.  
  44. var merged = "";
  45. for (int i = 0; i < elementsToMerge.Count; i++)
  46. merged += elementsToMerge[i];
  47.  
  48. elements.Insert(startIndex, merged);
  49. }
  50. else if (command == "divide")
  51. {
  52. var index = int.Parse(tokens[1]);
  53. var portions = int.Parse(tokens[2]);
  54.  
  55. if (portions == 0)
  56. continue;
  57.  
  58. var elementToDivide = elements[index];
  59. elements.RemoveAt(index);
  60.  
  61. var dividedElements = new List<string>();
  62. if (elementToDivide.Length % portions == 0)
  63. {
  64. var eachPortion = elementToDivide.Length / portions;
  65.  
  66. for (int i = 0; i < elementToDivide.Length; i += eachPortion)
  67. {
  68. var dividedElement = elementToDivide.Substring(i, eachPortion);
  69. dividedElements.Add(dividedElement);
  70. }
  71.  
  72. elements.InsertRange(index, dividedElements);
  73. }
  74. else
  75. {
  76. var remainder = elementToDivide.Length % portions;
  77. var smallerGroups = portions - 1;
  78. var biggerElementCount = elementToDivide.Length - smallerGroups * remainder;
  79.  
  80. var indexer = 0;
  81. for (int i = 0; i < smallerGroups; i++)
  82. {
  83. var dividedElement = elementToDivide.Substring(indexer, remainder);
  84. indexer += remainder;
  85. dividedElements.Add(dividedElement);
  86. }
  87.  
  88. var biggerElement = elementToDivide.Substring(smallerGroups * remainder, biggerElementCount);
  89. dividedElements.Add(biggerElement);
  90.  
  91. elements.InsertRange(index, dividedElements);
  92. }
  93. }
  94. }
  95.  
  96. Console.WriteLine(string.Join(" ", elements));
  97. }
  98. }
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement