Професионална програма
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