static void Main(string[] args) { dynamic x, y, result, expected, array, sortedArray; #region Divide and Conquer Console.WriteLine("\n--------------------------------------------- Divide and Conquer ---------------------------------------------"); Console.WriteLine("\n- Karatsuba Multiplication\n"); x = 1234; y = 5678; result = Part1.Karatsuba(x, y); expected = x * y; Assert.AreEqual(result, expected); Console.WriteLine($"\tKaratsuba({x}, {y}) is: {result}\n"); x = "1234"; y = "5678"; result = Part1.Karatsuba(x, y); expected = int.Parse(x) * int.Parse(y); Assert.AreEqual(result, expected); Console.WriteLine($"\tKaratsuba(\"{x}\", \"{y}\") is: {result}\n"); Console.WriteLine("\n- Merge Sort\n"); array = new[] { 2, 4, 5, 7, 1, 2, 3, 6 }; Console.WriteLine($"\tOriginal Array: "); Helpers.PrintArray(array); sortedArray = new[] { 1, 2, 2, 3, 4, 5, 6, 7 }; Part1.MergeSort(array, 0, array.Length - 1); CollectionAssert.AreEqual(array, sortedArray); Console.WriteLine($"\tSorted Array: "); Helpers.PrintArray(array); Console.WriteLine("\n- Counting Inversions\n"); array = new[] { 4, 1, 3, 2, 9, 1 }; sortedArray = new[] { 1, 1, 2, 3, 4, 9 }; Console.WriteLine($"\tOriginal Array: "); Helpers.PrintArray(array); var count_inversions = Part1.Sort_and_Count(array); expected = 8; CollectionAssert.AreEqual(array, sortedArray); Assert.AreEqual(count_inversions, expected); Console.WriteLine($"\tSorted Array: "); Helpers.PrintArray(array); Console.Write($"\tNumber of inversions are: {count_inversions}\n"); Console.WriteLine("\n- Find Max Crossing SubArray\n"); var array1 = new[] { 13, -3, -25, 20, -3, -16, -23, 18, 20, -7, 12, -5, -22, 15, -4, 7 }; Console.WriteLine($"\tArray: "); Helpers.PrintArray(array1); var(low, high, sum) = Part1.FindMaximunSubArray(array1, 0, array1.Length - 1); Assert.AreEqual(low, 7); Assert.AreEqual(high, 10); Assert.AreEqual(sum, 43); Console.Write($"\tThe maximum subarray is: from {low} (value {array1[low]}) to {high} (value {array1[high]}) and the sum is {sum}\n"); Console.WriteLine("\n- Closet Pair \n"); array = new Point[] { new Point(2, 3), new Point(5, 1), new Point(12, 10) }; Console.WriteLine($"\tPoints: "); Helpers.PrintArray(array); result = Part1.ClosetPair(array, array.Length); Console.Write($"\tThe smallest distance is: {result}"); #endregion Console.WriteLine(); }