Beispiel #1
0
        public void Run(string[] args)
        {
            IReader reader;

            if (args.Length > 0)
            {
                reader = new FileReader(args[0]);
            }
            else
            {
                reader = new ConsoleReader();
            }

            List <RainDeer> raindeers = new List <RainDeer>();
            //int time = int.Parse(reader.ReadLine());
            int time = 2503;

            while (!reader.EndOfStream)
            {
                var input = reader.ReadLine();
                if (string.IsNullOrEmpty(input))
                {
                    break;
                }

                var split = input.Split(' ');
                var deer  = new RainDeer()
                {
                    Name     = split[0],
                    Speed    = int.Parse(split[3]),
                    RaceTime = int.Parse(split[6]),
                    RestTime = int.Parse(split[13])
                };

                raindeers.Add(deer);
            }

            long   maxDistance = 0;
            string winner      = string.Empty;

            foreach (var deer in raindeers)
            {
                var distance = CalculateDistance(deer, time);
                if (distance > maxDistance)
                {
                    maxDistance = distance;
                    winner      = deer.Name;
                }
                WriteLine($"{deer.Name} traveled {distance} km.");
            }

            WriteLine();
            WriteLine($"Winner: {winner} with {maxDistance} km.");
        }
Beispiel #2
0
        public void Run(string[] args)
        {
            IReader reader;

            if (args.Length > 0)
            {
                reader = new FileReader(args[0]);
            }
            else
            {
                reader = new ConsoleReader();
            }

            var input = reader.ReadLine();

            HashSet <Point> visited = new HashSet <Point>();
            Point           p       = new Point(0, 0);

            visited.Add(p);

            foreach (var move in input)
            {
                Point newP;

                switch (move)
                {
                case '^':
                    p = new Point(p.X, p.Y - 1);
                    break;

                case '<':
                    p = new Point(p.X - 1, p.Y);
                    break;

                case '>':
                    p = new Point(p.X + 1, p.Y);
                    break;

                case 'v':
                    p = new Point(p.X, p.Y + 1);
                    break;

                default:
                    throw new InvalidOperationException();
                }

                visited.Add(p);
            }

            WriteLine(visited.Count());
        }
Beispiel #3
0
        public void Run(string[] args)
        {
            IReader reader;

            if (args.Length > 0)
            {
                reader = new FileReader(args[0]);
            }
            else
            {
                reader = new ConsoleReader();
            }

            var input = reader.ReadLine();

            long suffix = 0;

            var password = "******";
            int found    = 0;

            while (found < 8)
            {
                var md5 = string.Empty;
                while (!md5.StartsWith("00000"))
                {
                    md5 = CalculateMD5($"{input}{suffix}");
                    //WriteLine($"[{i}] MD5 of {input}{suffix} = {md5}");
                    suffix++;

                    if (suffix % 100000 == 0)
                    {
                        int tmp = (int)(suffix / 100000);
                        int a   = tmp / 10;
                        int b   = tmp % 10;
                        WriteLine($"{found}/8 - {a}.{b}e6");
                    }
                }

                int pos = md5[5] - '0';
                if (pos >= 0 && pos <= 7)
                {
                    char chr = md5[6];
                    if (password[pos] == '_')
                    {
                        password = password.Substring(0, pos) + chr + password.Substring(pos + 1, 8 - pos - 1);
                        found++;
                        WriteLine(password);
                    }
                }
            }
        }
Beispiel #4
0
        public void Run(string[] args)
        {
            IReader reader;

            if (args.Length > 0)
            {
                reader = new FileReader(args[0]);
            }
            else
            {
                reader = new ConsoleReader();
            }

            var input = reader.ReadLine();

            int lastLength = 0;

            for (int i = 0; i < 50; i++)
            {
                Write($"{i+1} ");
                InitProgressBar(input.Length);

                var newString = new StringBuilder();
                int idx       = 0;
                while (idx < input.Length)
                {
                    char current = input[idx];
                    int  counter = 0;

                    while (idx < input.Length && input[idx] == current)
                    {
                        idx++;
                        counter++;
                    }

                    newString.Append(counter.ToString());
                    newString.Append(current);

                    UpdateProgress(idx);
                }

                input = newString.ToString();
                //WriteLine(input);
                lastLength = newString.Length;
                WriteLine();
            }

            WriteLine(lastLength);
        }
Beispiel #5
0
        public void Run(string[] args)
        {
            IReader reader;

            if (args.Length > 0)
            {
                reader = new FileReader(args[0]);
            }
            else
            {
                reader = new ConsoleReader();
            }

            var           input  = reader.ReadLine();
            StringBuilder output = new StringBuilder();

            for (int i = 0; i < input.Length; i++)
            {
                if (input[i] == '(')
                {
                    int start = i + 1;
                    while (input[i] != ')')
                    {
                        i++;
                    }
                    int end = i;
                    i++;

                    string data  = input.Substring(start, end - start);
                    var    split = data.Split('x');

                    int letterCount = int.Parse(split[0]);
                    int repeatCount = int.Parse(split[1]);

                    for (int j = 0; j < repeatCount; j++)
                    {
                        output.Append(input.Substring(i, letterCount));
                    }

                    i += letterCount - 1;
                }
                else
                {
                    output.Append(input[i]);
                }
            }

            WriteLine($"{output.ToString()}: {output.Length}");
        }
Beispiel #6
0
        public void Run(string[] args)
        {
            IReader reader;

            if (args.Length > 0)
            {
                reader = new FileReader(args[0]);
            }
            else
            {
                reader = new ConsoleReader();
            }

            int passwordLength = 8;
            List <Dictionary <char, int> > frequencies = new List <Dictionary <char, int> >();

            for (int i = 0; i < passwordLength; i++)
            {
                frequencies.Add(new Dictionary <char, int>());
            }

            while (!reader.EndOfStream)
            {
                var input = reader.ReadLine();
                if (string.IsNullOrEmpty(input))
                {
                    break;
                }

                for (int i = 0; i < passwordLength; i++)
                {
                    char idx = input[i];

                    if (!frequencies[i].ContainsKey(idx))
                    {
                        frequencies[i].Add(idx, 0);
                    }

                    frequencies[i][idx]++;
                }
            }

            for (int i = 0; i < passwordLength; i++)
            {
                Write(frequencies[i].OrderBy(x => x.Value).First().Key);
            }
            WriteLine();
        }
Beispiel #7
0
        public void Run(string[] args)
        {
            IReader reader;

            if (args.Length > 0)
            {
                reader = new FileReader(args[0]);
            }
            else
            {
                reader = new ConsoleReader();
            }

            int totalArea = 0;

            while (!reader.EndOfStream)
            {
                var input = reader.ReadLine();
                if (string.IsNullOrEmpty(input))
                {
                    break;
                }

                var dim = input.Split('x').Select(int.Parse).ToList();

                List <int> sides = new List <int>();
                sides.Add(dim[0] * dim[1]);
                sides.Add(dim[0] * dim[2]);
                sides.Add(dim[1] * dim[2]);

                int smallest = int.MaxValue;
                foreach (var s in sides)
                {
                    if (smallest > s)
                    {
                        smallest = s;
                    }
                }

                var area = 2 * sides[0] + 2 * sides[1] + 2 * sides[2] + smallest;
                totalArea += area;
            }

            WriteLine(totalArea);
        }
Beispiel #8
0
        public void Run(string[] args)
        {
            IReader reader;

            if (args.Length > 0)
            {
                reader = new FileReader(args[0]);
            }
            else
            {
                reader = new ConsoleReader();
            }

            int validTriangleCount = 0;

            while (true)
            {
                List <List <int> > inputs = new List <List <int> >();

                for (int i = 0; i < 3; i++)
                {
                    var rawInput = reader.ReadLine();
                    if (string.IsNullOrEmpty(rawInput))
                    {
                        break;
                    }
                    inputs.Add(GetSides(rawInput).ToList());
                }

                if (inputs.Count < 3)
                {
                    break;
                }

                for (int i = 0; i < 3; i++)
                {
                    if (CheckTriangle(inputs[0][i], inputs[1][i], inputs[2][i]))
                    {
                        validTriangleCount++;
                    }
                }
            }

            WriteLine($"# valid triangles: {validTriangleCount}");
        }
Beispiel #9
0
        public void Run(string[] args)
        {
            IReader reader;

            if (args.Length > 0)
            {
                reader = new FileReader(args[0]);
            }
            else
            {
                reader = new ConsoleReader();
            }

            var input = reader.ReadLine();

            int lastLength = 0;

            for (int i = 0; i < 40; i++)
            {
                string newString = string.Empty;
                int    idx       = 0;
                while (idx < input.Length)
                {
                    char current = input[idx];
                    int  counter = 0;

                    while (idx < input.Length && input[idx] == current)
                    {
                        idx++;
                        counter++;
                    }

                    newString += counter.ToString();
                    newString += current;
                }

                //WriteLine(newString);
                input      = newString;
                lastLength = newString.Length;
            }

            WriteLine(lastLength);
        }
Beispiel #10
0
        public void Run(string[] args)
        {
            IReader reader;

            if (args.Length > 0)
            {
                reader = new FileReader(args[0]);
            }
            else
            {
                reader = new ConsoleReader();
            }

            string salt      = ReadLine();
            int    keyToFind = int.Parse(ReadLine());

            Solve(salt, keyToFind);
            //WriteLine(Solve(salt));
        }
Beispiel #11
0
        public void Run(string[] args)
        {
            IReader reader;

            if (args.Length > 0)
            {
                reader = new FileReader(args[0]);
            }
            else
            {
                reader = new ConsoleReader();
            }

            Dictionary <string, Entity> entities = new Dictionary <string, Entity>();

            while (!reader.EndOfStream)
            {
                var input = reader.ReadLine();
                if (string.IsNullOrEmpty(input))
                {
                    break;
                }

                ParseInput(input, entities);
            }

            while (Process(entities))
            {
                ;
            }

            var output0 = entities["Output_0"];
            var output1 = entities["Output_1"];
            var output2 = entities["Output_2"];

            WriteLine($"Output 0: {output0.Value}");
            WriteLine($"Output 1: {output1.Value}");
            WriteLine($"Output 2: {output2.Value}");

            WriteLine();
            WriteLine($"Multiplied: {output0.Value * output1.Value * output2.Value}");
        }
Beispiel #12
0
        public void Run(string[] args)
        {
            IReader reader;

            if (args.Length > 0)
            {
                reader = new FileReader(args[0]);
            }
            else
            {
                reader = new ConsoleReader();
            }

            var input = reader.ReadLine();

            long suffix = 0;

            var password = string.Empty;

            for (int i = 0; i < 8; i++)
            {
                var md5 = string.Empty;
                while (!md5.StartsWith("00000"))
                {
                    md5 = CalculateMD5($"{input}{suffix}");
                    //WriteLine($"[{i}] MD5 of {input}{suffix} = {md5}");
                    suffix++;

                    if (suffix % 100000 == 0)
                    {
                        int tmp = (int)(suffix / 100000);
                        int a   = tmp / 10;
                        int b   = tmp % 10;
                        WriteLine($"{a}.{b}e6 - {i}/8");
                    }
                }

                password += md5[5];
            }

            WriteLine($"Password: {password}");
        }
Beispiel #13
0
        public void Run(string[] args)
        {
            IReader reader;

            if (args.Length > 0)
            {
                reader = new FileReader(args[0]);
            }
            else
            {
                reader = new ConsoleReader();
            }

            var input = reader.ReadLine();

            ExpandResult result = Expand(input, 0, input.Length);

            //WriteLine($"{result.ExpandedString}: {result.ExpandedLength}");
            WriteLine($"{result.ExpandedLength}");
        }
Beispiel #14
0
        public void Run(string[] args)
        {
            IReader reader;

            if (args.Length > 0)
            {
                reader = new FileReader(args[0]);
            }
            else
            {
                reader = new ConsoleReader();
            }

            var input = reader.ReadLine();

            do
            {
                input = Increase(input);
            } while (!IsValid(input));

            WriteLine(input);
        }
Beispiel #15
0
        public void Run(string[] args)
        {
            IReader reader;

            if (args.Length > 0)
            {
                reader = new FileReader(args[0]);
            }
            else
            {
                reader = new ConsoleReader();
            }

            var input   = reader.ReadLine();
            int sum     = 0;
            int counter = 0;

            foreach (var c in input)
            {
                if (c == '(')
                {
                    sum++;
                }
                if (c == ')')
                {
                    sum--;
                }
                counter++;

                if (sum == -1)
                {
                    WriteLine(counter);
                    break;
                }
            }
        }
Beispiel #16
0
        public void Run(string[] args)
        {
            const int width = 50, height = 6;

            bool[] display = new bool[width * height];

            IReader reader;

            if (args.Length > 0)
            {
                reader = new FileReader(args[0]);
            }
            else
            {
                reader = new ConsoleReader();
            }

            while (!reader.EndOfStream)
            {
                PrintDisplay(display, width, height);
                var input = reader.ReadLine();
                if (string.IsNullOrEmpty(input))
                {
                    break;
                }

                var split = input.Split(' ');
                if (split[0] == "rect")
                {
                    var rectSize = split[1].Split('x');
                    int xx       = int.Parse(rectSize[0]);
                    int yy       = int.Parse(rectSize[1]);

                    for (int y = 0; y < yy; y++)
                    {
                        for (int x = 0; x < xx; x++)
                        {
                            display[y * width + x] = true;
                        }
                    }
                }
                else
                {
                    int index  = int.Parse(split[2].Split('=')[1]);
                    int offset = int.Parse(split[4]);

                    char c = split[1][0];
                    if (c == 'r')
                    {
                        int y = index;
                        for (int steps = 0; steps < offset; steps++)
                        {
                            bool b = display[y * width + width - 1];
                            for (int x = width - 1; x > 0; x--)
                            {
                                //WriteLine($"{y*width + x} {y*width + x - 1}");
                                display[y * width + x] = display[y * width + x - 1];
                            }

                            display[y * width] = b;
                        }
                    }
                    else
                    {
                        int x = index;
                        for (int steps = 0; steps < offset; steps++)
                        {
                            bool b = display[(height - 1) * width + x];
                            for (int y = height - 1; y > 0; y--)
                            {
                                //WriteLine($"{y*width + x} {y*width + x - 1}");
                                display[y * width + x] = display[(y - 1) * width + x];
                            }

                            display[x] = b;
                        }
                    }
                }
                WriteLine(input);
                //ReadKey();
            }
            PrintDisplay(display, width, height);

            int sum = 0;

            for (int i = 0; i < width * height; i++)
            {
                if (display[i])
                {
                    sum++;
                }
            }

            WriteLine(sum);
        }
Beispiel #17
0
        public void Run(string[] args)
        {
            shortestPathLength = int.MaxValue;
            shortestPath       = null;
            nodes = new Dictionary <string, Node>();
            IReader reader;

            if (args.Length > 0)
            {
                reader = new FileReader(args[0]);
            }
            else
            {
                reader = new ConsoleReader();
            }

            while (!reader.EndOfStream)
            {
                var input = reader.ReadLine();
                if (string.IsNullOrEmpty(input))
                {
                    break;
                }

                var  split = input.Split(new [] { "to", "=" }, StringSplitOptions.None);
                Node node1, node2;
                var  node1Tag = split[0].Trim();
                var  node2Tag = split[1].Trim();

                if (!nodes.TryGetValue(node1Tag, out node1))
                {
                    node1 = new Node(node1Tag.Trim());
                    nodes.Add(node1Tag, node1);
                }

                if (!nodes.TryGetValue(node2Tag, out node2))
                {
                    node2 = new Node(node2Tag.Trim());
                    nodes.Add(node2Tag, node2);
                }

                node1.Neighbors.Add(node2, int.Parse(split[2]));
                node2.Neighbors.Add(node1, int.Parse(split[2]));
            }

/*
 *          foreach(var n in nodes.Values)
 *          {
 *              Write($"{n.Tag} | ");
 *              foreach(var neigh in n.Neighbors)
 *              {
 *                  Write($"{neigh.Key.Tag}: {neigh.Value} | ");
 *              }
 *              WriteLine();
 *          }
 */
            foreach (var n in nodes.Values)
            {
                List <string> visited = new List <string>();
                visited.Add(n.Tag);
                FindShortestPath(n, visited, 0, 0);
            }

            Write("Shortest path: ");
            foreach (var s in shortestPath)
            {
                Write($"{s} -> ");
            }
            WriteLine($"\b\b\b({shortestPathLength})");
        }
Beispiel #18
0
        public void Run(string[] args)
        {
            IReader reader;

            if (args.Length > 0)
            {
                reader = new FileReader(args[0]);
            }
            else
            {
                reader = new ConsoleReader();
            }

            Dictionary <string, Person> people = new Dictionary <string, Person>();

            while (!reader.EndOfStream)
            {
                var input = reader.ReadLine();
                if (string.IsNullOrEmpty(input))
                {
                    break;
                }

                var    split        = input.Split(' ');
                string p1           = split[0];
                string gainLose     = split[2];
                string happinessStr = split[3];
                string p2           = split[10];
                p2 = p2.Substring(0, p2.Length - 1);
                int happiness = int.Parse(happinessStr);
                if (gainLose == "lose")
                {
                    happiness *= -1;
                }
                Person person;

                if (!people.TryGetValue(p1, out person))
                {
                    person = new Person(p1);
                    people.Add(p1, person);
                }

                person.HapinessModifier.Add(p2, happiness);
                //WriteLine($"{p1} = {p2}: {(happiness > 0 ? '+' : ' ')}{happiness}");
            }

            string me       = "Me";
            Person mePerson = new Person(me);

            foreach (var p in people.Values)
            {
                mePerson.HapinessModifier.Add(p.Name, 0);
                p.HapinessModifier.Add(me, 0);
            }
            people.Add(mePerson.Name, mePerson);

            Person        pStart  = people.First().Value;
            List <string> visited = new List <string>();

            visited.Add(pStart.Name);
            //PrintPeople(people);

            Permutate(people, visited);

            WriteLine(maxHappiness);
            PrintNeighborList(maxHappinessOrder);
        }
Beispiel #19
0
        public void Run(string[] args)
        {
            int     matrixSize = 1000;
            IReader reader;

            if (args.Length > 0)
            {
                reader = new FileReader(args[0]);
            }
            else
            {
                reader = new ConsoleReader();
            }

            bool[] lights = new bool[matrixSize * matrixSize];

            while (!reader.EndOfStream)
            {
                //PrintMatrix(lights);
                var inputRaw = reader.ReadLine();
                if (string.IsNullOrEmpty(inputRaw))
                {
                    break;
                }
                Tuple <Operation, Point, Point> input;

                try
                {
                    input = ParseInput(inputRaw);
                    //WriteLine($"{input.Item1} [{input.Item2.X}, {input.Item2.Y}]::[{input.Item3.X}, {input.Item3.Y}]");
                }
                catch (System.Exception)
                {
                    WriteLine("Invalid input, skipping");
                    continue;
                }

                var op = input.Item1;
                var p1 = input.Item2;
                var p2 = input.Item3;

                int minX, minY;
                int maxX, maxY;

                if (p1.X > p2.X)
                {
                    minX = p2.X;
                    maxX = p1.X;
                }
                else
                {
                    minX = p1.X;
                    maxX = p2.X;
                }

                if (p1.Y > p2.Y)
                {
                    minY = p2.Y;
                    maxY = p1.Y;
                }
                else
                {
                    minY = p1.Y;
                    maxY = p2.Y;
                }

                for (int y = minY; y <= maxY; y++)
                {
                    for (int x = minX; x <= maxX; x++)
                    {
                        int pos = y * matrixSize + x;
                        if (op == Operation.TurnOn)
                        {
                            lights[pos] = true;
                        }
                        else if (op == Operation.TurnOff)
                        {
                            lights[pos] = false;
                        }
                        else if (op == Operation.Toggle)
                        {
                            lights[pos] = !lights[pos];
                        }
                    }
                }
            }

            var totalSize   = matrixSize * matrixSize;
            var lightsCount = 0;

            for (int i = 0; i < totalSize; i++)
            {
                if (lights[i])
                {
                    lightsCount++;
                }
            }

            WriteLine(lightsCount);
        }
