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})"); }
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(); }