Esempio n. 1
0
        public void Run(string[] args)
        {
            longestPathLength = 0;
            longestPath       = 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 longestPath)
            {
                Write($"{s} -> ");
            }
            WriteLine($"\b\b\b({longestPathLength})");
        }
Esempio n. 2
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();
        }