Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Linq;
- public class Program
- {
- public static void Main()
- {
- int[] dimensionSizes = StringToIntArray(Console.ReadLine());
- Character[] characters = ReadInput();
- var harry = characters[0] as Harry;
- string input;
- while (!(input = Console.ReadLine()).Equals("END"))
- {
- string[] parameters = input.Split();
- char name = parameters[0][0];
- char dimension = parameters[1][0];
- int steps = int.Parse(parameters[2]);
- Array.Find(characters, c => c.Name == name).Move(dimension, steps, dimensionSizes);
- bool harryDied = characters.Any(c => c.Coordinates.SequenceEqual(harry.Coordinates) && c.Name != '@');
- if (harryDied)
- {
- var theBasilisk = characters
- .Where(c => c.Coordinates.SequenceEqual(harry.Coordinates) && c.Name != '@')
- .OrderBy(c => c.Name)
- .First();
- Console.WriteLine(
- name == '@'
- ? "{0}: \"Step {1} was the worst you ever made.\"\n{0}: \"You will regret until the rest of your life... All 3 seconds of it!\""
- : "{0}: \"You thought you could escape, didn't you?\" - {1}", theBasilisk.Name, harry.MovesDone);
- return;
- }
- }
- Console.WriteLine("@: \"I am the chosen one!\" - {0}", harry.MovesDone);
- }
- private static int[] StringToIntArray(string readLine)
- {
- return readLine
- .Split()
- .Select(int.Parse)
- .ToArray();
- }
- private static Character[] ReadInput()
- {
- int[] harryCoords = StringToIntArray(Console.ReadLine());
- int basiliskCount = int.Parse(Console.ReadLine());
- Character[] allCharacters = new Character[basiliskCount + 1];
- allCharacters[0] = new Harry(harryCoords, '@');
- Character[] basilisks = ReadBasilisks(basiliskCount);
- Array.Copy(basilisks, 0, allCharacters, 1, basiliskCount);
- return allCharacters;
- }
- private static Character[] ReadBasilisks(int basiliskCount)
- {
- var basilisks = new Character[basiliskCount];
- for (int i = 0; i < basiliskCount; i++)
- {
- string input = Console.ReadLine();
- var coords = StringToIntArray(input.Substring(2));
- basilisks[i] = new Character(coords, input[0]);
- }
- return basilisks;
- }
- }
- public class Character
- {
- public Character(int[] coordinates, char name)
- {
- Coordinates = coordinates;
- Name = name;
- }
- public int[] Coordinates { get; protected set; }
- public char Name { get; private set;}
- public virtual void Move(char dimension, int steps, int[] dimensionSizes)
- {
- int dimensionIndex = dimension - 'A';
- this.Coordinates[dimensionIndex] =
- Math.Max(
- 0,
- Math.Min(this.Coordinates[dimensionIndex] + steps, dimensionSizes[dimensionIndex] - 1)); // doesnt get out of array
- }
- }
- public class Harry : Character
- {
- public Harry(int[] coordinates, char name) : base(coordinates, name)
- {
- this.MovesDone = 0;
- }
- public int MovesDone { get; private set; }
- public override void Move(char dimension, int steps, int[] dimensionSizes)
- {
- this.MovesDone++;
- base.Move(dimension, steps, dimensionSizes);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement