public void WriteOutputFile(string path, OutputData data)
 {
     using (var writer = new StreamWriter(path))
     {
         writer.WriteLine(data.NumberOfMoves);
         const string separator = ", ";
         foreach (Path shortestPath in data.Moves)
         {
             writer.Write(_positionConverter.ToText(data.StartingPosition) + separator);
             writer.WriteLine(string.Join(separator, shortestPath.Moves.Select(x => _positionConverter.ToText(x.To))));
         }
     }
 }
        static void Main(string[] args)
        {
            const StringComparison comparisonMethod = StringComparison.OrdinalIgnoreCase;
            IFileHandler           fileHandler      = new FileHandler(new LetterDigitPositionConverter());

            // Read command line args.
            string inputPath  = null;
            string outputPath = null;

            for (int i = 0; i < args.Length; ++i)
            {
                if (args[i].Equals("/I", comparisonMethod))
                {
                    inputPath = args[++i];
                    continue;
                }
                if (args[i].Equals("/O", comparisonMethod))
                {
                    outputPath = args[++i];
                }
            }

            // Read input file.
            InputData input = fileHandler.ParseInputFile(inputPath);

            // Do stuff :)
            var board = new Board(input.BoardWidth, input.BoardHeight, input.BlockedSquares);
            var piece = (Piece)typeof(Board)
                        .GetMethod("PlaceNewPiece", new [] { typeof(Point) })
                        .MakeGenericMethod(new [] { input.PieceType })
                        .Invoke(board, new object[] { input.StartingPosition });

            Path[] paths  = piece.FindShortestPathsTo(input.TargetPosition).ToArray();
            var    output = new OutputData
            {
                NumberOfMoves    = paths[0].NumberOfMoves,
                Moves            = paths,
                StartingPosition = input.StartingPosition
            };

            // Write output file.
            fileHandler.WriteOutputFile(outputPath, output);
        }