Beispiel #20
0
        public void Run(string[] args)
        {
            IReader reader;
            string  keypad =
                "*******" +
                "***1***" +
                "**234**" +
                "*56789*" +
                "**ABC**" +
                "***D***" +
                "*******";

            if (args.Length > 0)
            {
                reader = new FileReader(args[0]);
            }
            else
            {
                reader = new ConsoleReader();
            }

            Point p = new Point {
                X = 1, Y = 3
            };
            List <char> code = new List <char>();

            while (!reader.EndOfStream)
            {
                var input = reader.ReadLine();
                if (string.IsNullOrEmpty(input))
                {
                    break;
                }

                foreach (var c in input)
                {
                    Point newP = new Point {
                        X = p.X, Y = p.Y
                    };
                    switch (c.ToString().ToUpper()[0])
                    {
                    case 'D':
                        newP.Y++;
                        break;

                    case 'U':
                        newP.Y--;
                        break;

                    case 'L':
                        newP.X--;
                        break;

                    case 'R':
                        newP.X++;
                        break;
                    }

                    int newIndex = newP.Y * 7 + newP.X;
                    if (keypad[newIndex] != '*')
                    {
                        p = newP;
                    }
                }

                code.Add(keypad[p.Y * 7 + p.X]);
            }

            foreach (var c in code)
            {
                Console.Write(c);
            }
            Console.WriteLine();
        }
Beispiel #21
0
        public void Run(string[] args)
        {
            IReader reader;

            if (args.Length > 0)
            {
                reader = new FileReader(args[0]);
            }
            else
            {
                reader = new ConsoleReader();
            }

            var input = reader.ReadLine();

            HashSet <Point> visited   = new HashSet <Point>();
            Point           santa     = new Point(0, 0);
            Point           roboSanta = new Point(0, 0);

            visited.Add(santa);
            bool roboSantaMoves = false;

            foreach (var move in input)
            {
                int dX = 0, dY = 0;

                switch (move)
                {
                case '^':
                    dY = -1;
                    break;

                case '<':
                    dX = -1;
                    break;

                case '>':
                    dX = 1;
                    break;

                case 'v':
                    dY = 1;
                    break;

                default:
                    throw new InvalidOperationException();
                }

                if (roboSantaMoves)
                {
                    roboSanta = new Point(roboSanta.X + dX, roboSanta.Y + dY);
                    visited.Add(roboSanta);
                    roboSantaMoves = false;
                }
                else
                {
                    santa = new Point(santa.X + dX, santa.Y + dY);
                    visited.Add(santa);
                    roboSantaMoves = true;
                }
            }

            WriteLine(visited.Count());
        }
Beispiel #22
0
        public void Run(string[] args)
        {
            IReader reader;

            if (args.Length > 0)
            {
                reader = new FileReader(args[0]);
            }
            else
            {
                reader = new ConsoleReader();
            }

            Point p = new Point {
                X = 1, Y = 1
            };
            List <int> code = new List <int>();

            while (!reader.EndOfStream)
            {
                var input = reader.ReadLine();
                if (string.IsNullOrEmpty(input))
                {
                    break;
                }

                foreach (var c in input)
                {
                    switch (c.ToString().ToUpper()[0])
                    {
                    case 'D':
                        p.Y++;
                        if (p.Y > 2)
                        {
                            p.Y = 2;
                        }
                        break;

                    case 'U':
                        p.Y--;
                        if (p.Y < 0)
                        {
                            p.Y = 0;
                        }
                        break;

                    case 'L':
                        p.X--;
                        if (p.X < 0)
                        {
                            p.X = 0;
                        }
                        break;

                    case 'R':
                        p.X++;
                        if (p.X > 2)
                        {
                            p.X = 2;
                        }
                        break;
                    }
                }
                code.Add(p.Y * 3 + p.X + 1);
            }

            foreach (var c in code)
            {
                Console.Write(c);
            }
            Console.WriteLine();
        }