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