Advertisement
krasi1105

Harry Potter 4D

May 16th, 2017
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Linq;
  3.  
  4. public class Program
  5. {
  6.     public static void Main()
  7.     {
  8.         int[] dimensionSizes = StringToIntArray(Console.ReadLine());
  9.         Character[] characters = ReadInput();
  10.         var harry = characters[0] as Harry;
  11.         string input;
  12.         while (!(input = Console.ReadLine()).Equals("END"))
  13.         {
  14.             string[] parameters = input.Split();
  15.             char name = parameters[0][0];
  16.             char dimension = parameters[1][0];
  17.             int steps = int.Parse(parameters[2]);
  18.             Array.Find(characters, c => c.Name == name).Move(dimension, steps, dimensionSizes);
  19.  
  20.             bool harryDied = characters.Any(c => c.Coordinates.SequenceEqual(harry.Coordinates) && c.Name != '@');
  21.             if (harryDied)
  22.             {
  23.                 var theBasilisk = characters
  24.                     .Where(c => c.Coordinates.SequenceEqual(harry.Coordinates) && c.Name != '@')
  25.                     .OrderBy(c => c.Name)
  26.                     .First();
  27.  
  28.                 Console.WriteLine(
  29.                     name == '@'
  30.                         ? "{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!\""
  31.                         : "{0}: \"You thought you could escape, didn't you?\" - {1}", theBasilisk.Name, harry.MovesDone);
  32.                 return;
  33.             }
  34.         }
  35.  
  36.         Console.WriteLine("@: \"I am the chosen one!\" - {0}", harry.MovesDone);
  37.     }
  38.  
  39.     private static int[] StringToIntArray(string readLine)
  40.     {
  41.         return readLine
  42.             .Split()
  43.             .Select(int.Parse)
  44.             .ToArray();
  45.     }
  46.     private static Character[] ReadInput()
  47.     {
  48.         int[] harryCoords = StringToIntArray(Console.ReadLine());
  49.         int basiliskCount = int.Parse(Console.ReadLine());
  50.  
  51.         Character[] allCharacters = new Character[basiliskCount + 1];
  52.         allCharacters[0] = new Harry(harryCoords, '@');
  53.         Character[] basilisks = ReadBasilisks(basiliskCount);
  54.         Array.Copy(basilisks, 0, allCharacters, 1, basiliskCount);
  55.  
  56.         return allCharacters;
  57.     }
  58.     private static Character[] ReadBasilisks(int basiliskCount)
  59.     {
  60.         var basilisks = new Character[basiliskCount];
  61.         for (int i = 0; i < basiliskCount; i++)
  62.         {
  63.             string input = Console.ReadLine();
  64.             var coords = StringToIntArray(input.Substring(2));
  65.             basilisks[i] = new Character(coords, input[0]);
  66.         }
  67.         return basilisks;
  68.     }
  69. }
  70.  
  71. public class Character
  72. {
  73.     public Character(int[] coordinates, char name)
  74.     {
  75.         Coordinates = coordinates;
  76.         Name = name;
  77.     }
  78.  
  79.     public int[] Coordinates { get; protected set; }
  80.     public char Name { get; private set;}
  81.  
  82.     public virtual void Move(char dimension, int steps, int[] dimensionSizes)
  83.     {
  84.         int dimensionIndex = dimension - 'A';
  85.         this.Coordinates[dimensionIndex] =
  86.             Math.Max(
  87.                 0,
  88.                 Math.Min(this.Coordinates[dimensionIndex] + steps, dimensionSizes[dimensionIndex] - 1)); // doesnt get out of array
  89.     }
  90. }
  91.  
  92. public class Harry : Character
  93. {
  94.     public Harry(int[] coordinates, char name) : base(coordinates, name)
  95.     {
  96.         this.MovesDone = 0;
  97.     }
  98.  
  99.     public int MovesDone { get; private set; }
  100.  
  101.     public override void Move(char dimension, int steps, int[] dimensionSizes)
  102.     {
  103.         this.MovesDone++;
  104.         base.Move(dimension, steps, dimensionSizes);
  105.     }
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement