08. Anonymous Threat :: 80/100
Привет!
Нуждая се от малко помощ по тази задача: ◄ Lists-Exersice :: 08. Anonymous Threat ►
Успях да я докарам до 80/100 в Judge, но явно има някакви гранични случаи за които логиката ми не работи. Тестове #4 и #8 не минават. Въпреки, че многократно дебъгвах и сравнявах с чужд код, който уж има подобна логика, не успях да открия причината.
Моля, ако имате желание, хвърлете едно око на кода по-долу. Къде греша?
Предварително благодаря!
List<string> input = Console.ReadLine().Split(" ", StringSplitOptions.RemoveEmptyEntries)
.ToList();
string command;
while ((command = Console.ReadLine()) != "3:1")
{
string[] cmd = command.Split(" ", StringSplitOptions.RemoveEmptyEntries)
.ToArray();
if (cmd[0] == "merge")
{
int start = int.Parse(cmd[1]), end = int.Parse(cmd[2]);
string temp = "";
if ((start < 0 || start > input.Count - 1) &&
(end < 0 || end > input.Count - 1))
{
continue;
}
else if (start < 0)
{
start = 0;
}
else if (end > input.Count - 1)
{
end = input.Count - 1;
}
for (int i = start; i <= end; i++)
{
temp += input[i];
}
input.RemoveRange(start, end - start + 1);
input.Insert(start, temp);
}
else if (cmd[0] == "divide")
{
int idx = int.Parse(cmd[1]), parts = int.Parse(cmd[2]);
string temp = input[idx]; //Chosen string for dividing
if (parts > temp.Length)
{
parts = temp.Length;
}
string[] splited = new string[parts]; //result of splitting
int partLength = temp.Length / parts; //symbols per part
int reminder = temp.Length % parts; //for addition to the last part
for (int i = 0; i < parts; i++)
{
for (int j = 0; j < partLength; j++)
{
splited[i] += temp[i * partLength + j];
}
}
int reminderStartIx = parts * partLength;
for (int i = reminderStartIx; i < reminderStartIx + reminder; i++)
{
splited[splited.Length - 1] += temp[i];
}
input.RemoveAt(idx); //Removing devided element
input.InsertRange(idx, splited);
}
}
Console.WriteLine(String.Join(" ", input));