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
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
teodor_valkov avatar teodor_valkov 11 Точки

Да, така е.. А в случая на първата задача - Rabbit Hole - защо:

  • като преброим ръчно по самата картинка, ако сме на "индекс 2" и трябва да се преместим 10 пъти наляво, превъртайки два пъти колекцията, се озоваваме на последния "индекс 6"
  • като ползваме следния синтаксис, се озоваваме на "индекс 1" и Judge дава 100 точки за задачата ( в случая от снимката: 2 - (10%7 = 3) => 1 след превръщането в абсолютна стойност)

                   case "left":
                        position = position - (jumps % obstacles.Count);
                        position = Math.Abs(position);
                   break;

https://imagebin.ca/v/3LHT9ZWqAfUj

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