02. Ladybugs
Здравейте колеги, от няколко часа мъча тази задача. Джъджа дава 50 точки. Останалите 5 теста гърмят с грешка от вида: "Грешен отговор". Ще съм ви много благодарен, ако ударите едно рамо.
Ето и кода:
using System;
using System.Collections.Generic;
using System.Linq;
class LadyBugs
{
static void Main()
{
int size = int.Parse(Console.ReadLine());
int[] indexes = Console.ReadLine().Split().Select(int.Parse).ToArray();
string[] command = Console.ReadLine().Split();
int[] initialField = new int[size];
foreach (var index in indexes)
{
if (InRange(index, size))
{
initialField[index] = 1;
}
}
while (command[0] != "end")
{
int index = int.Parse(command[0]);
if (InRange(index, size))
{
switch (command[1])
{
case "right":
initialField = GetFieldRight(initialField, size, command);
break;
case "left":
initialField = GetFieldLeft(initialField, size, command);
break;
}
}
command = Console.ReadLine().Split();
}
Console.WriteLine($"{string.Join(" ", initialField)}");
}
private static bool InRange(int i, int size)
{
bool isTrue = true;
if (i >= size || i < 0)
{
isTrue = false;
}
return isTrue;
}
private static int[] GetFieldLeft(int[] initialField, int size, string[] command)
{
int index = int.Parse(command[0]);
int duljina = int.Parse(command[2]);
if (initialField[index] == 0 || !InRange(index, size))
{
return initialField;
}
initialField[index] = 0;
for (int i = index - duljina; i > 0; i -= duljina)
{
if (initialField[i] == 0)
{
initialField[i] = 1;
break;
}
else
{
continue;
}
}
return initialField;
}
private static int[] GetFieldRight(int[] initialField, int size, string[] command)
{
int index = int.Parse(command[0]);
int duljina = int.Parse(command[2]);
if (initialField[index] == 0 || !InRange(index, size))
{
return initialField;
}
initialField[index] = 0;
for (int i = index + duljina; i < initialField.Length; i += duljina)
{
if (initialField[i] == 0)
{
initialField[i] = 1;
break;
}
else
{
continue;
}
}
return initialField;
}
}