Example #1
0
        /// <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();
        }
Example #2
0
    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());
    }
Example #3
0
    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]);
        }
    }