8. *Anonymous Threat
Здравейте, това ми е задачата - https://pastebin.com/jm4XR5zD
И кода, който ми е 90/100 - https://pastebin.com/08cuYK1z
Judge - https://judge.softuni.bg/Contests/Compete/Index/1211#7
Моля, за малко помощ, ако обичате!
Здравейте, това ми е задачата - https://pastebin.com/jm4XR5zD
И кода, който ми е 90/100 - https://pastebin.com/08cuYK1z
Judge - https://judge.softuni.bg/Contests/Compete/Index/1211#7
Моля, за малко помощ, ако обичате!
Здравей!
Имаше няколко излишни проверки и цикли а и devide-a го коригирах. Не е необходимо да връщаш List-a тъй като е референтен тип.
Може да разгледаш кода https://pastebin.com/s6GHWFJU
Благодаря ти!
Формулата беше много хитър начин :) и функицията ххххх.Substring(ххххх) ще я разгледам :)
Здравейте, може ли малко помощ за тази задача: Judge 60/100 , а на дадените инпути, аутпутите ми излизат коректно, но Judge дава RunTime Error.
Много е странно, че имам мое решение, което дава 90/100, но без да излизат правилните аутпути на дадените инпути. Когато ги направих да си съответват ми даде по-малко точки- 60 /100. Въпреки това решението с по-малкото точки за мен е по-логичното, поне за сега. Така че пействам него.
using System;
using System.Collections.Generic;
using System.Linq;
namespace listExer
{
class MainClass
{
public static void Main(string[] args)
{
List<string> text = Console.ReadLine().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();
string command = Console.ReadLine();
while (command != "3:1")
{
string[] commandArray = command.Split();
if (commandArray[0] == "merge")
{
int startIndex = int.Parse(commandArray[1]);
int startIndexInBound = Math.Max(startIndex, 0);
startIndexInBound = Math.Min(startIndex, text.Count-1);
int endIndex = int.Parse(commandArray[2]);
int endIndexInBound = Math.Max(0, endIndex);
endIndexInBound = Math.Min(text.Count - 1, endIndex);
string concat = string.Empty;
for (int i = startIndexInBound; i <= endIndexInBound; i++)
{
concat += text[i];
}
text.RemoveRange(startIndexInBound, endIndexInBound - startIndexInBound + 1);
text.Insert(startIndexInBound, concat);
}
else if (commandArray[0] == "divide")
{
int index = int.Parse(commandArray[1]);
int indexInBound = Math.Max(0, index);
indexInBound = Math.Min(text.Count - 1, index);
int partitions = int.Parse(commandArray[2]);
string word = text[indexInBound];
int stringLengthToAdd = word.Length / partitions;
List<string> listAfterDivide = new List<string>();
int startIndex = 0;
for (int i = 0; i < partitions; i++)
{
if (i == partitions - 1)
{
listAfterDivide.Add(word.Substring(startIndex, word.Length - startIndex));
}
else if (i < partitions - 1)
{
listAfterDivide.Add(word.Substring(startIndex, stringLengthToAdd));
startIndex += stringLengthToAdd;
}
}
text.RemoveAt(indexInBound);
text.InsertRange(indexInBound, listAfterDivide);
}
command = Console.ReadLine();
}
Console.WriteLine(string.Join(" ", text));
}
}
}
Сама си открих грешката, щастлива съм! :)
Ето малко по-различен начин как можем да направим така, че да не излизаме от границите на масива, без да използваме допълнителни if/else проверки:
int startIndex = int.Parse(commandArray[1]);
int startIndexInBound = Math.Max(startIndex, 0);
startIndexInBound = Math.Min(startIndexInBound, text.Count-1);
int endIndex = int.Parse(commandArray[2]);
int endIndexInBound = Math.Max(0, endIndex);
endIndexInBound = Math.Min(text.Count - 1, endIndexInBound);
Точно подчертаните променливи ми бяха проблем, че вместо тях бях сложила съответно startIndex и endIndex, но трябва да бъде променливата, която последо сме записали. И е важно условие първо да се използва Math.Max и после Math.Min. В обратен ред ако са програмата се чупи. Чрез тези няколко презаписвания аз гарантирам, че винаги въведеното числото ще ми бъде по-голямо от 0 и по-малко от дължината на листа.
Не знам дали това е най-бързото решение, но лично за мен изглежда най-кратко и ясно... най-простичко и е първото, което ми хрумна.
И кода ми 100/100: https://pastebin.com/0zhWAwUs