Софтуерно Инженерство
Loading...
+ Нов въпрос
dobroslav.atanasov avatar dobroslav.atanasov 245 Точки

Проблем със задача: Japanese Roulette

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

Моля за малко помощ за следнта задача:

  Japanese Roulette

Russian roulette is a game of chance where a single player places a single bullet in a revolver, spins the cylinder, points the muzzle against their head and pulls the trigger. Japanese people however are not that brave (crazy) so they play with toy guns.

Every player can spin the cylinder with different strength. The numeric representation of the strength is with how many places they can move the bullet while spinning. Note that the cylinder has only 6 places but the strength could be much more than 6 due to several rotations of the cylinder. 

You are given an array of integers which represent the cylinder of the revolver where 0 means empty and 1 represents the bullet. There is exactly one bullet in the cylinder.

You will receive another array, this time of strings where every index is a different player and every value is the strength of the player and the direction to which the player rotates the cylinder.

The elements in the array will be separated by spaces. The power and the direction will be separated by a comma (”,”) e.g.: “111,Left”.

The muzzle IS at index 2 of the cylinder. If the element at that position is 1, the current player loses the game.

Note! After a player pulls the trigger the cylinder spins with one position to the right. The next player starts spinning with the new state of the cylinder.

Assume that the order of the players is according to their places in the array. The player with index 0 shots first, index 1-second and so on…

Your task is to go through all players, and see if anyone will shoot himself with the toy gun.

Input / Constrains

·         First line – 6 integers, separated by a space (only 0 or 1, where 1 once and 0 five times) which represent the cylinder.

·         Second line –strings, separated by a space, representing the strength and the direction to which every player rotates. The strength and direction for a single player are separated by a comma.

Output

·         If someone loses the game you should print on the console “Game over! Player {index} is dead.”, where index is the index of the player in the array. The game ends and so does your program.

·         If no one lost, you should just print: “Everybody got lucky!”

Examples

Input

Output

0 0 0 0 1 0

10,Right 11,Left 140,Right 1,Left 30,Right

 

Game over! Player 0 is dead.

Input

Output

0 0 1 0 0 0

1,Right 2,Left 5,Left

 

Game over! Player 1 is dead.

 

 

Ето го и моето решение, но Judge ми дава само 20 точки.

http://pastebin.com/d7xQ3XAe

Тагове:
0
Technology Fundamentals
HristoGrigorov avatar HristoGrigorov 8 Точки

Аз я докарах до 50/100 точки, но не съм много на яско как точно става броенето при първия пример. Как точно изкараха че player 0 e dead, при положение, че като се завърти с 10 трябва да спре на индекс 0, а не на индекс 4. 

Моля някой да обясни какво пропускам

0
dobroslav.atanasov avatar dobroslav.atanasov 245 Точки

След цял ден мислене го докарах до 70/100. Ако пише Right почни да броиш на ляво и ще излезнат така както са ги дали.

0
HristoGrigorov avatar HristoGrigorov 8 Точки

Това и аз го видях, но нали при райт идеята е да въртиш на дясно, не на ляво. 

Би било добре някои със 100т. да обясни

0
morgan avatar morgan 30 Точки

Хора, четете си добре условията. 

Значи: в момента позицията на куршума в барабана е първия подаден масив, т.е. куршума е на индекс 2.

Та хваща го първия играч, който обаче е с индекс 0, т.е. ирач 0,  и го завърта с едно надясно (така е по условие в примера). Индексът на куршума става 3. БУМ! Стреля и... нищо не се случва, понеже цевта е на индекс 2. След изстрел обаче, барабанът се завърта още веднъж надясно (абе вие не сте ли си играли с пистолети като  малки:)). Т.е. индексът на куршума е вече 4.

Втори играч, с индекс 1, т.е. играч 1 -  завърта с две наляво (куршумът отива на индекс 2), стреля и... дава фира. Та играч номер 1, понеже това му е индекса, е мъртъв. Барабанът при изстрела се завърта пак надясно, но... вече няма куршум, т.е. играта свършва и дори не е необходимо третия играч, с индекс 2 да стреля - брейкваш цикъла.

