From b9bb329dce7f56e6bc2c75ff8c828e650642e972 Mon Sep 17 00:00:00 2001 From: Justine Gartner Date: Thu, 14 Jan 2016 14:14:54 -0500 Subject: [PATCH 01/27] HWfrom1-09-16(SwiftIntro) completed --- .../Contents.swift | 109 +++++++++++++++++- 1 file changed, 104 insertions(+), 5 deletions(-) diff --git a/HWfrom1-09-16(SwiftIntro).playground/Contents.swift b/HWfrom1-09-16(SwiftIntro).playground/Contents.swift index 488e9ed..b2d506f 100644 --- a/HWfrom1-09-16(SwiftIntro).playground/Contents.swift +++ b/HWfrom1-09-16(SwiftIntro).playground/Contents.swift @@ -9,15 +9,114 @@ var str = "Hello, playground" Use the link here to get the questions. Then code your solutions below. If it does not require code, just write your answer in comments. https://docs.google.com/document/d/1DQ2aCJ_yUZtazzCfb0PaS81bg61V2ZOSxpABh981xSo/edit +*/ +//1) +//Given an integer N, there is a list of size N-1 that is missing one number from 1 - N(inclusive). Find that number. +func findMissing (N: Int, list: [Int]) -> Int { + + var totalSumOfArray = 0 + var totalSumOfList = 0 + + for i in 1...N { + + totalSumOfArray += i + } + + for i in list { + + totalSumOfList += i + } + + return totalSumOfArray - totalSumOfList + +} -1) -2) -3) +//2) +//Given a list of size N containing numbers 1 - N (inclusive). return true if there are duplicates, false if not +func hasDuplicates(arr: [Int]) -> Bool { + + for i in 0.. Int? { + + let sortedList1 = list1.sort() + let sortedList2 = list2.sort() + + for numInList1 in sortedList1 { + + for numInList2 in sortedList2 { + + if numInList1 == numInList2 { + + return numInList1 + } + } + } + + return nil +} + +let list4 = [56, 23, 7, 78] +let list5 = [78, 79, 101, 23] +getSmallestCommonValue(list4, list2: list5) + +let list6 = [34, 1, 7, 78] +let list7 = [78, 7, 101, 23] +getSmallestCommonValue(list6, list2: list7) + + + +//4) +//Check to see if an integer is a palindrome don’t use casting +func isPalindrome(var num: Int) -> Bool { + + let orgNum = num + var newNum = 0 + + while(num > 0) { + + newNum *= 10 + newNum += num % 10 + num /= 10 + } + + return newNum == orgNum + +} + +let number = 12321 +let number2 = 134543 +isPalindrome(number) +isPalindrome(number2) + -4) -*/ From bd5afb7f2361c395b99216e10a17745ea72b08ac Mon Sep 17 00:00:00 2001 From: Justine Gartner Date: Thu, 14 Jan 2016 19:06:00 -0500 Subject: [PATCH 02/27] Added answers to the Big O, will clean up --- .../Contents.swift | 131 ++++++++++++++++++ 1 file changed, 131 insertions(+) diff --git a/HWfrom1-10-016(BigO).playground/Contents.swift b/HWfrom1-10-016(BigO).playground/Contents.swift index 2040d38..30d16b2 100644 --- a/HWfrom1-10-016(BigO).playground/Contents.swift +++ b/HWfrom1-10-016(BigO).playground/Contents.swift @@ -12,12 +12,28 @@ https://docs.google.com/document/d/1aF1imJUVahCSJAuN1OEm5lQXwpSFaAmVmAETKMM6PLQ/ 1) +How long would my computer take to execute the following code if the input image is 1000px wide by 2000px tall? What if it’s n by m? + + 1000px by 2000px = 3 + 15 + 15 + 202 = 237 = O(1) (Right? Because the algorithm doesn’t depend on the input) + + n by m = 3 + 15n + 15n^2 + 202n^2 = 217n^2 => O(n^2 x m) 2) +What is the time complexity of this method, expressed in big O notation? Assume the image is square, and both dimensions are ‘n’. + + O(n^3) + (Because n by m = O(n^2 x m) so n by n would be O(n^2 x n) = O(n^3), yes?) 3) +My friend sends me an improved version of his algorithm, makeEvenMoreAwesome, that takes into account the pixels around the image. He says it’s O(n2) in the amount of pixels in the image. What is the new time complexity of the method? + + It stays the same. O(n^2 x m) 4) +If foo(xs) is a function with time complexity n (where n is the size of the input array), and bar(xs) is a function with time complexity n2, what is the time complexity of each of the following snippets of code or algorithms? + + + 5) @@ -28,3 +44,118 @@ https://docs.google.com/document/d/1aF1imJUVahCSJAuN1OEm5lQXwpSFaAmVmAETKMM6PLQ/ */ +/* +Big O Homework +With my new top of the line XJ452 supercomputer, memory access takes 1 picosecond, math operations take 3 picoseconds, and storing data in memory takes 10 picoseconds. My friend wrote a filter that makes a pixel more awesome, and takes 200 picoseconds to run. +Read: 1 ps +Math: 3ps +Write: 10ps +How long would my computer take to execute the following code if the input image is 1000px wide by 2000px tall? What if it’s n by m? + + +Pixel **awesomeFilter(Pixel image[][]1, int width1, int height1)3 +{ +for (int i = 010; i1 < width1; i++3) { // 15n +for (int j = 010; j1 < height1; j++3) {// 15n * n +[image[i]1[j]1 makeMoreAwesome200];//202 * n * n +} +} +return image; +} +n by m = 3 + 15n + 15n^2 + 202n^2 = 217n^2 => O(n^2 x m) +1000px by 2000px = 3 + 15 + 15 + 202 = 237 = O(1) (Right? Because the algorithm doesn’t depend on the input) + + +What is the time complexity of this method, expressed in big O notation? Assume the image is square, and both dimensions are ‘n’. +O(n^3) +(Because n by m = O(n^2 x m) so n by n would be O(n^2 x n) = O(n^3), yes?) + +My friend sends me an improved version of his algorithm, makeEvenMoreAwesome, that takes into account the pixels around the image. He says it’s O(n2) in the amount of pixels in the image. What is the new time complexity of the method? It stays the same. O(n^2 x m) + + +If foo(xs) is a function with time complexity n (where n is the size of the input array), and bar(xs) is a function with time complexity n2, what is the time complexity of each of the following snippets of code or algorithms? + + +for (int i = 0; i < n; i++) { //n +for (int j = 0; j < n; j++) {//n * n +foo(xs); //n * n * n +} +} +for (int i = 0; i < n; i++) {//n +for (int j = 0; j < n; j++) {// n * n +bar(xs);// n^2 * n * n +} +} +for (int i = 0; i < n; i++) {// n +for (int j = 0; j < n; j++) {// n * n +// do cool stuff +} +} +n + n^2 + n^3 + n + n^2 + n^4 + n + n^2 = n^4 =>>> O(n^4) + + +int frobnicate(ys, m) { +if (m == 0) { +return 0; +} +return ys[m] + frobnicate(ys, m - 1); +} +frobnicate(xs, n); + +Tip: Write down a table with n from 0 to 5 and trace through to find out how many times frobnicate is called with each value of n. (Not really sure how to do this) + + +An algorithm that takes as its input a list of friends of length n, filters out duplicates using a method similar to our hasDuplicates method, sorts the list using merge sort (see bigocheatsheet.com), then prints each item to the screen. +if hasDuplicates = O(n^2) +and if mergeSort = O(n log(n)) +then… I’m not quite sure how to add them together... + + +An algorithm that searches the now-sorted list of friends for a specific friend (not including the time it takes to sort). O(n) + + +Look at the complexities for some common data structures at bigocheatsheet.com. Pick a good data structure for each of the following scenarios (there are sometimes multiple answers): + + +You get a large dataset of points of interest from an API when your app first runs. You build it once at the beginning, and then have to search it many times while the user pans around a map. Array + + +You get a small dataset of points of interest from an API every time the user pans the map. You construct the data set many times and only render it once, then you discard it and do another API search. Stack or List + +Tip: Constructing a dataset of size n means you have to call the data structure’s insert method n times. So if the data structure has an insert method that takes O(n2), the time to build it all from scratch is O(n3). + + +You used a linked list for your music app’s playlist feature, but now when people search their playlist, there’s a noticeable lag before loading results. Your competitor’s app is buttery smooth when searching, even showing results as you type. What data structure would allow you to more quickly search without compromising too much on the speed of inserting and deleting tracks, even in the worst case? Hash Table + + +Write an algorithm using one of the methods from exercise 1 (your choice) to calculate the factorial of a number n. What is the time complexity of your method in terms of the input value? + +For any number “n”, multiply all numbers 1 through n. The product is the factorial of n. +Time complexity = O(n) + + +Write an Objective C or Swift function to multiply two numbers without using the * operator. Use the grade school method of multiplying by doing repeated addition. For instance, 5 * 8 = 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 = 40. Find the big O of your function in terms of n and m (the two operands). + +func multiplyByAddition(let numA: Int, let numB: Int) -> Int{ + +var sum = 0 + +for i in 0...numB { + +sum += numA +} + +return sum +} + + + +Look up Russian Peasant Multiplication. It’s a faster way to multiply numbers, especially on a binary computer (like yours!). Implement a new multiplication function using this technique and find the big O of your method. If you have trouble with implementing this, write a flow chart and find the big O based on that. (But it’s more satisfying to implement it and run it) + +Tip: Run through the method by hand a few times to see how it works and verify to yourself that it does. It’s a non-intuitive algorithm. This will hopefully also make the time complexity more clear. + + +Using the technique from exercise 4, profile the built in sorting method in objective C (use an NSMutableArray and google how to sort an array of numbers in objective C). Graph the result. Use spreadsheet formulas to add graph lines for n, n2, and n*log(n). (You’ll have to modify the factors to make them fit in the graph window and to be close to the graph of method execution time). Show that the sort method best fits n * log(n). + + +*/ \ No newline at end of file From f7cc70140d790aae44adae1bdb3961ee2a24a88a Mon Sep 17 00:00:00 2001 From: Justine Gartner Date: Fri, 15 Jan 2016 14:10:48 -0500 Subject: [PATCH 03/27] Cleaned up the Big O homework --- .../Contents.swift | 146 ++++++------------ 1 file changed, 49 insertions(+), 97 deletions(-) diff --git a/HWfrom1-10-016(BigO).playground/Contents.swift b/HWfrom1-10-016(BigO).playground/Contents.swift index 30d16b2..93bdb09 100644 --- a/HWfrom1-10-016(BigO).playground/Contents.swift +++ b/HWfrom1-10-016(BigO).playground/Contents.swift @@ -11,151 +11,103 @@ Use the link here to get the questions. Then code your solutions below. If it https://docs.google.com/document/d/1aF1imJUVahCSJAuN1OEm5lQXwpSFaAmVmAETKMM6PLQ/edit#heading=h.za36ai6n5fth -1) +1a) How long would my computer take to execute the following code if the input image is 1000px wide by 2000px tall? What if it’s n by m? 1000px by 2000px = 3 + 15 + 15 + 202 = 237 = O(1) (Right? Because the algorithm doesn’t depend on the input) n by m = 3 + 15n + 15n^2 + 202n^2 = 217n^2 => O(n^2 x m) -2) + +1b) What is the time complexity of this method, expressed in big O notation? Assume the image is square, and both dimensions are ‘n’. O(n^3) (Because n by m = O(n^2 x m) so n by n would be O(n^2 x n) = O(n^3), yes?) -3) + +1c) My friend sends me an improved version of his algorithm, makeEvenMoreAwesome, that takes into account the pixels around the image. He says it’s O(n2) in the amount of pixels in the image. What is the new time complexity of the method? It stays the same. O(n^2 x m) -4) -If foo(xs) is a function with time complexity n (where n is the size of the input array), and bar(xs) is a function with time complexity n2, what is the time complexity of each of the following snippets of code or algorithms? - - - - -5) - -6) - -7) - - -*/ - -/* -Big O Homework -With my new top of the line XJ452 supercomputer, memory access takes 1 picosecond, math operations take 3 picoseconds, and storing data in memory takes 10 picoseconds. My friend wrote a filter that makes a pixel more awesome, and takes 200 picoseconds to run. -Read: 1 ps -Math: 3ps -Write: 10ps -How long would my computer take to execute the following code if the input image is 1000px wide by 2000px tall? What if it’s n by m? - - -Pixel **awesomeFilter(Pixel image[][]1, int width1, int height1)3 -{ -for (int i = 010; i1 < width1; i++3) { // 15n -for (int j = 010; j1 < height1; j++3) {// 15n * n -[image[i]1[j]1 makeMoreAwesome200];//202 * n * n -} -} -return image; -} -n by m = 3 + 15n + 15n^2 + 202n^2 = 217n^2 => O(n^2 x m) -1000px by 2000px = 3 + 15 + 15 + 202 = 237 = O(1) (Right? Because the algorithm doesn’t depend on the input) - - -What is the time complexity of this method, expressed in big O notation? Assume the image is square, and both dimensions are ‘n’. -O(n^3) -(Because n by m = O(n^2 x m) so n by n would be O(n^2 x n) = O(n^3), yes?) - -My friend sends me an improved version of his algorithm, makeEvenMoreAwesome, that takes into account the pixels around the image. He says it’s O(n2) in the amount of pixels in the image. What is the new time complexity of the method? It stays the same. O(n^2 x m) - +2a) If foo(xs) is a function with time complexity n (where n is the size of the input array), and bar(xs) is a function with time complexity n2, what is the time complexity of each of the following snippets of code or algorithms? - -for (int i = 0; i < n; i++) { //n -for (int j = 0; j < n; j++) {//n * n -foo(xs); //n * n * n -} -} -for (int i = 0; i < n; i++) {//n -for (int j = 0; j < n; j++) {// n * n -bar(xs);// n^2 * n * n -} -} -for (int i = 0; i < n; i++) {// n -for (int j = 0; j < n; j++) {// n * n -// do cool stuff -} -} -n + n^2 + n^3 + n + n^2 + n^4 + n + n^2 = n^4 =>>> O(n^4) + n + n^2 + n^3 + n + n^2 + n^4 + n + n^2 = n^4 =>>> O(n^4) -int frobnicate(ys, m) { -if (m == 0) { -return 0; -} -return ys[m] + frobnicate(ys, m - 1); -} -frobnicate(xs, n); +2b) + O(n) -Tip: Write down a table with n from 0 to 5 and trace through to find out how many times frobnicate is called with each value of n. (Not really sure how to do this) + Tip: Write down a table with n from 0 to 5 and trace through to find out how many times frobnicate is called with each value of n. + (Not really sure how to do this) +2c) An algorithm that takes as its input a list of friends of length n, filters out duplicates using a method similar to our hasDuplicates method, sorts the list using merge sort (see bigocheatsheet.com), then prints each item to the screen. -if hasDuplicates = O(n^2) -and if mergeSort = O(n log(n)) -then… I’m not quite sure how to add them together... - - -An algorithm that searches the now-sorted list of friends for a specific friend (not including the time it takes to sort). O(n) + If hasDuplicates = O(n^2) + And if mergeSort = O(n log(n)) + Then… + I’m not quite sure how to add them together... -Look at the complexities for some common data structures at bigocheatsheet.com. Pick a good data structure for each of the following scenarios (there are sometimes multiple answers): +2d) +An algorithm that searches the now-sorted list of friends for a specific friend (not including the time it takes to sort). + + O(n) -You get a large dataset of points of interest from an API when your app first runs. You build it once at the beginning, and then have to search it many times while the user pans around a map. Array +3a) + Array -You get a small dataset of points of interest from an API every time the user pans the map. You construct the data set many times and only render it once, then you discard it and do another API search. Stack or List -Tip: Constructing a dataset of size n means you have to call the data structure’s insert method n times. So if the data structure has an insert method that takes O(n2), the time to build it all from scratch is O(n3). +3b) + Stack or List -You used a linked list for your music app’s playlist feature, but now when people search their playlist, there’s a noticeable lag before loading results. Your competitor’s app is buttery smooth when searching, even showing results as you type. What data structure would allow you to more quickly search without compromising too much on the speed of inserting and deleting tracks, even in the worst case? Hash Table +3c) + Hash Table +4) Write an algorithm using one of the methods from exercise 1 (your choice) to calculate the factorial of a number n. What is the time complexity of your method in terms of the input value? -For any number “n”, multiply all numbers 1 through n. The product is the factorial of n. -Time complexity = O(n) - + For any number “n”, multiply all numbers 1 through n. The product is the factorial of n. + Time complexity = O(n) +5) Write an Objective C or Swift function to multiply two numbers without using the * operator. Use the grade school method of multiplying by doing repeated addition. For instance, 5 * 8 = 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 = 40. Find the big O of your function in terms of n and m (the two operands). - +*/ func multiplyByAddition(let numA: Int, let numB: Int) -> Int{ + + var sum = 0 + + for _ in 0...numB { + + sum += numA + } + + return sum +} +/* -var sum = 0 - -for i in 0...numB { -sum += numA -} -return sum -} +6) +Look up Russian Peasant Multiplication. It’s a faster way to multiply numbers, especially on a binary computer (like yours!). Implement a new multiplication function using this technique and find the big O of your method. -Look up Russian Peasant Multiplication. It’s a faster way to multiply numbers, especially on a binary computer (like yours!). Implement a new multiplication function using this technique and find the big O of your method. If you have trouble with implementing this, write a flow chart and find the big O based on that. (But it’s more satisfying to implement it and run it) +7) +Using the technique from exercise 4, profile the built in sorting method in objective C (use an NSMutableArray and google how to sort an array of numbers in objective C). -Tip: Run through the method by hand a few times to see how it works and verify to yourself that it does. It’s a non-intuitive algorithm. This will hopefully also make the time complexity more clear. -Using the technique from exercise 4, profile the built in sorting method in objective C (use an NSMutableArray and google how to sort an array of numbers in objective C). Graph the result. Use spreadsheet formulas to add graph lines for n, n2, and n*log(n). (You’ll have to modify the factors to make them fit in the graph window and to be close to the graph of method execution time). Show that the sort method best fits n * log(n). +Here's a link to my notes: +https://docs.google.com/document/d/1LkEgzBhDxOQqecoH4CyhOqCKsCn6XpPyO7e47a8hnik/edit?usp=sharing +*/ -*/ \ No newline at end of file From ae1764c5036f22da0d8d21633604680e529c847b Mon Sep 17 00:00:00 2001 From: Justine Gartner Date: Fri, 15 Jan 2016 18:10:17 -0500 Subject: [PATCH 04/27] Logic+DiscreteMath, Questions 1 & 2 completed --- .../Contents.swift | 49 +++++++++++++++++++ .../contents.xcplayground | 2 +- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/HWfrom1-14-16(Logic+Discrete_Math).playground/Contents.swift b/HWfrom1-14-16(Logic+Discrete_Math).playground/Contents.swift index bc0df91..f277b88 100644 --- a/HWfrom1-14-16(Logic+Discrete_Math).playground/Contents.swift +++ b/HWfrom1-14-16(Logic+Discrete_Math).playground/Contents.swift @@ -10,13 +10,62 @@ var str = "Hello, playground" Question 1: https://www.hackerrank.com/challenges/minimum-draws Copy and paste your code: +*/ + +//Maximum number of draws will always equal the number of pairs + 1. + +func maxDraws(let n:Int) -> Int +{ + return n + 1 +} + +let numOfPairs = 3 +maxDraws(numOfPairs) +/* What is the big O runtime of your code?: +0(1) + + Question 2: https://www.hackerrank.com/challenges/handshake Copy and paste your code: +*/ +//Total number of Handshakes (Combinations) +// C(n,2) +// n! / 2! * (n-2)! + +func factorial(var n: Int) -> Int +{ + var num = n - 1 + + for _ in 1.. Int +{ + + return factorial(n) / (factorial(2) * factorial(n - 2)) +} + +handshakes(3) +handshakes(5) + + +/* What is the big O runtime of your code?: Question 3: https://www.hackerrank.com/challenges/connecting-towns diff --git a/HWfrom1-14-16(Logic+Discrete_Math).playground/contents.xcplayground b/HWfrom1-14-16(Logic+Discrete_Math).playground/contents.xcplayground index 5da2641..9f5f2f4 100644 --- a/HWfrom1-14-16(Logic+Discrete_Math).playground/contents.xcplayground +++ b/HWfrom1-14-16(Logic+Discrete_Math).playground/contents.xcplayground @@ -1,4 +1,4 @@ - + \ No newline at end of file From 4edb6f4aa5a4e6d22686852005f06b8a0115052b Mon Sep 17 00:00:00 2001 From: Justine Gartner Date: Fri, 15 Jan 2016 19:04:45 -0500 Subject: [PATCH 05/27] Added big O runtime for question 2 --- HWfrom1-14-16(Logic+Discrete_Math).playground/Contents.swift | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/HWfrom1-14-16(Logic+Discrete_Math).playground/Contents.swift b/HWfrom1-14-16(Logic+Discrete_Math).playground/Contents.swift index f277b88..9ee983c 100644 --- a/HWfrom1-14-16(Logic+Discrete_Math).playground/Contents.swift +++ b/HWfrom1-14-16(Logic+Discrete_Math).playground/Contents.swift @@ -25,7 +25,7 @@ maxDraws(numOfPairs) /* What is the big O runtime of your code?: -0(1) + 0(1) Question 2: https://www.hackerrank.com/challenges/handshake @@ -68,6 +68,9 @@ handshakes(5) /* What is the big O runtime of your code?: +0(n^2) + + Question 3: https://www.hackerrank.com/challenges/connecting-towns Copy and paste your code: From dfb445284d23289ed3ad85b34709209beaef9c04 Mon Sep 17 00:00:00 2001 From: Justine Gartner Date: Mon, 18 Jan 2016 19:29:08 -0500 Subject: [PATCH 06/27] Updated --- .../Contents.swift | 45 ++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/HWfrom1-14-16(Logic+Discrete_Math).playground/Contents.swift b/HWfrom1-14-16(Logic+Discrete_Math).playground/Contents.swift index 9ee983c..6f711ab 100644 --- a/HWfrom1-14-16(Logic+Discrete_Math).playground/Contents.swift +++ b/HWfrom1-14-16(Logic+Discrete_Math).playground/Contents.swift @@ -65,17 +65,60 @@ handshakes(3) handshakes(5) + +//Second solution +//Break down the C(n,2) formula +//so that factorials are not necessary + +func handshakes2(let n: Int) -> Int +{ + + return n * (n-1) / 2 +} + +handshakes2(3) +handshakes2(5) + + /* What is the big O runtime of your code?: + + First solution + 0(n^2) -0(n^2) + Second solution + O(n^2) Question 3: https://www.hackerrank.com/challenges/connecting-towns +For x number of towns there are an array of [a, b, c, ...] numbers of routes between each pair of towns. +We are given x and [a, b, c, ...] +You can find the number of routes by multiplying each number of routes together + Copy and paste your code: +*/ +func totalRoutes(let routes: [Int]) -> Int +{ + var productOfRoutes = 1 + + for i in 0.. Date: Mon, 18 Jan 2016 19:41:43 -0500 Subject: [PATCH 07/27] Began working on HWFrom1-17-16 --- .../Contents.swift | 41 +++++++++++++++++-- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift b/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift index 5d51051..26cd218 100644 --- a/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift +++ b/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift @@ -9,18 +9,51 @@ var str = "Hello, playground" Work on your solutions here. + + + Link: https://docs.google.com/document/d/1XioaEqk6VqUPA-ccQhkqP3eAoDthxYyOM9vSPB7fDkg/edit#heading=h.uopysoy45zmw -1) +1) Given a partially filled in Sudoku board and a set of coordinates in that board pointing to an empty square, write a function that returns a list containing all numbers that the empty square could be + Input: sudokuBoard:[[Int?]]. (Each location on the board will be either be an Int from 1-9 or nil(empty cell)) + row: Int + col: Int +*/ +func getValidNumbers(sudokuBoard:[[Int?]], row:Int, col:Int) -> [Int] { + + + return [] +} -2) +/* -3) +2)rotate a matrix by ninety degrees +Input: matrix:[[Int]] +Output: matrix: [[Int]] +Sample Input: [ [1][2][3][4], +[5][6][7][8], +[9][0][1][2], +[3][4][5][6] ] +Sample Output: [ [3][9][5][1], +[4][0][6][2], +[5][1][7][3], +[6][2][8][4] ] +*/ + + +/* +3)Design an optimal algorithm for sorting four elements A, B, C, and D. + + By optimal, I mean one that sorts using the minimum number of comparisons. + Hint: you may want to start by putting the first two items in order + and the last two items in order... that takes two comparisons. -*/ \ No newline at end of file + How many more comparisons do you need to find the minimum element? The maximum? + Once you’ve found the min and max, what if any additional comparisons are needed? +*/ From 91dc8fed1d2e99e161df1c8ff280508949dcde31 Mon Sep 17 00:00:00 2001 From: Justine Gartner Date: Wed, 20 Jan 2016 20:00:39 -0500 Subject: [PATCH 08/27] Question 1 answered --- .../Contents.swift | 100 +++++++++++++++++- 1 file changed, 98 insertions(+), 2 deletions(-) diff --git a/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift b/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift index 26cd218..f5e656d 100644 --- a/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift +++ b/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift @@ -21,12 +21,108 @@ Link: https://docs.google.com/document/d/1XioaEqk6VqUPA-ccQhkqP3eAoDthxYyOM9vSPB col: Int */ -func getValidNumbers(sudokuBoard:[[Int?]], row:Int, col:Int) -> [Int] { +let sudokuBoard = [ + [5, 0, 8, 0, 7, 3, 1, 9, 0], + [9, 0, 0, 6, 0, 0, 4, 0, 8], + [0, 0, 0, 9, 0, 8, 0, 3, 5], + [0, 7, 0, 0, 0, 0, 0, 6, 0], + [0, 0, 2, 0, 0, 0, 9, 0, 0], + [0, 1, 0, 0, 0, 0, 0, 8, 0], + [1, 9, 0, 3, 0, 6, 0, 0, 0], + [2, 0, 3, 0, 0, 7, 0, 0, 9], + [0, 8, 7, 1, 9, 0, 3, 0, 4]] + + +func booleanArr (arr:[Int]) -> [Bool]{ + //create an array of false bools to match the input array - return [] + let booleanArr = Array(count: arr.count+1, repeatedValue: false) + + return booleanArr + +} + + +func possibleNumbers(arr:[Int], inout booleanArr: [Bool]) -> [Bool] { + + + //loop through the input arr and change + //the bool of the same index as the integer + //in the corresponding array + + for num in arr { + + //Change (the input num)index of the boolean arr + //to true + + booleanArr[num] = true + } + + + + + return booleanArr +} + +func allPossibleNumbers(booleanArr: [Bool]) -> [Int] +{ + + var possibleNums = [Int]() + + //If the bool in our boolean arr is false + //add that index num to our availableNum arr + + for i in 1.. [Int] +{ + + var validNums = [Int]() + + + // create row array + let rowArr = sudokuBoard[row] + print("row \(rowArr)") + + var columnArr: [Int] = [] + var square: [Int] = [] + + for i in 0.. Date: Wed, 20 Jan 2016 22:15:02 -0500 Subject: [PATCH 09/27] Question 2 solved for 4x4 matrix, must adjust func to any size --- .../Contents.swift | 49 ++++++++++++++++--- .../contents.xcplayground | 2 +- 2 files changed, 44 insertions(+), 7 deletions(-) diff --git a/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift b/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift index f5e656d..2f2268f 100644 --- a/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift +++ b/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift @@ -132,15 +132,52 @@ Input: matrix:[[Int]] Output: matrix: [[Int]] Sample Input: [ [1][2][3][4], -[5][6][7][8], -[9][0][1][2], -[3][4][5][6] ] + [5][6][7][8], + [9][0][1][2], + [3][4][5][6] ] + Sample Output: [ [3][9][5][1], -[4][0][6][2], -[5][1][7][3], -[6][2][8][4] ] + [4][0][6][2], + [5][1][7][3], + [6][2][8][4] ] */ +var matrix = [[1,2,3,4], + [5,6,7,8], + [9,0,1,2], + [3,4,5,6]] + + +func rotateMatrix90Degrees(inout grid: [[Int]]) ->[[Int]] +{ + var tempGrid = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]] + + for i in 0.. - + \ No newline at end of file From 54e2962a6bd6353fb514563c860f349814508083 Mon Sep 17 00:00:00 2001 From: Justine Gartner Date: Thu, 21 Jan 2016 01:00:02 -0500 Subject: [PATCH 10/27] Question 2 answer updated --- .../Contents.swift | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift b/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift index 2f2268f..81e9fdf 100644 --- a/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift +++ b/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift @@ -150,24 +150,20 @@ var matrix = [[1,2,3,4], func rotateMatrix90Degrees(inout grid: [[Int]]) ->[[Int]] { - var tempGrid = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]] - - for i in 0.. Date: Thu, 21 Jan 2016 02:00:05 -0500 Subject: [PATCH 11/27] cleaned up --- HWFrom1-17-16(Lists and Sorts).playground/Contents.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift b/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift index 81e9fdf..b5bd9a2 100644 --- a/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift +++ b/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift @@ -161,7 +161,6 @@ func rotateMatrix90Degrees(inout grid: [[Int]]) ->[[Int]] tempGrid[i][j] = grid[count-1-j][i] } - print("j: \(i)") } print("TempGrid: \(tempGrid)") @@ -186,3 +185,5 @@ rotateMatrix90Degrees(&matrix) How many more comparisons do you need to find the minimum element? The maximum? Once you’ve found the min and max, what if any additional comparisons are needed? */ + + From c90fc20dea42d387e37ce4ff3a7b8eeae600aeb9 Mon Sep 17 00:00:00 2001 From: Justine Gartner Date: Thu, 21 Jan 2016 14:09:35 -0500 Subject: [PATCH 12/27] Question 3 answered with Ints. Will try to sort strings as well --- .../Contents.swift | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift b/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift index b5bd9a2..5837d5e 100644 --- a/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift +++ b/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift @@ -187,3 +187,46 @@ rotateMatrix90Degrees(&matrix) */ +let A = 1 +let B = 2 +let C = 3 +let D = 4 +var fourElementArr = [D, A, C, B] + +let E = 1 +let F = 21 +let G = 49 +let H = 365 +var anotherFourElementArr = [H, G, E, F] + +func sortFourElements(inout arr:[Int]) ->[Int] +{ + let maxIndex = arr.count - 1 + let midIndex = maxIndex / 2 + + for _ in midIndex...maxIndex { + + if arr[midIndex] arr[maxIndex-1] { + + (arr[midIndex], arr[maxIndex-1]) = (arr[maxIndex-1], arr[midIndex]) + } + } + + + + + return arr +} + +sortFourElements(&fourElementArr) +sortFourElements(&anotherFourElementArr) From 1192fafb3cd0cb52cac452bf1cebbc65fb74e6d5 Mon Sep 17 00:00:00 2001 From: Justine Gartner Date: Thu, 21 Jan 2016 18:29:35 -0500 Subject: [PATCH 13/27] sorted single char strings for Question 3 --- .../Contents.swift | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift b/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift index 5837d5e..a567095 100644 --- a/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift +++ b/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift @@ -230,3 +230,66 @@ func sortFourElements(inout arr:[Int]) ->[Int] sortFourElements(&fourElementArr) sortFourElements(&anotherFourElementArr) + + +//With single char strings +let I = "I" +let J = "J" +let K = "K" +let L = "L" +var fourStringArr = [I, L, K, J] + +let M = "M" +let N = "N" +let O = "O" +let P = "P" +var anotherFourStringArr = [P, O, M, N] + +func unicodeStringValue(str: String) ->Int +{ + + let singleCharString = str as NSString + let singleCharValue = Int(singleCharString.characterAtIndex(0)) + print("The value of \(singleCharString) is \(singleCharValue)") + + return singleCharValue +} + + +func sortFourStrings(inout arr:[String]) ->[String] +{ + for str in arr { + + unicodeStringValue(str) + } + + let maxIndex = arr.count - 1 + let midIndex = maxIndex / 2 + + for _ in midIndex...maxIndex { + + if arr[midIndex] arr[maxIndex-1] { + + (arr[midIndex], arr[maxIndex-1]) = (arr[maxIndex-1], arr[midIndex]) + } + } + + + + + return arr +} + +sortFourStrings(&fourStringArr) +sortFourStrings(&anotherFourStringArr) + From 6791eab2003481d0e2bf8323d016b8062f37c04a Mon Sep 17 00:00:00 2001 From: Justine Gartner Date: Thu, 21 Jan 2016 18:42:11 -0500 Subject: [PATCH 14/27] Refined the func for strings in Q3 --- .../Contents.swift | 26 +++++-------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift b/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift index a567095..572ef40 100644 --- a/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift +++ b/HWFrom1-17-16(Lists and Sorts).playground/Contents.swift @@ -239,31 +239,18 @@ let K = "K" let L = "L" var fourStringArr = [I, L, K, J] -let M = "M" -let N = "N" -let O = "O" -let P = "P" +let M = "Monopoly" +let N = "Neuron" +let O = "Ocean" +let P = "Polar Bear" var anotherFourStringArr = [P, O, M, N] -func unicodeStringValue(str: String) ->Int -{ - - let singleCharString = str as NSString - let singleCharValue = Int(singleCharString.characterAtIndex(0)) - print("The value of \(singleCharString) is \(singleCharValue)") - - return singleCharValue -} +var mArr = ["Monkey", "Mission", "Marmalade", "Mars"] func sortFourStrings(inout arr:[String]) ->[String] { - for str in arr { - - unicodeStringValue(str) - } - - let maxIndex = arr.count - 1 + let maxIndex = arr.count - 1 let midIndex = maxIndex / 2 for _ in midIndex...maxIndex { @@ -292,4 +279,5 @@ func sortFourStrings(inout arr:[String]) ->[String] sortFourStrings(&fourStringArr) sortFourStrings(&anotherFourStringArr) +sortFourStrings(&mArr) From eeec02bee290bd1ccdd8642f48f597634df5cc00 Mon Sep 17 00:00:00 2001 From: Justine Gartner Date: Wed, 27 Jan 2016 19:57:57 -0500 Subject: [PATCH 15/27] Question 2 answered, wrote a new tryStep method as well :) --- .DS_Store | Bin 8196 -> 10244 bytes .../Contents.swift | 117 +++++++++++++++++- .../contents.xcplayground | 2 +- 3 files changed, 115 insertions(+), 4 deletions(-) diff --git a/.DS_Store b/.DS_Store index d5d352a9979631f07c0fb576646439417abb8211..799959c977e231ff8b220847eda2bd53db7fa33c 100644 GIT binary patch literal 10244 zcmeI1L2DC16vzKldno9^TaPYOX-bK7YpIBrC9I-Q5zL`SBS}q##)LFMyzR+@;L%Ue zFHmn@6u&?bMDK!M!J8NVZ)OOyYzoorwt{b9=D(SpnK${p-3jjnfN6|7F%SV*Vimo7 ziOrNE_oWufg6~%tsP202`B+2pahh_zd(S$*;1A+I@MMQC;=rf zAt2{N#44J2&79h!gN+RVsEh2jh1ZM&?3~DJ;x%(>r*cgfJs3aL_z=Um>AWAwaBAW; zbLytUxalz7vhfj$vDP^+vcq8#r`jq3B~TUNoH_xfqt8IRh)mk&q3tcB9{-RpNM zTYIn{GHJ=iuM~L4%$P{l#1U_hcNY(5qrCoO{uKkZAAi1;EzY~gfM`i8PT^Re!f}fn z9mO3!r(Ke4V;w2=kXJ+O@d@6;V?5xqJHq~KjIX^RkqWH^{6DR{xBM%$HhJ35z}ghQ zty#a_4bGbwHv_+kuSTp9eZ*6R+N3Xswr{4B=k_ZytiVd(r;~Tzt)D8fGVxD^R`Pzy zhBQ z{x`A3U)sMUy!x$-H3PPvm%qw3=ig`kySMD3+9&}fpahhF5>Nu?O5lRC9!dWH&guXE zpX(mgxDrqT)eV3! zvM`zbo4igmY_fn5H}i2>mdR^GBPI(7!q{ny1se;$FbXmQjR67)ZXn?bGI3+!cjn3b YDuEn~5PKLV$MZ~`{8z*cmmwb+0gFs0V*mgE diff --git a/HWFrom1-24(Recursion).playground/Contents.swift b/HWFrom1-24(Recursion).playground/Contents.swift index 1c44504..2070538 100644 --- a/HWFrom1-24(Recursion).playground/Contents.swift +++ b/HWFrom1-24(Recursion).playground/Contents.swift @@ -1,3 +1,6 @@ +import Foundation + + /* @@ -8,18 +11,126 @@ Homework link: https://docs.google.com/document/d/1INvOynuggw69yLRNg3y-TPwBiYb3l */ +/* +***********Question 1 +Write an iterative (not recursive) fibonacci function +that calculates the nth fibonacci number. +*/ + +let fibSeq = [1, 1, 2, 3, 5, 8, 13, 21] +// 0 1 2 3 4 5 6 + +func fibIterative(n: Int) -> Int +{ + if n == 1 || n == 0 { + + return 1 + } + + var fibNumArr = [1,1] + var tempSum = 0 + + for i in 1...n-1 { + + tempSum = fibNumArr[i] + fibNumArr[i-1] + //print(tempSum) + fibNumArr.append(tempSum) + } + + return tempSum +} + +fibIterative(9) +fibIterative(1) + + +//Non-memoized fibREcursive +//func fib(n: Int) -> Int { +// +// if (n == 0 || n == 1) { +// return 1 +// } +// return fib(n - 1) + fib(n - 2) +//} +// +//fib(9) +//fib(1) + +/* +How does its performance compare with the non-memoized +recursive one (see Appendix A below), based on the number +of iterations that Swift says it takes in the right margin? -//Question 1 + - Wow. The recursive function runs over 10 times the number of times the iterative function runs. +*/ +/* +***********Question 2 +The engineers have been hard at work on the clumsy robot project, +and have released a new API with a new tryStep method (see Appendix B). +Now it returns an Int, which is: +-1 if the robot fell down a step, +0 if the robot stayed on the same step, +or 1 if the robot went to the next step. -//Question 2 +Write a new stepUp method using this new tryStep method that works the same as before. +*/ +func tryStep() -> Int { + + let step = Int(arc4random_uniform(3)) + + switch step { + + case 0 : + print("Stepped Down") + return -1 + + case 1 : + print("Stayed on the same step") + return 0 + + case 2 : + print("Stepped up!") + return 1 + + default: + + return 0 + + } + +} + +tryStep() + +func stepUp(var stepCounter: Int = 0) { + + stepCounter += tryStep() + print(stepCounter) + if stepCounter == 1 { + + return + } + + stepUp(stepCounter) + +} + +stepUp() +/* +***********Question 3 +Using the code in Appendix C as a starting point, +create a Swift command line project to find files on your computer by name. +Your solution should use recursion. +Your method should return “NOT FOUND” if it couldn’t find the file, +otherwise it should return the full path to that file. +*/ -//Question 3 \ No newline at end of file diff --git a/HWFrom1-24(Recursion).playground/contents.xcplayground b/HWFrom1-24(Recursion).playground/contents.xcplayground index 5da2641..9f5f2f4 100644 --- a/HWFrom1-24(Recursion).playground/contents.xcplayground +++ b/HWFrom1-24(Recursion).playground/contents.xcplayground @@ -1,4 +1,4 @@ - + \ No newline at end of file From d57b6c7aabb855dc29708dab7d6359ef4605b2b0 Mon Sep 17 00:00:00 2001 From: Justine Gartner Date: Thu, 28 Jan 2016 01:20:18 -0500 Subject: [PATCH 16/27] Question 3 completed successfully --- .DS_Store | Bin 10244 -> 10244 bytes .../Contents.swift | 41 ++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/.DS_Store b/.DS_Store index 799959c977e231ff8b220847eda2bd53db7fa33c..6df01a832e9e654144d6fb57cc7ed9f08850ed33 100644 GIT binary patch delta 39 pcmZn(XbISGPMk^S(&P)`0W3+685n>Jm&rMT!keolg83m5CIB(Z4u}8% delta 39 pcmZn(XbISGPMk^o>f{UJ0W9KI7#M&Im&rMT!keolg83m5CIBfK4k`cu diff --git a/HWFrom1-24(Recursion).playground/Contents.swift b/HWFrom1-24(Recursion).playground/Contents.swift index 2070538..874daae 100644 --- a/HWFrom1-24(Recursion).playground/Contents.swift +++ b/HWFrom1-24(Recursion).playground/Contents.swift @@ -134,3 +134,44 @@ Your method should return “NOT FOUND” if it couldn’t find the file, otherwise it should return the full path to that file. */ +//func findFile(name: String, atPath: String) -> String { +// let fileManager = NSFileManager.defaultManager() +// let contents = +// try! fileManager.contentsOfDirectoryAtPath(atPath) +// for fileOrDir in contents { +// var isDir = ObjCBool(false); +// let fullPath = atPath + "/" + fileOrDir +// let exists = fileManager.fileExistsAtPath(fullPath, isDirectory: &isDir) +// if exists && Bool(isDir) { +// +// print("DIR: " + fileOrDir + "Path: " + fullPath) +// +// let found = findFile(name, atPath: fullPath) +// +// if found != "NOT FOUND" { +// +// return found +// } +// +// +// } else if exists { +// +// if fileOrDir == name { +// +// return ("Found file: " + name + "At Path: " + fullPath) +// +// }else { +// +// print("FILE: " + fileOrDir) +// +// } +// +// } else { +// print("NEITHER: " + fileOrDir) +// +// } +// } +// return "NOT FOUND" +//} +// +//print(findFile("PriceList.docx", atPath: "/Users/justinegartner/Documents")) From 2b1a543ae74a2dad0268ae0401ecbfcd068230b5 Mon Sep 17 00:00:00 2001 From: Justine Gartner Date: Thu, 28 Jan 2016 18:53:38 -0500 Subject: [PATCH 17/27] Minor refinement --- HWFrom1-24(Recursion).playground/Contents.swift | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/HWFrom1-24(Recursion).playground/Contents.swift b/HWFrom1-24(Recursion).playground/Contents.swift index 874daae..484fd5f 100644 --- a/HWFrom1-24(Recursion).playground/Contents.swift +++ b/HWFrom1-24(Recursion).playground/Contents.swift @@ -33,7 +33,6 @@ func fibIterative(n: Int) -> Int for i in 1...n-1 { tempSum = fibNumArr[i] + fibNumArr[i-1] - //print(tempSum) fibNumArr.append(tempSum) } @@ -158,7 +157,7 @@ otherwise it should return the full path to that file. // // if fileOrDir == name { // -// return ("Found file: " + name + "At Path: " + fullPath) +// return ("Found file: " + name + " At Path: " + fullPath) // // }else { // From bbf5c75b56941250476f23ded0c301b009250717 Mon Sep 17 00:00:00 2001 From: Justine Gartner Date: Fri, 29 Jan 2016 14:02:19 -0500 Subject: [PATCH 18/27] No Changes --- .../Contents.swift | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/HWFrom1-24(Recursion).playground/Contents.swift b/HWFrom1-24(Recursion).playground/Contents.swift index 484fd5f..00cfe34 100644 --- a/HWFrom1-24(Recursion).playground/Contents.swift +++ b/HWFrom1-24(Recursion).playground/Contents.swift @@ -122,6 +122,24 @@ func stepUp(var stepCounter: Int = 0) { stepUp() +func stepUpUp() { + + switch tryStep() { + + case 1: + return + + case -1: + stepUpUp() + stepUpUp() + + default: + stepUpUp() + } +} + +stepUpUp() + /* ***********Question 3 From 633d81a8a4778989dc7d3ec70f1519da0ab17279 Mon Sep 17 00:00:00 2001 From: Justine Gartner Date: Fri, 29 Jan 2016 16:46:52 -0500 Subject: [PATCH 19/27] Created a recursive insertion sort method --- .../Contents.swift | 56 +++++++++++++++++++ .../contents.xcplayground | 2 +- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/HWFrom1-28-16(Merge Sort).playground/Contents.swift b/HWFrom1-28-16(Merge Sort).playground/Contents.swift index afdc1b6..64b393f 100644 --- a/HWFrom1-28-16(Merge Sort).playground/Contents.swift +++ b/HWFrom1-28-16(Merge Sort).playground/Contents.swift @@ -1,6 +1,62 @@ //: Playground - noun: a place where people can play //https://docs.google.com/document/d/1rlQ3lstnNb3fOR58EwGDysMQ0FSDkUGykcCoU14B9Go/edit#heading=h.za36ai6n5fth +/* +Use recursion to implement at least one of the following sorting algorithms in Swift: +Insertion sort OR Selection sort +REQUIREMENTS: +You may not use loops +Your implementations should be in-place (try not to create additional arrays) +You should implement and use additional helper functions + +TIPS: +- Add additional parameters to your helper functions +to pass information between recursive calls + +- You can use the swap function to exchange two values in a mutable (var) array: + +var array = [1, 2] +swap(&array[0], &array[1]) +array // [2, 1] + +*/ //Insert code here: + + + +//*******Insertion Sort********* + + +func insertionSort(inout values: [Int]) +{ + + func insertHelper(inout values: [Int], index: Int) { + + if index < values.count - 1 { + + let lastIndex = values.removeLast() + print("last index: \(lastIndex)") + + if lastIndex < values[index] { + + values.insert(lastIndex, atIndex: index) + print("newValues: \(values)") + insertHelper(&values, index: 0) + + }else { + values.append(lastIndex) + insertHelper(&values, index: index + 1) + } + + + } + } + + insertHelper(&values, index: 0) + +} + +var values = [46, 45, 3, 23, 1, 9] +insertionSort(&values) \ No newline at end of file diff --git a/HWFrom1-28-16(Merge Sort).playground/contents.xcplayground b/HWFrom1-28-16(Merge Sort).playground/contents.xcplayground index 5da2641..9f5f2f4 100644 --- a/HWFrom1-28-16(Merge Sort).playground/contents.xcplayground +++ b/HWFrom1-28-16(Merge Sort).playground/contents.xcplayground @@ -1,4 +1,4 @@ - + \ No newline at end of file From 495e66985137294261cc21470ac6cc921eac5278 Mon Sep 17 00:00:00 2001 From: Justine Gartner Date: Fri, 29 Jan 2016 17:41:00 -0500 Subject: [PATCH 20/27] Added second solution using swap --- .../Contents.swift | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/HWFrom1-28-16(Merge Sort).playground/Contents.swift b/HWFrom1-28-16(Merge Sort).playground/Contents.swift index 64b393f..c4e1c2e 100644 --- a/HWFrom1-28-16(Merge Sort).playground/Contents.swift +++ b/HWFrom1-28-16(Merge Sort).playground/Contents.swift @@ -29,6 +29,8 @@ array // [2, 1] //*******Insertion Sort********* +//**** First Solution **** + func insertionSort(inout values: [Int]) { @@ -43,9 +45,11 @@ func insertionSort(inout values: [Int]) values.insert(lastIndex, atIndex: index) print("newValues: \(values)") + insertHelper(&values, index: 0) }else { + values.append(lastIndex) insertHelper(&values, index: index + 1) } @@ -59,4 +63,39 @@ func insertionSort(inout values: [Int]) } var values = [46, 45, 3, 23, 1, 9] -insertionSort(&values) \ No newline at end of file +insertionSort(&values) + + +//***** Solution 2 - Using Swap **** + +func insertionSort2(inout values: [Int]) +{ + print("*****InsertionSort2******") + func swapHelper(inout values: [Int], index: Int) { + + if index > 0 { + + print("last index: \(values[index])") + + if values[index] < values[index - 1] { + + swap(&values[index], &values[index - 1]) + print("newValues: \(values)") + + swapHelper(&values, index: values.count - 1) + + }else { + + swapHelper(&values, index: index - 1) + } + + + } + } + + swapHelper(&values, index: values.count - 1) + +} + +var values2 = [46, 45, 3, 23, 1, 9] +insertionSort2(&values2) From d88392d92d72631dc2615b0f070ae5578011b26b Mon Sep 17 00:00:00 2001 From: Justine Gartner Date: Wed, 3 Feb 2016 20:33:55 -0500 Subject: [PATCH 21/27] Question 6 answered --- .DS_Store | Bin 10244 -> 10244 bytes .../Contents.swift | 103 +++++++++++++++++- .../contents.xcplayground | 2 +- 3 files changed, 102 insertions(+), 3 deletions(-) diff --git a/.DS_Store b/.DS_Store index 6df01a832e9e654144d6fb57cc7ed9f08850ed33..2ff24b488ccdecfb7e28c5f64c8db609a7c13ffd 100644 GIT binary patch literal 10244 zcmeI1&ubGw6vw|?dnl;jf8b)2w1jGtmTK{`geVnSism4Av695J*qD$Xh_^j?5sxB> zw;sHB@ummGvmjVcJqrE{-n{sIGwU*8x3Zd@VsQp$-ez}Z-t6bizL_@x;8jP>GT;N4 zVHSDn1dEg;&m||)RCK36>9IY~MF(ZfV*x9P+U|xU;0QPZj({WJ2>c5KxMoY5Ij*HE z9RWwc5r_$hfAE<_29XT4RIY=C3IQmmd0Qo3GY(K~{743o47F5E*{6;kyr`)cg&3Z0 z&gZ^Vrwk$)YN?yU)6L;Un!PAO@sxJ9^Hp_tftIdx1RQ}R0g2tuVih-W7yYsLeV&p0 zGG@rPP|kdGxS@J9vn;x-;Ul=1#j@Z*)67t){q~XWyM}t=1e38^D)$ zyFZkM+{WGMHm&vD+cKGK%D_)2c$ax%BBv&rc$K`{*vLk?^lkDU4Yu#UKb0X)I!1$N zPCce@oKNAnM2?!`8s}-7BpWE9MmgYBA1%({7H(smb9acXY>dx6ArXt(4E`SqZxny4 z+Tz)M2-;HYHmB@%)$liETr}(^wi+_~v=O}uWu3O{t9zL|&*evCXhDl%r%$iHDmz)x z65Ge3mT|j;@-l_Q_f)}RY?mASZWAtFnf7KrIOeeCADNNm4J=QZ-?rA_huz9M2ze96!q}br(cR;&l+oP)pun pI`lsSW{n-`ADl86dmD?9xv`tKsAYUl6N(vJ{NLc|@_!Ql{{$EH6Jr1X delta 118 zcmZn(XbG6$&nUhzU^hRb_+$k^pUDfP_&28uu(2_AP0kYwWj?zhe6oVL&tw5XZYX;l mlg_2d7sUNp&nG=*U;wgQCL74|F(zy*oWQ=BT_KI2P7?qQ6(^+t diff --git a/HWFrom1-30-16(QuickSort+Lists+Queues).playground/Contents.swift b/HWFrom1-30-16(QuickSort+Lists+Queues).playground/Contents.swift index bcf8eda..8ec91a6 100644 --- a/HWFrom1-30-16(QuickSort+Lists+Queues).playground/Contents.swift +++ b/HWFrom1-30-16(QuickSort+Lists+Queues).playground/Contents.swift @@ -2,15 +2,114 @@ //Answer the questions in the homework below //https://docs.google.com/document/d/1KlK3PmRMybmHS5db_AP11uHXIcbIeM5vHuuAZOV3xME/edit# - +/* //1) +Without looking at the Big O Cheatsheet, write down the average time and space complexity for + +-bubble sort: + TIME: O(n^2) + SPACE: + +-insertion sort: + TIME: O(n) + SPACE: + +-selection sort: + TIME: O(n) + SPACE: + +-mergesort: + TIME: O(n log(n)) + SPACE: + +-quicksort: + TIME: O(n log(n)) + SPACE: + + //2) +What is the advantage of partitioning quicksort in place? + + -We save memory (Space complexity) because we don't have to create new arrays with every split. + + //3) +Without looking, implement quicksort. + + + //4) +Write a function to generate an array of random numbers bounded between 1..<10,000 of size 10,000. + +Int(arc4random_uniform(UInt32(10000))) + +Compare the time it takes to run mergesort, quicksort, and quicksort with the median. +https://gist.github.com/gummibeatz/8ff29bcec54d7e3ef683 + + + //5) +Describe the algorithmic difference between mergesort and quicksort. Where does the sorting happen? As the recursive calls are being pushed onto the stack or as they are being popped off? + + + + +//6) +Given an array of strings containing “[“,”]”,”{“,”}”,”(“,”)”. Output whether or not the parentheses are balanced. +Good examples: () [] () ([]()[]) +Bad examples: ( ( ] ([)] +*/ +func isBalanced(paren: [String]) -> Bool { + + var pStack = [String]() + + for str in paren { + + + switch str { + + case "(": + pStack.append(str) + + case "{": + pStack.append(str) + + case "[": + pStack.append(str) + + default: + if pStack.count != 0 { + + pStack.removeLast() + + }else { + + pStack.append(str) + } + + } + + print(pStack) + } + + + + return pStack.count == 0 +} + +let pStr = ["(","(",")",")"] +let pStr2 = ["{","}","{","}","}"] +let pStr3 = [")","(",")","(",")","(","(",")","("] +let pStr4 = ["(",")","{","}","[","]"] +let pStr5 = ["(","]","{",")","[","}"] + +isBalanced(pStr) +isBalanced(pStr2) +isBalanced(pStr3) +isBalanced(pStr4) +isBalanced(pStr5) -//6) \ No newline at end of file diff --git a/HWFrom1-30-16(QuickSort+Lists+Queues).playground/contents.xcplayground b/HWFrom1-30-16(QuickSort+Lists+Queues).playground/contents.xcplayground index 5da2641..9f5f2f4 100644 --- a/HWFrom1-30-16(QuickSort+Lists+Queues).playground/contents.xcplayground +++ b/HWFrom1-30-16(QuickSort+Lists+Queues).playground/contents.xcplayground @@ -1,4 +1,4 @@ - + \ No newline at end of file From 81a145065fc9e910046c5b0bfc5749e90da6241c Mon Sep 17 00:00:00 2001 From: Justine Gartner Date: Wed, 3 Feb 2016 21:50:36 -0500 Subject: [PATCH 22/27] Question 2 of Sets and Hash Maps answered --- .DS_Store | Bin 10244 -> 10244 bytes .../Contents.swift | 123 +++++++++++++++++- .../contents.xcplayground | 2 +- 3 files changed, 119 insertions(+), 6 deletions(-) diff --git a/.DS_Store b/.DS_Store index 2ff24b488ccdecfb7e28c5f64c8db609a7c13ffd..56d5b2d579914a589a20d241954281dcfa713a25 100644 GIT binary patch delta 68 zcmZn(XbG6$UDU^hRb;$#IupUDfP_&28utmT?)Aj>y-nsgSE-sj0VGBK0mWVo1e X4o=PjGJ!IT1se;OF>hv9_{$Ce5mpx6 delta 83 zcmZn(XbG6$gHU^hRb@?-@;pUDfP_&28utmT?4AjHjjBWgMW!{iN8cbJ%zCih9F ivGDE$^82J?CW&ye-hgtVCg+F?Z!A5+w3%JuFFOEOO&YWS diff --git a/HWFrom1-31-16(Sets and HashMaps).playground/Contents.swift b/HWFrom1-31-16(Sets and HashMaps).playground/Contents.swift index c5841b0..ea1c3ad 100644 --- a/HWFrom1-31-16(Sets and HashMaps).playground/Contents.swift +++ b/HWFrom1-31-16(Sets and HashMaps).playground/Contents.swift @@ -1,20 +1,133 @@ -//: https://docs.google.com/document/d/1T7tYRqpDPWoxarfmXqfRCHB-YqvA8-Qx_mEyy5smtfc +import UIKit +//: https://docs.google.com/document/d/1T7tYRqpDPWoxarfmXqfRCHB-YqvA8-Qx_mEyy5smtfc +/* //1) -//a) +Write good hash functions for the following data types. Justify your choices and how they avoid collisions. + +a) +Int -//b) +b) +struct Point: Hashable { +let x, y: Int +} -//c) +c) +Array //2) +You moderate a popular mobile device discussion forum. +You want to cut down on the vitriol and make your work easier, +so you decide to implement a blacklist based system +to automatically reject or approve posts. + +For example: + +moderate("I would never use a crApple product!") // false (reject) +moderate("I wish all these FANDROIDS would just shut up!") // false +moderate("M$ is the worst, Linux rules!") // false +moderate("Can’t we all just get along?") // true (approve) + +Write moderate(message: String) -> Bool, using a built-in Swift Set to manage your blacklist. +Make your method case insensitive; it should block the word no matter what combination of upper and lowercase letters is used. +*/ + + +var blacklist = Set() + +for word in ["crapple", "fandroids", "m$"] { + blacklist.insert(word) +} + +blacklist + +let msg1 = "I would never use a crApple product!" +let msg2 = "I wish all these FANDROIDS would just shut up!" +let msg3 = "M$ is the worst, Linux rules!" +let msg4 = "Can’t we all just get along?" + +let msg2b = "I wish all these fandroids would just shut up!" + +func moderate(message: String) -> Bool +{ + + var msgArr = [String]() + + for word in message.componentsSeparatedByString(" ") { + + msgArr.append(word.lowercaseString) + + } + + let msgSet = Set(msgArr) + + return msgSet.isDisjointWith(blacklist) +} + +moderate(msg1) +moderate(msg2) +moderate(msg3) +moderate(msg4) +moderate(msg2b) + + +//*********Also found out about this built in "spellcheck" object UITextChecker******************* +//func wordIsReal(word: String) -> Bool { +// let checker = UITextChecker() +// let range = NSMakeRange(0, word.characters.count) +// let misspelledRange = checker.rangeOfMisspelledWordInString(word, range: range, startingAt: 0, wrap: false, language: "en") +// +// return misspelledRange.location == NSNotFound +//} +// +//func moderate(message: String) -> Bool +//{ +// for word in message.componentsSeparatedByString(" ") { +// +// if !wordIsReal(word) { +// +// return false +// } +// } +// +// return true +//} +// +//moderate(msg1) +//moderate(msg2) +//moderate(msg3)//doesn't work with this one! +//moderate(msg4) + + + +/* +//3) +Your company makes a phonebook app, and your users have been complaining +about how long it takes to look people’s numbers up. You decide +to upgrade your archaic array-based system to a sleek, modern hash map. + +Write a phonebook class that uses either our HashMap from class +or the built in Swift dictionary (your choice). + +It should implement the protocol below. + +It needs to support importing from the old array based format +which used an array of tuples, like: +[(“Caleb”, “501-555-1234”), (“Mike”, “212-555-4321”), (“Jenny”, “345-867-5309”)] +protocol PhoneBookProtocol { +mutating func addPerson(name: String, phoneNumber: String) +mutating func removePerson(name: String) +mutating func importFrom(oldPhonebook: [(String, String)]) +func findPerson(name: String) -> String // Return phone # +} -//3) \ No newline at end of file +*/ diff --git a/HWFrom1-31-16(Sets and HashMaps).playground/contents.xcplayground b/HWFrom1-31-16(Sets and HashMaps).playground/contents.xcplayground index 5da2641..9f5f2f4 100644 --- a/HWFrom1-31-16(Sets and HashMaps).playground/contents.xcplayground +++ b/HWFrom1-31-16(Sets and HashMaps).playground/contents.xcplayground @@ -1,4 +1,4 @@ - + \ No newline at end of file From da424e9b1db1c30bc4b9d8dcd956bbdc3fa719f4 Mon Sep 17 00:00:00 2001 From: Justine Gartner Date: Thu, 4 Feb 2016 18:54:44 -0500 Subject: [PATCH 23/27] Question 3 partially answered, importFrom func completed --- .DS_Store | Bin 10244 -> 10244 bytes .../Contents.swift | 62 ++++++++++++++++-- 2 files changed, 56 insertions(+), 6 deletions(-) diff --git a/.DS_Store b/.DS_Store index 56d5b2d579914a589a20d241954281dcfa713a25..e784aae94992fcc119930ab2a40df55722efb0f0 100644 GIT binary patch delta 106 zcmZn(XbG6$C7U^hRb%47vWpUDfP_&28ucyKY!o4i3PWwL+}H|vdPIR*v@PY}Vo r!(?=8a-Vc6>&?m1Ka8A_Z96>(DhK+?GOq String // Return phone # + + mutating func addPerson(name: String, phoneNumber: String) + mutating func removePerson(name: String) + mutating func importFrom(oldPhonebook: [(String, String)]) + func findPerson(name: String) -> String // Return phone # } -*/ + +struct PhoneBook:PhoneBookProtocol, CustomStringConvertible { + + var phonebookDict = [String:String]() + + mutating func addPerson(name: String, phoneNumber: String) { + + + + } + + mutating func removePerson(name: String) { + + + } + + mutating func importFrom(oldPhonebook: [(String, String)]) { + + for i in 0.. String { + + + return name + } + + //Custom String Convertible + var description: String { + + return "{\(phonebookDict)}" + } +} + + +let oldPhoneBook = [("Caleb", "501-555-1234"), ("Mike", "212-555-4321"), ("Jenny", "345-867-5309")] + +var newPhonebook = PhoneBook() + +newPhonebook.importFrom(oldPhoneBook) + +newPhonebook.description From 775fb34bf1d08641246f4ce5bf3b6a8e6d4efb91 Mon Sep 17 00:00:00 2001 From: Justine Gartner Date: Thu, 4 Feb 2016 19:26:47 -0500 Subject: [PATCH 24/27] Cleaned up answer for Question 2 in Sets and Hash maps --- .DS_Store | Bin 10244 -> 10244 bytes .../Contents.swift | 10 ++++------ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/.DS_Store b/.DS_Store index e784aae94992fcc119930ab2a40df55722efb0f0..537873527cfc32a5fc7e4ef543b2e1a64a19878c 100644 GIT binary patch delta 59 zcmZn(XbIS`UW#$W<_%Iu85v_HKah#xadAm0ElFlzxO8(m!{mE18BAa*W^#@oA7jDB M!Vsp->B;wGGMK0|3vm7U}>1 diff --git a/HWFrom1-31-16(Sets and HashMaps).playground/Contents.swift b/HWFrom1-31-16(Sets and HashMaps).playground/Contents.swift index 8252261..5b3de29 100644 --- a/HWFrom1-31-16(Sets and HashMaps).playground/Contents.swift +++ b/HWFrom1-31-16(Sets and HashMaps).playground/Contents.swift @@ -41,8 +41,8 @@ Make your method case insensitive; it should block the word no matter what combi var blacklist = Set() -for word in ["crapple", "fandroids", "m$"] { - blacklist.insert(word) +for word in ["crApple", "FANDROIDS", "M$"] { + blacklist.insert(word.lowercaseString) } blacklist @@ -57,16 +57,14 @@ let msg2b = "I wish all these fandroids would just shut up!" func moderate(message: String) -> Bool { - var msgArr = [String]() + var msgSet = Set() for word in message.componentsSeparatedByString(" ") { - msgArr.append(word.lowercaseString) + msgSet.insert(word.lowercaseString) } - let msgSet = Set(msgArr) - return msgSet.isDisjointWith(blacklist) } From e931466f479e74bfc640b791b375fa1358f5f033 Mon Sep 17 00:00:00 2001 From: Justine Gartner Date: Thu, 4 Feb 2016 20:03:56 -0500 Subject: [PATCH 25/27] Sets and hash maps reviewed --- .DS_Store | Bin 10244 -> 10244 bytes .../Contents.swift | 19 ++++++++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/.DS_Store b/.DS_Store index 537873527cfc32a5fc7e4ef543b2e1a64a19878c..4c07aa3e421ba7bcb5e2324508fd902cde078860 100644 GIT binary patch delta 53 zcmZn(XbIR*BEw|rKKX%643CRTN@+nHWr33ZDv>a G%MJh)h!c1K delta 53 zcmZn(XbIR*BEw`9Gx>o`43CRTN@+XHWr33ZDv>a G%MJh&Clf{h diff --git a/HWFrom1-31-16(Sets and HashMaps).playground/Contents.swift b/HWFrom1-31-16(Sets and HashMaps).playground/Contents.swift index 5b3de29..332d707 100644 --- a/HWFrom1-31-16(Sets and HashMaps).playground/Contents.swift +++ b/HWFrom1-31-16(Sets and HashMaps).playground/Contents.swift @@ -125,7 +125,7 @@ protocol PhoneBookProtocol { mutating func addPerson(name: String, phoneNumber: String) mutating func removePerson(name: String) mutating func importFrom(oldPhonebook: [(String, String)]) - func findPerson(name: String) -> String // Return phone # + func findPerson(name: String) -> String? // Return phone # } @@ -136,13 +136,13 @@ struct PhoneBook:PhoneBookProtocol, CustomStringConvertible { mutating func addPerson(name: String, phoneNumber: String) { - + phonebookDict[phoneNumber] = name } mutating func removePerson(name: String) { - + phonebookDict.removeValueForKey(name) } mutating func importFrom(oldPhonebook: [(String, String)]) { @@ -152,16 +152,23 @@ struct PhoneBook:PhoneBookProtocol, CustomStringConvertible { let phoneNum = oldPhonebook[i].1 let name = oldPhonebook[i].0 - phonebookDict[phoneNum] = name + phonebookDict[name] = phoneNum } } - func findPerson(name: String) -> String { + //An awesome alternative :) +// func importFrom(oldPhonebook: [(String, String)]) { +// for entry in oldPhonebook { +// addPerson(entry.0, phoneNumber: entry.1) +// } +// } + + func findPerson(name: String) -> String? { - return name + return phonebookDict[name] } //Custom String Convertible From 3517ec69c7ac793a2a401514fdb29035227a0df4 Mon Sep 17 00:00:00 2001 From: Justine Gartner Date: Wed, 10 Feb 2016 18:37:41 -0500 Subject: [PATCH 26/27] Added adjacency matrix images --- .DS_Store | Bin 10244 -> 10244 bytes images/image00.png | Bin 0 -> 10330 bytes images/image01.png | Bin 0 -> 9347 bytes images/image02.png | Bin 0 -> 63543 bytes images/image03.png | Bin 0 -> 56068 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100755 images/image00.png create mode 100755 images/image01.png create mode 100755 images/image02.png create mode 100755 images/image03.png diff --git a/.DS_Store b/.DS_Store index 4c07aa3e421ba7bcb5e2324508fd902cde078860..565faffca4b9f2c8334d410a0679e792524d9f52 100644 GIT binary patch delta 182 zcmZn(XbG6$ÄU^hRb#$*LSpUDfP_&28ul=3hw5uSWcCIdpnOwJMHt8ZWc0yc(B zhFpe3hIEEhhT@!b!{Frn+yamU6rjlG=DWD0l$InjFkE_AB@b4CCZB>=z90k1{EcPT L7&o&k{AC9KPCqW@ delta 56 zcmZn(XbG6$C7U^hRb%47vWpUDfP_&28ul=3jm7n*!eCIdpnOwJMHV{F)17{auf IUEwb~02%ob?EnA( diff --git a/images/image00.png b/images/image00.png new file mode 100755 index 0000000000000000000000000000000000000000..092dc91be3263e3f1a9b9596fd809ae504a1be9e GIT binary patch literal 10330 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 VtG1#;{<#PRD5E4@{?5?<{{bOxI&J^} literal 0 HcmV?d00001 diff --git a/images/image02.png b/images/image02.png new file mode 100755 index 0000000000000000000000000000000000000000..4586896d9a5bc6763c5f7e8d664912d2e3f4156c GIT binary patch literal 63543 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 I`sLgI2XuMZSpWb4 literal 0 HcmV?d00001 diff --git a/images/image03.png b/images/image03.png new file mode 100755 index 0000000000000000000000000000000000000000..45f29aae634aff525fac9ef8e29d4fd7784b6fb2 GIT binary patch literal 56068 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 CCOMG+ literal 0 HcmV?d00001 From 2aefacd40dd19189d3d89ee7b690905881efff22 Mon Sep 17 00:00:00 2001 From: Justine Gartner Date: Wed, 10 Feb 2016 20:52:52 -0500 Subject: [PATCH 27/27] Created binary tree from postfix mathmatical function --- .../Contents.swift | 100 +++++++++++++++++- .../contents.xcplayground | 2 +- 2 files changed, 99 insertions(+), 3 deletions(-) diff --git a/HWFrom2-05-16(Trees).playground/Contents.swift b/HWFrom2-05-16(Trees).playground/Contents.swift index ca035a2..d6f07ed 100644 --- a/HWFrom2-05-16(Trees).playground/Contents.swift +++ b/HWFrom2-05-16(Trees).playground/Contents.swift @@ -1,10 +1,106 @@ + +import UIKit + //https://docs.google.com/document/d/1te7mLS06MEYwETFSbVBqMrIzJ43GTEo5uuCiWdB0fyE/edit?usp=drivesdk +/* + +Using the Swift binary tree implementation below (the Node class), +implement a function that takes in: a string containing a simple postfix mathematical expression, +and returns: a binary tree representing that expression, +using the process described here: https://en.wikipedia.org/wiki/Binary_expression_tree#Example. + +Required: +Build and return the binary tree representation of the expression. +The following characters should be treated as operators: +-*/ + +/* +Tips: +You may use additional data structures—as suggested in the link above, you will at least want to use a stack. +This can be done using the Array type in Swift. + +Test your tree by checking to see if the string returned by postorderDescription is equal to the input string. + + +Sample input: +"ab+cde+**" + +*/ + + +//Binary tree implementation: + +class Node { + let value: T + var left: Node? + var right: Node? + init(value: T) { + self.value = value + } +} + +extension Node: CustomStringConvertible { + var description: String { + return "\(value)" + } + var postorderDescription: String { + let lt = left?.postorderDescription ?? "" + let rt = right?.postorderDescription ?? "" + return lt + rt + description + } +} + +//Printing +extension Node { + + func printInorder() { + left?.printInorder() + print(self) + right?.printInorder() + + } + +} + + //1 +//Template for the function you should implement: + +func parseExpression(input: String) -> [Node] { + + let operators: Set = ["+", "-", "*", "/"] + var stack: [Node] = [] + + for character in input.characters { + + let nodeChar = Node(value: character) + + if !operators.contains(character) { + + stack.append(nodeChar) + + } else { + + nodeChar.right = stack.removeLast() + nodeChar.left = stack.removeLast() + stack.append(nodeChar) + + } + } + + //Bonus1 + stack.first?.printInorder() + + return stack +} + +let expTree = "ab+cde+**" + +parseExpression(expTree) + -//Bonus1 -//Bonus2 \ No newline at end of file +//Bonus2 diff --git a/HWFrom2-05-16(Trees).playground/contents.xcplayground b/HWFrom2-05-16(Trees).playground/contents.xcplayground index 5da2641..9f5f2f4 100644 --- a/HWFrom2-05-16(Trees).playground/contents.xcplayground +++ b/HWFrom2-05-16(Trees).playground/contents.xcplayground @@ -1,4 +1,4 @@ - + \ No newline at end of file