Loading...
CvetomirShterev avatar CvetomirShterev 5 Точки

03. Moving Target

Колеги ,започнах да решавам задачите от mid exam . Стигнал съм до Programming Fundamentals Mid Exam Retake - 07 April 2020. Задача 03. Moving Target . https://pastebin.com/WWUhFQE3Това е кодът ми .Джъдж дава 80/100. Не мога да си открия грешката ,въпреки многото ми опити да направя това . Може ли някой да помогне ? Благодаря предварително!

Тагове:
0
Fundamentals Module 26/05/2020 23:32:30
nickwork avatar nickwork 657 Точки
Best Answer

Привет колега... страшно много си си усложнил живота с този начин на решаване.Исках да ти оправя кода от начало, но е доста заплетен и просто реших да пренапиша задачата. Разгледай това решение, пробвах го, дава 100/100.

Методите, които си направил, не са много ок...особенно с тези реф стойности на простите типове данни и с това, че приемта твърде много аргументи...всички това е излишно и само те обърква, ако искаш да вкараш всичките тези аргументи в метод просто подай на метода целият масив (string[] tokens ) и после в самият метод вади стойностите..Другото което забелязох е логиката на самата задача малко си я завъртял...Разгледай решението...ако имаш въпроси питай, с удоволствие бих ти помогнал :) , иначе good job за старанието

 

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;


class Program
{
    static void Main()
    {
        List<int> targets = Console.ReadLine()
            .Split(" ", StringSplitOptions.RemoveEmptyEntries)
            .Select(int.Parse)
            .ToList();


        while (true)
        {
            string input = Console.ReadLine();

            if (input == "End")
            {
                break;
            }

            string[] commandInput = input.Split().ToArray();

            string command = commandInput[0];
            int index = int.Parse(commandInput[1]);

            if (command == "Shoot")
            {
                int power = int.Parse(commandInput[2]);

                if (index >= 0 && index < targets.Count)
                {
                    targets[index] -= power;

                    if (targets[index] <= 0)
                    {
                        targets.RemoveAt(index);
                    }
                }
            }
            else if (command == "Add")
            {
                int value = int.Parse(commandInput[2]);

                if (index >= 0 && index < input.Length)
                {
                    targets.Insert(index, value);
                }
                else
                {
                    Console.WriteLine("Invalid placement!");
                }
            }
            else if (command == "Strike")
            {
                int radius = int.Parse(commandInput[2]);

                if (index - radius >= 0 && index + radius < targets[targets.Count - 1])
                {
                    targets.RemoveRange(index - radius, radius * 2 + 1);
                }
                else
                {
                    Console.WriteLine($"Strike missed!");
                }
            }
        }

        Console.WriteLine(string.Join("|", targets));

    }
}

0
CvetomirShterev avatar CvetomirShterev 5 Точки

Благодаря колега! Не само с методите съм си усложнил живота ,ами на командата Strike излишно сложна логика съм използвал . А аз си мислех ,че съм объркал нещо със условието ,където пише ,че няма да има команда Strike която да премахне целия списък. Добре е ,че има форум .

0
27/05/2020 09:47:27
kaninski avatar kaninski 0 Точки

Привет! Въпрос по проверката за команда Add 

  • Insert a target with the received value at the received index, if it exist. If not, print: "Invalid placement!"

                 if (index >= 0 && index < input.Length)
                {
                    targets.Insert(index, value);
                }

Защо проверката е за дължината на командата, а не за дължината на листа?

Така за всеки индекс над 8 ще дава "Invalid placement!"

 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.