/// <summary> /// Solution to Week 3 programming assignment of the Graph Search, Shortest Paths, and Data Structures /// course. /// /// Implementation of Median Maintenance algorithm. Output the sum the medians, modulo 10000 (i.e. only /// the last four digits. /// /// Arguments: /// ---------- /// /// 1. Path to text file representing the directed graph /// 2. 0/1 flag indicating if test cases should be executed /// 3. if 1 - path to test cases folder. If this is empty, the current working directory is assumed. /// /// Test cases format: /// input_{filename}.txt and output_{filename}.txt /// where output_{filename}.txt is a text file containing the sizes of the five larges SCCs of the graph described in /// input_{filename}.txt /// /// -------------------------------------------------------------------------------------------------- /// </summary> /// <param name="args"></param> public static void Main(string[] args) { string folder = ""; if (args.Count() > 2 && !string.IsNullOrEmpty(args[2])) { folder = args[2]; } else { folder = Directory.GetCurrentDirectory(); } DirectoryInfo dinfo = new DirectoryInfo(folder); FileInfo[] Files = dinfo.GetFiles("*.txt"); int correct = 0; int total = 0; int totalInputFiles = Files.Count(x => x.Name.StartsWith("input")); if (args.Count() > 1 && args[1] == "1") { foreach (var inputFile in Files.Where(x => x.Name.StartsWith("input"))) { total++; var start = Stopwatch.StartNew(); int result = MedianMaintenance.Calculate(new string[] { inputFile.FullName }); start.Stop(); string outputFile = inputFile.FullName.Replace("input", "output"); int expectedResult = Convert.ToInt32(System.IO.File.ReadAllText(outputFile).Trim()); if (result == expectedResult) { correct++; } Console.Write("Correct = {0:F2}% \t {1}/{2} \t Answer = {3} \t time = {4:F2}", (double)correct * 100 / total, total, totalInputFiles, result, (double)start.ElapsedMilliseconds / 1000); Console.Write("\t{0} \n", result == expectedResult); } } var start1 = Stopwatch.StartNew(); var solution = MedianMaintenance.Calculate(args); start1.Stop(); Console.Write("Solution = {0}", solution); Console.Write("\t time={0:F2}s", (double)start1.ElapsedMilliseconds / 1000); Console.Read(); }
public void TestCase2_FinalAnswerTest() { // Arrange FileProcessor fileProcessor = new FileProcessor(); MedianMaintenance medianMaintenance = new MedianMaintenance(); int[] testData = fileProcessor.ReadTextFile(@"C:\Users\Paul\Documents\Open Source Society for Computer Science (OSSU)\Algorithms Coursera\Programming Assignments\Week 7 Programming Assignment\TestCases\TestCase2.txt"); // Act foreach (int num in testData) { medianMaintenance.FindMedian(num); } // Assert Assert.Equal(9335, medianMaintenance.GetFinalAnswer()); }
public void TestCase1_FindMedianTest() { // Arrange FileProcessor fileProcessor = new FileProcessor(); MedianMaintenance medianMaintenance = new MedianMaintenance(); int[] testData = fileProcessor.ReadTextFile(@"C:\Users\Paul\Documents\Open Source Society for Computer Science (OSSU)\Algorithms Coursera\Programming Assignments\Week 7 Programming Assignment\TestCases\TestCase1.txt"); int[] correctAnswer = { 1, 1, 10, 10, 100, 10, 10 }; // Act foreach (int num in testData) { medianMaintenance.FindMedian(num); } // Assert for (int i = 0; i < correctAnswer.Length; i++) { Assert.Equal(correctAnswer[i], medianMaintenance._listOfMedian[i]); } }