Loading...
alexanderPC avatar alexanderPC 2 Точки

02. Japanese Roulette - Array and List Algorithms - More Exercises

Здравейте колеги!
Въпросът ми е, няма ли грешка в резултата на 2-рия нулев тест?
 

Условие: https://softuni.bg/trainings/resources/officedocument/12962/exercise-problem-descriptions-programming-fundamentals-exended-january-2017

Input

Output

0 0 1 0 0 0

1,Right 2,Left 5,Left

 

Game over! Player 1 is dead.

Не трябва ли да е Player 2 is dead?

 Ако съм прав и има грешка, то има ли грешка и във останалите тестове, които не са нулеви?

А ако греша, ще се радвам ако ми помогнете с кода

Ето го най-успешният ми до сега (40/10):

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace JapaneseRoulette
{
    class Program
    {
        static void Main(string[] args)
        {
            var revolver = Console.ReadLine().Split(' ').Select(int.Parse).ToList();
            var players = Console.ReadLine().Split(' ').ToList();
            string left = "Left";
            string right = "Right";
            var bullet = 0; ;
            var position = 2;
            var playerNumber = -1;
            foreach (var bulletHole in revolver)
                if (bulletHole > 0)
                    bullet = bulletHole;
            for (int i = 0; i < players.Count; i++)
            {
                var player = players[i].Split(',').ToArray();
                var spins = int.Parse(player[0]);
                var direction = player[1];
                if (direction == left)
                {
                    while (spins > 0)
                    {
                        position++;
                        spins--;
                        if (position > revolver.Count - 1)
                            position = 0;
                    }
                }
                else if (direction == right)
                {
                    while (spins > 0)
                    {
                        position--;
                        spins--;
                        if (position < 0)
                            position = revolver.Count - 1;
                    }
                }
                if (revolver[position] == bullet)
                {
                    playerNumber = i;
                    break;
                }
            }
            if (playerNumber < 0)
                Console.WriteLine("Everybody got lucky!");
            else
            {
                Console.WriteLine("Game over! Player {0} is dead.", playerNumber);
            }
        }
    }
}

0
Programming Fundamentals
kosyokosev avatar kosyokosev 27 Точки
Best Answer

Здравей колега,

Тестът е верен,пропускаш че след всеки изтрел барабана се мести веднъж на дясно.

0
alexanderPC avatar alexanderPC 2 Точки

Много благодаря! Наистина това го бях изпуснал, след като добавих 3 реда код за завъртането след дърпането на спусъка веднага ми изкара 100/100

А, ако някой се нуждае, ето го и кода (ограденият в жълто код е добавения):

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace JapaneseRoulette
{
    class Program
    {
        static void Main(string[] args)
        {
            var revolver = Console.ReadLine().Split(' ').Select(int.Parse).ToList();
            var players = Console.ReadLine().Split(' ').ToList();
            string left = "Left";
            string right = "Right";
            var bullet = 0; ;
            var position = 2;
            var playerNumber = -1;
            foreach (var bulletHole in revolver)
                if (bulletHole > 0)
                    bullet = bulletHole;
            for (int i = 0; i < players.Count; i++)
            {
                var player = players[i].Split(',').ToArray();
                var spins = int.Parse(player[0]);
                var direction = player[1];
                if (direction == left)
                {
                    while (spins > 0)
                    {
                        position++;
                        spins--;
                        if (position > revolver.Count - 1)
                            position = 0;
                    }
                }
                else if (direction == right)
                {
                    while (spins > 0)
                    {
                        position--;
                        spins--;
                        if (position < 0)
                            position = revolver.Count - 1;
                    }
                }
                if (revolver[position] == bullet)
                {
                    playerNumber = i;
                    break;
                }
                position--;
                if (position < 0)
                    position = revolver.Count - 1;
            }
            if (playerNumber < 0)
                Console.WriteLine("Everybody got lucky!");
            else
            {
                Console.WriteLine("Game over! Player {0} is dead.", playerNumber);
            }
        }
    }

}

1
thereishope avatar thereishope 77 Точки

INPUT:

0 0 1 0 0 0

1,Right 2,Left 5,Left

OUTPUT: Game over! Player 1 is dead.

Добре.Барабана е на позиция 0, Първия играч(индекс 0) го завърта с 1 на дясно, става на позиция 1, стреля и се завърта с още една позиция, тоест барабана е на индекс 2(където е куршума).Някой може ли да ми обясни как, Втория играч ( индекс 1) завърта на ляво барабана с 2 ( тоест от индекс 2 отива на 0 и умира?) ???? Знам,че някаде бъркам, но не ми е ясно как играч 1 умира? ?? :((((((((( Ето и грешно решение... http://pastebin.com/7kQCAaQx Изобщо не ми е ясно каква е логиката :XXX

 

0
07/03/2017 05:24:36
morgan avatar morgan 30 Точки

Прочети в тази тема коментарите. Опитах се да обясня, надявам се да ти помогне.

1
NonaG avatar NonaG 111 Точки

Защо под дясно и ляво разбираме различни движения на индекса на куршума.... Изобщо, спирам с тази задача, докато някой не обясни условието. Въпреки че направих и вариант с 50 точки, реално ето това решение отразява най-точно начина, по който аз разбирам условието /30т./: http://pastebin.com/2dutqDK1

Какво изпускам?

0
anestieva avatar anestieva 0 Точки

Здравейте,

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

Кода: http://pastebin.com/rFDPzqhA

1
alexanderPC avatar alexanderPC 2 Точки

Мисля че при action == right формулата за изчисление на currentIndex не е правилна. Ако си спомням добре тази формула я използва преподавателят във видеото за предната задача, но там currentIndex трябваше да продължи от първият индекс(т.е. 0) а тук ако стигне до 0 трябва да започне от последния инекс (5) и да върви назад. На пръв поглед, само тук виждам грешка.

1
teodor_valkov avatar teodor_valkov 11 Точки

Някой може ли да ми каже защо:

 

Tова решение на задачата (Rabbit Hole) дава пълен брой точки единствено, ако при case:"Left" се ползва проверка с Math.Abs, но не и със закоментираните if-else клаузи?

Докато за следващата задача от темата (Japanese Roulette) - е обратното. Нейното решение дава пълен брой точки единствено, ако при case:"Left" се ползва проверка за отрицателна позиция с if-else клаузи, но не и със закоментирания ред с Math.Abs? 

 

Решенията са напълно аналогични, просто не мога да разбера защо ако се обърнат местата на закоментираните редове/проверки не се взимат пълния брой точки отново; не мога да разбера какви тестове се улавят в единия случай и какви тестове се пропускат в другия:

 

(Rabbit Hole)

https://pastebin.com/GF3xZ3Nz

 

(Japanese Roulette)

https://pastebin.com/RQVLmzzK

 

0
03/05/2017 19:27:53
spzvtbg avatar spzvtbg 581 Точки

посоките на въртене при японската се върти само в едната посока

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