Надявам се схванахте идеята.

 

0
kosyokosev avatar kosyokosev 27 Точки

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

Ето моето решение(предопреждавам,че то непремества кършума от първоначалната му позиция в масива,а само пресмята вероятната му след завъртане)-

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

namespace _2.Japanese_Roulette
{
    class Program
    {
        static void Main(string[] args)
        {
            var cylinder = Console.ReadLine().Split(' ').Select(int.Parse).ToList();
            var players = Console.ReadLine().Split(' ').ToList();

            string command = String.Empty;
            int powerRotation = 0;
            int firstPositionBullet = 0;
            int lastPositionBullet = 0;
            bool isDeath = false;

            for (int i = 0; i < cylinder.Count; i++)
            {
                
                if (cylinder[i] == 1)
                {
                    firstPositionBullet = i;
                }
            }

            for (int i = 0; i < players.Count; i++)
            {
                string[] commands = players[i].Split(',');
                command = commands[1];
                powerRotation = int.Parse(commands[0]);

                if (command == "Right")
                {
                    lastPositionBullet = (firstPositionBullet + powerRotation) % cylinder.Count;
                    firstPositionBullet = lastPositionBullet;
                }
                else
                {
                    lastPositionBullet = Math.Abs(powerRotation - firstPositionBullet) % cylinder.Count;
                    firstPositionBullet = lastPositionBullet;
                }

                if (lastPositionBullet == 2)
                {
                    Console.WriteLine($"Game over! Player {i} is dead.");
                    isDeath = true;
                    break;
                }
                firstPositionBullet++;
            }

            if (!isDeath)
            {
                Console.WriteLine("Everybody got lucky!");
            }
            
        }
    }
}
 

Надявам се да ви помогне,ако има още въпроси ще отговоря,но негарантирам кога.

 

 

0
vdim15 avatar vdim15 SoftUni Team Trainer 43 Точки

В случай, че някой все още се лута - постарах се да го напиша разбираемо.

http://pastebin.com/kf7uujps

 

 

0
01/03/2017 10:11:09
yordanovus avatar yordanovus 7 Точки

Здравейте, аз я направих така:  http://pastebin.com/Z5TF9bcu

Дава ми обаче само 40/100 
Моля някой, ако може да ми помогне, защо става така? Предполагам че нещо сметките не ми се получават при изчисляването, просто не се сещам за друго.

0
vdim15 avatar vdim15 SoftUni Team Trainer 43 Точки

Здравей, yordanovus. Проблемът ти е, в switch-a при кейс Left. Представи си, че куршумът ти е на позиция 4. Ако завъртя със сила 6 по твоята логика ще се получи: 4 - 6 = -2 и по абсолютна стойност = 2. А правилното място, на което трябва да застане е отново 4.

0
Stradjazz avatar Stradjazz 27 Точки

И аз зациклих, моля за малко помощ. някои от тестовете минават, а други - не

http://pastebin.com/J2wmVT3M

0
Stradjazz avatar Stradjazz 27 Точки

Оправих го! Ако може да помогне на някого - ето код

Github

0
Sotirovgym avatar Sotirovgym 2 Точки

Само едно не разбрах, защо принтираме когато currentPosition e = 2. Защо точно на 2?

0
G.Horozov avatar G.Horozov 1 Точки

По условието:

The muzzle IS at index 2 of the cylinder. If the element at that position is 1, the current player loses the game.

0
Sotirovgym avatar Sotirovgym 2 Точки

Да после го видях, Благодаря. :)

 

0
pirocorp avatar pirocorp 16 Точки

Истината е че това условие е неясно! След като разбрах условието от форума задачата се решава за 15 минути! Ето и линк към решението ми https://pastebin.com/TWq6eKzQ

-1
14/01/2018 16:31:04