Loading...
vobreshkov avatar vobreshkov 3 Точки

03. Programming Fundamentals Mid Exam Retake - Problem - 02. Shoot for the Win

Здравейте,

Затрудни ме задачата от 03. Programming Fundamentals Mid Exam Retake - Problem - 02. Shoot for the Win, Judge ми дава 30/100. Ще може ли да получа отнякъде входните данни, които ми подава Judge и респективно правилните отговори към всеки един от тях, за да се ориентирам къде бъркам.

Прилагам и линк към кода: https://pastebin.com/JvU97ZuU

Благодаря Предварително. 

0
Fundamentals Module 25/10/2021 16:47:01
Axiomatik avatar Axiomatik 2422 Точки
Best Answer

Refactor !!!

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

namespace Problem_2___Shoot_for_the_Win_03_Mid_Exam_Retake
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> targets = Console.ReadLine()
                .Split()
                .Select(int.Parse)
                .ToList();

            string index = Console.ReadLine();
            int count = 0;

            while (index != "End")
            {
                int newIndex = int.Parse(index);

                //if (newIndex > targets.Count - 1)
                if (newIndex < 0 || newIndex >= targets.Count || targets[newIndex] == -1)
                {
                    index = Console.ReadLine();
                    continue;
                }

                int oldValue = targets[newIndex];
                //int oldValue = targets[newIndex];
                //targets.RemoveAt(newIndex);
                //targets.Insert(newIndex, -1);

                targets[newIndex] = -1;
                count++;
                for (int i = 0; i <= targets.Count - 1; i++)
                {
                    if (targets[i] == -1)
                    {
                        continue;
                    }

                    if (oldValue < targets[i])
                    {

                        int newValue = targets[i] - oldValue;
                        targets[i] = newValue;


                        //targets.RemoveAt(i);
                        //targets.Insert(i, newValue);
                    }
                    else if (oldValue >= targets[i] && targets[i] != -1)
                    {
                        int newValue = oldValue + targets[i];
                        targets[i] = newValue;

                        //targets.RemoveAt(i);
                        //targets.Insert(i, newValue);
                    }

                }
                index = Console.ReadLine();
            }

            Console.Write($"Shot targets: {count} -> {string.Join(" ", targets)}");
        }
    }
}

 

0
vobreshkov avatar vobreshkov 3 Точки

Здравейте,

Благодаря за бързия отговор. Виждам че значително сте намалили кода по замяната на стойностите, и станал по прегледен.

Ще се радвам, ако ми обясните по-подробно, къде е грешката в моите писания.

Благодаря Ви предварително

 

0
Axiomatik avatar Axiomatik 2422 Точки
using System;
using System.Collections.Generic;
using System.Linq;

namespace Problem_2___Shoot_for_the_Win_03_Mid_Exam_Retake
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> targets = Console.ReadLine()
                .Split()
                .Select(int.Parse)
                .ToList();

            string index = Console.ReadLine();
            int count = 0;

            while (index != "End")
            {
                int newIndex = int.Parse(index);

                //if (newIndex > targets.Count - 1)
                // Every time you receive an index, you need to shoot the target on that index, 
                // if it is possible. + you can't shoot a target, which is already shot.
                if (newIndex < 0 || newIndex >= targets.Count || targets[newIndex] == -1)
                {
                    // new index is taken from the Console and continue triggers a
                    // new iteration in the while loop
                    index = Console.ReadLine();
                    continue;
                }

                int oldValue = targets[newIndex];
                //int oldValue = targets[newIndex];
                //targets.RemoveAt(newIndex);
                //targets.Insert(newIndex, -1);

                targets[newIndex] = -1;
                count++;
                for (int i = 0; i <= targets.Count - 1; i++)
                {
                    if (targets[i] == -1)
                    {
                        // Keep in mind that you can't shoot a target, which is already shot. 
                        // You also can't increase or reduce a target, which is considered shot.
                        continue;
                    }

                    if (oldValue < targets[i])
                    {

                        int newValue = targets[i] - oldValue;
                        // targets[i] directly modifies value in List collection
                        targets[i] = newValue;


                        //targets.RemoveAt(i);
                        //targets.Insert(i, newValue);
                    }
                    else if (oldValue >= targets[i] && targets[i] != -1)
                    {
                        int newValue = oldValue + targets[i];
                        targets[i] = newValue;

                        //targets.RemoveAt(i);
                        //targets.Insert(i, newValue);
                    }

                }
                index = Console.ReadLine();
            }

            Console.Write($"Shot targets: {count} -> {string.Join(" ", targets)}");
        }
    }
}

 

0
25/10/2021 21:01:43
VasilKos avatar VasilKos 17 Точки

Здравейте, не намерих решение на JAVA, и ще се радвам да разяснение. 

Това е кодът.Shoot for the win - Pastebin.com

2рият вход излиза, но проблемът е с първия вход.

4упи се на ред 28, при подаване за втори път на индекс. ( да, той е извън size-a, но преди това има проверка за невалиден индекс.)

Мерси

1
11/11/2021 21:22:04
vobreshkov avatar vobreshkov 3 Точки

Благодаря, за поясненията !

1
Frankie2866 avatar Frankie2866 -1 Точки

Thanks to this article I can learn more. Expand my knowledge and abilities. mcdvoice

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