Loading...
AnastasiyaG avatar AnastasiyaG 4 Точки

10.LadyBugs , C#

Здравейте, разбирачи:),

може ли някой да ми погледне кода с логиката и да ми каже къде бъркам:(.. и кои проверки изпускам..

https://pastebin.com/6TMLtpwd

 

условието е ясно: 

1.*LadyBugs

You are given a field size and the indexes of ladybugs inside the field. After that on every new line until the "end" command is given, a ladybug changes its position either to its left or to its right by a given fly length.

A command to a ladybug looks like this: "0 right 1". This means that the little insect placed on index 0 should fly one index to its right. If the ladybug lands on a fellow ladybug, it continues to fly in the same direction by the same fly length. If the ladybug flies out of the field, it is gone.

For example, imagine you are given a field with size 3 and ladybugs on indexes 0 and 1. If the ladybug on index 0 needs to fly to its right by the length of 1 (0 right 1) it will attempt to land on index 1 but as there is another ladybug there it will continue further to the right by additional length of 1, landing on index 2. After that, if the same ladybug needs to fly to its right by the length of 1 (2 right 1), it will land somewhere outside of the field, so it flies away:

If you are given ladybug index that does not have ladybug there, nothing happens. If you are given ladybug index that is outside the field, nothing happens.

Your job is to create the program, simulating the ladybugs flying around doing nothing. At the end, print all cells in the field separated by blank spaces. For each cell that has a ladybug on it print '1' and for each empty cells print '0'. For the example above, the output should be '0 1 0'.

Input

  • On the first line you will receive an integer - the size of the field
  • On the second line you will receive the initial indexes of all ladybugs separated by a blank space. The given indexes may or may not be inside the field range
  • On the next lines, until you get the "end" command you will receive commands in the format: "{ladybug index} {direction} {fly length}"

Output

  • Print the all cells within the field in format: "{cell} {cell} … {cell}"
    • If a cell has ladybug in it, print '1'
    • If a cell is empty, print '0'

Constrains

  • The size of the field will be in the range [0 … 1000]
  • The ladybug indexes will be in the range [-2,147,483,647 … 2,147,483,647]
  • The number of commands will be in the range [0 … 100]
  • The fly length will be in the range [-2,147,483,647 … 2,147,483,647]

Examples

Input

Output

Comments

3

0 1

0 right 1

2 right 1

end

0 1 0

1 1 0 - Initial field

0 1 1 - field after "0 right 1"

0 1 0 - field after "2 right 1"

 

Input

Output

 

Input

Output

3

0 1 2

0 right 1

1 right 1

2 right 1

end

0 0 0

 

5

3

3 left 2

1 left -2

end

0 0 0 1 0

 

Тагове:
0
Module: C# Advanced
kkaraivanov avatar kkaraivanov 486 Точки

Здравей. Най-лесно ще ти бъде ако разделиш задачата в методи за летене наляво и надясно. Също така имай в предвид отрицателните числа, т.е. те са за летене в обратна посока на дадената команда. Кода става двойно по дълъг, но пък грешките които би могло да се допуснат лесно се откриват. Ако искеш щи ти пратя моето решение да сравняваш.

0
AnastasiyaG avatar AnastasiyaG 4 Точки

Задачата е за масиви и още методи не са ми ясни.. blush

0
kkaraivanov avatar kkaraivanov 486 Точки

Ето моето решение. Всички проверки по условието съм си ги описал и ще се ориентираш какво пропускаш в твоето решение.

using System;
using System.Linq;

namespace LadyBugs
{
    class Program
    {
        static void Main(string[] args)
        {
            int sizeOfTheField = int.Parse(Console.ReadLine());
            int[] initialIndexes = Console
                .ReadLine()
                .Split()
                .Select(int.Parse)
                .ToArray();
            int[] playground = new int[sizeOfTheField]; //игрално поле с калинки
            foreach (var newIndex in initialIndexes)
            {
                if (newIndex >= 0 && newIndex < playground.Length)
                {
                    playground[newIndex] = 1;
                }
            }

            string command = string.Empty;
            while ((command = Console.ReadLine()) != "end")
            {
                int start = int.Parse(command.Split()[0]); // позиция от която взимаме калинка
                int end = int.Parse(command.Split()[2]); // брой позиции за изместване
                string direction = command.Split()[1]; // посока на движение

                if (ChekPosition(start, end, playground))
                {
                    if (playground[start] == 1)
                    {
                        if (direction == "left")
                        {
                            playground = LadybugFlightLeft(start, end, playground);
                        }
                        else if (direction == "right")
                        {
                            playground = LadybugFlightRight(start, end, playground);
                        }
                    }
                }

            }

            Console.WriteLine(string.Join(" ", playground));
        }

        static bool ChekPosition(int startPosition, int endPosition, int[] playground)
        {
            bool result = false;
            // 1) ако калинката е извън полето = false
            if ((startPosition <= playground.Length - 1 && startPosition >= 0))
                result = true;
            else
                result = false;

            return result;
        }

        static int[] LadybugFlightLeft(int startPosition, int endPosition, int[] playground)
        {
            int ladybugFlightLeft = startPosition - endPosition; // стъпка наляво
            int flightToNewIndex = 0;

            // проверявам с колко позиции калинката ще лети
            // 1) ако позициите са = 0, връщам като резултат същия масив
            if (endPosition == 0)
            {
                return playground;
            }
            // 2) ако позициите са < 0, връщам като резултат масива за летене надясно
            if (endPosition < 0)
            {
                playground = LadybugFlightRight(startPosition, Math.Abs(endPosition), playground);
                return playground;
            }
            // ако калинката лети в границите на масива
            if (ladybugFlightLeft >= 0 && ladybugFlightLeft < playground.Length)
            {
                // 1) ако новата позиция в масива е свободна
                if (playground[ladybugFlightLeft] == 0)
                {
                    flightToNewIndex = ladybugFlightLeft; // присвоявам стойността като нов индекс
                    playground[startPosition] = 0; // освобождавам индекса от който калинката тръгва
                    playground[flightToNewIndex] = 1; // поставям калинката на новата бозиция
                }
                // 2) ако новата позиция в масива е заета от друга калинка 
                else
                {
                    flightToNewIndex = -1; // изваждам променливата за нова позиция извън границите на масива

                    // обхождам масива със посочената стъпка от позицията на калинката до началото на масива
                    // и проверявам за свободен индекс - т.е. == 0
                    for (int i = ladybugFlightLeft; i >= 0; i -= endPosition)
                    {
                        // ако намеря свободен индекс
                        if (playground[i] != 1)
                        {
                            flightToNewIndex = i; // присвоявам стойността като нов индекс
                            playground[startPosition] = 0; // освобождавам индекса от който калинката тръгва
                            playground[flightToNewIndex] = 1; // поставям калинката на новата бозиция
                            break; // излизам от цикъла
                        }
                    }
                    // ако стойността на новия индек остане извън границите на масива
                    // калинката е отлетяла и нейната позиция остава празна
                    if (flightToNewIndex < 0)
                    {
                        playground[startPosition] = 0; // освобождавам индекса от който калинката тръгва
                    }
                }
            }
            // ако калинката лети извън границите на масива
            // калинката е отлетяла и нейната позиция остава празна
            else
                playground[startPosition] = 0; // освобождавам индекса от който калинката тръгва

            return playground;
        }

        static int[] LadybugFlightRight(int startPosition, int endPosition, int[] playground)
        {
            int ladybugFlightLeft = startPosition + endPosition; // стъпка надясно
            int flightToNewIndex = 0;

            // проверявам с колко позиции калинката ще лети
            // 1) ако позициите са = 0, връщам като резултат същия масив
            if (endPosition == 0)
            {
                return playground;
            }
            // 2) ако позициите са < 0, връщам като резултат масива за летене наляво
            if (endPosition < 0)
            {
                playground = LadybugFlightLeft(startPosition, Math.Abs(endPosition), playground);
                return playground;
            }
            // ако калинката лети в границите на масива
            if (ladybugFlightLeft >= 0 && ladybugFlightLeft < playground.Length)
            {
                // 1) ако новата позиция в масива е свободна
                if (playground[ladybugFlightLeft] == 0)
                {
                    flightToNewIndex = ladybugFlightLeft; // присвоявам стойността като нов индекс
                    playground[startPosition] = 0; // освобождавам индекса от който калинката тръгва
                    playground[flightToNewIndex] = 1; // поставям калинката на новата бозиция
                }
                // 2) ако новата позиция в масива е заета от друга калинка 
                else
                {
                    flightToNewIndex = -1; // изваждам променливата за нова позиция извън границите на масива

                    // обхождам масива със посочената стъпка от позицията на калинката до края на масива
                    // и проверявам за свободен индекс - т.е. == 0
                    for (int i = ladybugFlightLeft; i < playground.Length; i += endPosition)
                    {
                        // ако намеря свободен индекс
                        if (playground[i] != 1)
                        {
                            flightToNewIndex = i; // присвоявам стойността като нов индекс
                            playground[startPosition] = 0; // освобождавам индекса от който калинката тръгва
                            playground[flightToNewIndex] = 1; // поставям калинката на новата бозиция
                            break; // излизам от цикъла
                        }
                    }
                    // ако стойността на новия индек остане извън границите на масива
                    // калинката е отлетяла и нейната позиция остава празна
                    if (flightToNewIndex < 0)
                    {
                        playground[startPosition] = 0; // освобождавам индекса от който калинката тръгва
                    }
                }
            }
            // ако калинката лети извън границите на масива
            // калинката е отлетяла и нейната позиция остава празна
            else
                playground[startPosition] = 0; // освобождавам индекса от който калинката тръгва

            return playground;
        }
    }
}

 

0
AnastasiyaG avatar AnastasiyaG 4 Точки

Огромно Благодря!!!

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