From 675cc384c2d7c8bcac3a1a7a73a5d9ec577f4144 Mon Sep 17 00:00:00 2001 From: Wang Lun Date: Mon, 15 Mar 2021 22:38:28 +0900 Subject: [PATCH] added some --- .gitignore | 1 + .../Contents.swift | 60 ++++++++ .../Contents.swift | 102 ++++++++++++++ .../Contents.swift | 107 +++++++++++++++ .../Contents.swift | 87 ++++++++++++ .../Contents.swift | 67 +++++++++ .../Contents.swift | 116 ++++++++++++++++ .../Resources/spiral.jpg | Bin 0 -> 14152 bytes .../Resources/spiral1.jpg | Bin 0 -> 10159 bytes .../Contents.swift | 61 +++++++++ .../Contents.swift | 46 +++++++ .../Contents.swift | 129 ++++++++++++++++++ .../Resources/linkedlist1.jpg | Bin 0 -> 19447 bytes .../Resources/linkedlist2.jpg | Bin 0 -> 13922 bytes .../Contents.swift | 12 ++ .../contents.xcplayground | 16 +++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 46497 bytes .../xcschemes/xcschememanagement.plist | 16 +++ 19 files changed, 827 insertions(+) create mode 100644 .gitignore create mode 100644 AlgorithmsBook.playground/Pages/1. Two Sum.xcplaygroundpage/Contents.swift create mode 100644 AlgorithmsBook.playground/Pages/12. Integer to Roman.xcplaygroundpage/Contents.swift create mode 100644 AlgorithmsBook.playground/Pages/322. Coin Change.xcplaygroundpage/Contents.swift create mode 100644 AlgorithmsBook.playground/Pages/33. Search in Rotated Sorted Array .xcplaygroundpage/Contents.swift create mode 100644 AlgorithmsBook.playground/Pages/503. Next Greater Element II.xcplaygroundpage/Contents.swift create mode 100644 AlgorithmsBook.playground/Pages/54. Spiral Matrix.xcplaygroundpage/Contents.swift create mode 100644 AlgorithmsBook.playground/Pages/54. Spiral Matrix.xcplaygroundpage/Resources/spiral.jpg create mode 100644 AlgorithmsBook.playground/Pages/54. Spiral Matrix.xcplaygroundpage/Resources/spiral1.jpg create mode 100644 AlgorithmsBook.playground/Pages/542. 01 Matrix .xcplaygroundpage/Contents.swift create mode 100644 AlgorithmsBook.playground/Pages/81. Search in Rotated Sorted Array II.xcplaygroundpage/Contents.swift create mode 100644 AlgorithmsBook.playground/Pages/82. Remove Duplicates from Sorted List II .xcplaygroundpage/Contents.swift create mode 100644 AlgorithmsBook.playground/Pages/82. Remove Duplicates from Sorted List II .xcplaygroundpage/Resources/linkedlist1.jpg create mode 100644 AlgorithmsBook.playground/Pages/82. Remove Duplicates from Sorted List II .xcplaygroundpage/Resources/linkedlist2.jpg create mode 100644 AlgorithmsBook.playground/Pages/Table_of_Contents.xcplaygroundpage/Contents.swift create mode 100644 AlgorithmsBook.playground/contents.xcplayground create mode 100644 AlgorithmsBook.playground/playground.xcworkspace/contents.xcworkspacedata create mode 100644 AlgorithmsBook.playground/playground.xcworkspace/xcuserdata/ST22956.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 AlgorithmsBook.playground/xcuserdata/ST22956.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e43b0f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/AlgorithmsBook.playground/Pages/1. Two Sum.xcplaygroundpage/Contents.swift b/AlgorithmsBook.playground/Pages/1. Two Sum.xcplaygroundpage/Contents.swift new file mode 100644 index 0000000..217b0ed --- /dev/null +++ b/AlgorithmsBook.playground/Pages/1. Two Sum.xcplaygroundpage/Contents.swift @@ -0,0 +1,60 @@ +//: [Previous](@previous) + +/*: # + [1. Two Sum](http://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/) + +Given an array of integers, return indices of the two numbers such that they add up to a specific target. + +You may assume that each input would have exactly one solution, and you may not use the same element twice. + +Example: + + ``` +Given nums = [2, 7, 11, 15], target = 9, + +Because nums[0] + nums[1] = 2 + 7 = 9, +return [0, 1]. + ``` +*/ + +class HashSolution { + func twoSum(_ nums: [Int], _ target: Int) -> [Int] { + var cached = Dictionary() + for i in 0.. [Int] { + for i in 0.. String { + var result = "" + let digits = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1] + let romas = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"] + + var temp = num + + while (temp > 0) { + for i in 0..= v { + result += romas[i] + temp -= v + } + } + } + + return result + } +} + +let s = Solution() + +let num = 1994 +//"MCMXCIV" + +s.intToRoman(num) + + +//: [Next](@next) diff --git a/AlgorithmsBook.playground/Pages/322. Coin Change.xcplaygroundpage/Contents.swift b/AlgorithmsBook.playground/Pages/322. Coin Change.xcplaygroundpage/Contents.swift new file mode 100644 index 0000000..33562e6 --- /dev/null +++ b/AlgorithmsBook.playground/Pages/322. Coin Change.xcplaygroundpage/Contents.swift @@ -0,0 +1,107 @@ +//: [Previous](@previous) + + +/*: +[322. Coin Change](https://leetcode-cn.com/problems/coin-change/) + + You are given coins of different denominations and a total amount of money amount. Write a function to compute the fewest number of coins that you need to make up that amount. If that amount of money cannot be made up by any combination of the coins, return `-1`. + + You may assume that you have an infinite number of each kind of coin. + +   +``` + Example 1: + + Input: coins = [1,2,5], amount = 11 + Output: 3 + Explanation: 11 = 5 + 5 + 1 + ``` + + ``` + Example 2: + + Input: coins = [2], amount = 3 + Output: -1 + ``` + + ``` + Example 3: + + Input: coins = [1], amount = 0 + Output: 0 + ``` + + ``` + Example 4: + + Input: coins = [1], amount = 1 + Output: 1 + ``` + + ``` + Example 5: + + Input: coins = [1], amount = 2 + Output: 2 + + ``` + + Constraints: + + * 1 <= coins.length <= 12 + * 1 <= coins[i] <= 231 - 1 + * 0 <= amount <= 104 + + + +// f(n) = min(f(n - c1), f(n - c2), ... f(n - cn)) + 1 + */ + +class Solution { + func coinChange(_ coins: [Int], _ amount: Int) -> Int { + let maxValue = Int.max - amount + var dp = [Int].init(repeating: maxValue, count: amount + 1) + + dp[0] = 0 + + for i in 1..<(amount+1) { + var cost = dp[i] + for c in coins { + if i >= c { + cost = min(cost, dp[i - c] + 1) + } + } + dp[i] = cost + print("\(i): \(dp[i])") + } + + if dp[amount] == maxValue { + return -1 + } + + return dp[amount] + } +} + +let s = Solution() +//let coins = [1,2,5] +//let amount = 11 +// +//s.coinChange(coins, amount) + +// 0 1 2 3 4 5 6 7 8 9 10 11 +// 0: 0 +// 1: dp[0] + 1 = 1 +// 2: min(dp[1] + 1) = 2 +// 3: min(dp[2] + 1) = 3 +// 4: min(dp[3] + 1) = 4 +// 5: min(dp[4] + 1, dp[0] + 1) = 1 +// + +let coins = [2] +let amount = 3 + +s.coinChange(coins, amount) + + +//: [Next](@next) diff --git a/AlgorithmsBook.playground/Pages/33. Search in Rotated Sorted Array .xcplaygroundpage/Contents.swift b/AlgorithmsBook.playground/Pages/33. Search in Rotated Sorted Array .xcplaygroundpage/Contents.swift new file mode 100644 index 0000000..e65952e --- /dev/null +++ b/AlgorithmsBook.playground/Pages/33. Search in Rotated Sorted Array .xcplaygroundpage/Contents.swift @@ -0,0 +1,87 @@ +//: [Previous](@previous) + +/*:[33. Search in Rotated Sorted Array](https://leetcode-cn.com/problems/search-in-rotated-sorted-array/description/) + +There is an integer array `nums` sorted in ascending order (with distinct values). + +Prior to being passed to your function, nums is rotated at an unknown pivot index `k` (0 <= k < nums.length) such that the resulting array is `[nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]]` (0-indexed). For example, [0,1,2,4,5,6,7] might be rotated at pivot index `3` and become `[4,5,6,7,0,1,2]`. + +Given the array nums after the rotation and an integer target, return the index of target if it is in nums, or `-1` if it is not in nums. + +  +``` +Example 1: + +Input: nums = [4,5,6,7,0,1,2], target = 0 +Output: 4 + ``` + ``` +Example 2: + +Input: nums = [4,5,6,7,0,1,2], target = 3 +Output: -1 + + ``` + + ``` +Example 3: + +Input: nums = [1], target = 0 +Output: -1 + ``` + +Constraints: + +* 1 <= nums.length <= 5000 +* -104 <= nums[i] <= 104 +* All values of nums are unique. +* nums is guaranteed to be rotated at some pivot. +* -104 <= target <= 104 +  + + */ + +class Solution { + func search(_ nums: [Int], _ target: Int) -> Int { + return search(nums, 0, nums.count - 1, target) + } + + func search(_ nums:[Int], _ start: Int, _ end: Int, _ target: Int) -> Int { + print("start:\(start), end:\(end)") + if start > end { + return -1 + } + + let mid = ( start + end ) / 2 + + if nums[mid] == target { + return mid + } + + if nums[start] <= target || nums[mid - 1] <= target { + let ss = search(nums, start, mid - 1, target) + if ss != -1 { + return ss + } + } else if nums[mid + 1] <= target || nums[end] <= target { + let ss = search(nums, mid + 1, end, target) + if ss != -1 { + return ss + } + } + return -1 + } +} + + +//Input: nums = [4,5,6,7,0,1,2], target = 0 +//Output: 4 + +//let nums = [4,5,6,7,0,1,2], target = 0 +let nums = [1], target = 0 + +let s = Solution() +let r = s.search(nums, target) +print(r) + +//: [Next](@next) diff --git a/AlgorithmsBook.playground/Pages/503. Next Greater Element II.xcplaygroundpage/Contents.swift b/AlgorithmsBook.playground/Pages/503. Next Greater Element II.xcplaygroundpage/Contents.swift new file mode 100644 index 0000000..4c3a62e --- /dev/null +++ b/AlgorithmsBook.playground/Pages/503. Next Greater Element II.xcplaygroundpage/Contents.swift @@ -0,0 +1,67 @@ +//: [Previous](@previous) +/*: +[503. Next Greater Element II](https://leetcode-cn.com/problems/next-greater-element-ii/) + +Given a circular array (the next element of the last element is the first element of the array), print the Next Greater Number for every element. The Next Greater Number of a number x is the first greater number to its traversing-order next in the array, which means you could search circularly to find its next greater number. If it doesn't exist, output -1 for this number. + + + ```Example 1: + +Input: [1,2,1] +Output: [2,-1,2] + + +Explanation: The first 1's next greater number is 2; +The number 2 can't find next greater number; +The second 1's next greater number needs to search circularly, which is also 2. + ``` + +> Note: The length of given array won't exceed 10000. +*/ + + +class Solution { + func nextGreaterElements(_ nums: [Int]) -> [Int] { + var stack = [Int]() + var results = [Int].init(repeating: -1, count: nums.count) + + for i in 0.. nums[stack.last!] { + let prevIndex = stack.popLast()! + results[prevIndex] = nums[i] + } + stack.append(i) + } + + for i in 0.. nums[stack.last!] { + let prevIndex = stack.popLast()! + results[prevIndex] = nums[i] + } + stack.append(i) + } + + return results + } +} + +let s = Solution() + +//let nums = [5, 4, 3, 2, 1] +//s.nextGreaterElements(nums) + +// [1,2,1] +// [0(1)] +// [1(2)] [2, -1, -1] +// [1(2), 2(1)] <-- 1(2) +// + +//[5, 4, 3, 2, 1] + +//let nums = [1,1,1,1,1] +//print(s.nextGreaterElements(nums)) + +let nums = [1,2,1] +print(s.nextGreaterElements(nums)) + +//: [Next](@next) diff --git a/AlgorithmsBook.playground/Pages/54. Spiral Matrix.xcplaygroundpage/Contents.swift b/AlgorithmsBook.playground/Pages/54. Spiral Matrix.xcplaygroundpage/Contents.swift new file mode 100644 index 0000000..f9b0c02 --- /dev/null +++ b/AlgorithmsBook.playground/Pages/54. Spiral Matrix.xcplaygroundpage/Contents.swift @@ -0,0 +1,116 @@ +//: [Previous](@previous) + + +/*: [54. Spiral Matrix](https://leetcode-cn.com/problems/spiral-matrix/) + +Given an m x n matrix, return all elements of the matrix in spiral order. + + ![](spiral1.jpg) + + ``` +Example 1: + + +Input: matrix = [[1,2,3],[4,5,6],[7,8,9]] +Output: [1,2,3,6,9,8,7,4,5] + + ``` + + ![](spiral.jpg) + + ``` +Example 2: + +Input: matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] +Output: [1,2,3,4,8,12,11,10,9,5,6,7] +``` + + Constraints: + + * m == matrix.length + * n == matrix[i].length + * 1 <= m, n <= 10 + * -100 <= matrix[i][j] <= 100 + + */ + +class Solution { + func spiralOrder(_ matrix: [[Int]]) -> [Int] { + var results = [Int]() + let right = (0, 1) + let left = (0, -1) + let up = (-1, 0) + let down = (1, 0) + + var leftBound = 0 + var rightBound = matrix[0].count - 1 + + var topBound = 0; + var bottombound = matrix.count - 1 + + let count = matrix.count * matrix[0].count + + var column = 0, row = 0 + + + var direction = right + var i = 0 + while i <= count { + + if direction == right { + if (column < rightBound) { + results.append(matrix[row][column]) + column += 1 + } else { + //results.append(matrix[row][column]) + topBound += 1 + direction = down + } + } else if direction == down { + if (row < bottombound) { + results.append(matrix[row][column]) + row += 1 + } else { + //results.append(matrix[row][column]) + rightBound -= 1 + direction = left + } + } else if direction == left { + if (column > leftBound) { + results.append(matrix[row][column]) + column -= 1 + } else { + //results.append(matrix[row][column]) + bottombound -= 1 + direction = up + } + } else if direction == up { + if (row > topBound) { + results.append(matrix[row][column]) + row -= 1 + } else { + //results.append(matrix[row][column]) + leftBound += 1 + direction = right + } + } + + i += 1 + } + + return results + } +} + +let s = Solution() +//let matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] +let matrix = [[1,2,3], + [4,5,6], + [7,8,9]] + +let rs = s.spiralOrder(matrix) +print(rs) + + +//: [Next](@next) + diff --git a/AlgorithmsBook.playground/Pages/54. Spiral Matrix.xcplaygroundpage/Resources/spiral.jpg b/AlgorithmsBook.playground/Pages/54. Spiral Matrix.xcplaygroundpage/Resources/spiral.jpg new file mode 100644 index 0000000000000000000000000000000000000000..948e0f53a95ed677dca2dde004e9de1a5996f856 GIT binary patch literal 14152 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 literal 0 HcmV?d00001 diff --git a/AlgorithmsBook.playground/Pages/54. Spiral Matrix.xcplaygroundpage/Resources/spiral1.jpg b/AlgorithmsBook.playground/Pages/54. Spiral Matrix.xcplaygroundpage/Resources/spiral1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3f7ea45d1d4b35f02c567cbfb970a3afa691ad7c GIT binary patch literal 10159 zcmeHtc{J4j`uJNy2q6`P3}ekGYZ0;yGq&v6qGGZQ*{19*))2!C#*!?f|i!&w`Xp9%8$?+0O8a>)ko`gik_QMc>Y~=aw5fYx=Hdd|@9+-DxsAe>ZpZmidqM zf4m(APEt~k{G?hSlC1?6#^Y>VPzA*avuA@!1{D*GC zHIs%l#VbYttqGaLA0DF{$BY)oJ}RD@u{z(jSNDg9?IwWr{;lBhAD((c;7UrGJlEvj z$TN%gkdf#6;WyRljk0n2-z(9H=1#ROLy5Fdi_a;swf!*B-G>rsJHORjDSc49X&q3* z)^SH|3R@ko)*}USI7~|0^vuGPv!KKRm*(D1B@yL4rdID%Nx2G-Vp+!@> zXqnZFQ~U7@$X%W0v2T2F`_;J4{Xc4kD@=DUD~{34C9wVaPj=qF9U&&kYfK;;GtNW6 zT~ElA<=b60g+l2|h+1d339oidNt#?voy1^hxVwbnB4yM}s#$#eBVh&G4-_dnWD`Ky zXrgwJe|+~t<@L!R!=tGt*~bw9@ngn&d6GDGu%PLZZOusZ zVw*^VIkOFYI$L4vm3Ezv!q1xTBtCc0$WgI(kdJW@Nw-I4cdduffp#__o$L%0KYH>t z?3vz9S|C5ibe6na(AO&G<=tuWdkg@yltHP*l>0vlyq;Kvk>Ml~Kr3T%0a|zllV?}N z*Oe=S9L-|oX|bTW*{XN5px0w1&tF9k6{8>Y@@tkV)cl8^#81R$-0;SeD6#Vpzb9sS zReB3wy9i;q*AZsd49 ze3~(90kHRy4+;1-*=XGW07`C-lDaBl-;2AiCl)zP^TbZ{U_QzlxXRNxn3rJRc(7EN zBH$7rn43hEk8VOa%NQ+(GIAej;c;5QB`e9<7{r?O(!f*(BJNeTJmObAh)7%6fCS7a z9s(*S_b%<%ya_nyy1ljpv<(8|xL8KB?S?M3_=kof5608)xxXTZ1QJ5SdgH}4 z7hdjVLH(b}M>N%?JpR|K{{zzE(tZN>N|1XS!}pzm8u?G`qyCJ&Z2Xq#@zK4DR4v0s zpro6D-=~9QVGwi>-lh!Wo2xDX*UO<5=aI5I4?UMBX8q84Byp9MsF+3}gkPx`IJ)~%McuI5{|9HRA(CKru`43Y%y={x~5yw*SkE?`I8seAHw9d*B0eVHImrn=1gdz&VH_v-X=-LF5`GQzU72pFkt@q_ zov8J{I4yr^>J=7z`3y``yRyZ6U*JSLt>S$Cdr-lEb0xvsq@2BU`PQ=Ws?mooEI+O= zpP40NMo28PTC1}9)EFLNrN^8wZ+Ygy_IqdZnS5hMYKz>I9$C0U@8apHSx>Q-EvjLu zdK^C2&Vh!`pOwjoemd8aPd8ci03u&rFqe!f)hWyAniKjoWGQ}2Nid=&gLg^%pso;j zpw%2A>N{nZ-ddf@R`EdZN@eCUmv>szoU);+>Y^qNyx!q&z^kbAvccxgmk&&i%x{U~)ad$pb0h5?Ihm0aOz zRhgk!X=`1DtfT&1ic{qX`s!nB1GnAI^6kjtxmNumjjCnrM^9_F^n{S@&|BMrv5NfN zqR2CorFqdJr*qn43$t&;gbaGo9CTk$N;I@0MmU3W!FZGU7>G}(1XVoHJ@zbHS-Dw$?vLoze8F>y%W-;FdZ9#cbLq#

Bjp3-|E^Pb$W>_X<}*biT?H4&_MXNxf_ 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 literal 0 HcmV?d00001 diff --git a/AlgorithmsBook.playground/Pages/542. 01 Matrix .xcplaygroundpage/Contents.swift b/AlgorithmsBook.playground/Pages/542. 01 Matrix .xcplaygroundpage/Contents.swift new file mode 100644 index 0000000..923d40f --- /dev/null +++ b/AlgorithmsBook.playground/Pages/542. 01 Matrix .xcplaygroundpage/Contents.swift @@ -0,0 +1,61 @@ +//: [Previous](@previous) + +/*: [542. 01 Matrix ](https://leetcode-cn.com/problems/01-matrix/) + +Given a matrix consists of 0 and 1, find the distance of the nearest 0 for each cell. + +The distance between two adjacent cells is 1. + + +```Example 1: + +Input: +[[0,0,0], + [0,1,0], + [0,0,0]] + +Output: +[[0,0,0], + [0,1,0], + [0,0,0]] +``` + +```Example 2: + +Input: +[[0,0,0], + [0,1,0], + [1,1,1]] + +Output: +[[0,0,0], + [0,1,0], + [1,2,1]] +``` + +> +> 1. The number of elements of the given matrix will not exceed `10,000`. +> 2. There are at least one 0 in the given matrix. +> 3. The cells are adjacent in only four directions: up, down, left and right. + +*/ + +class Solution { + func updateMatrix(_ matrix: [[Int]]) -> [[Int]] { + let count = matrix.count + var output = [[Int]](repeating: [Int](repeating: Int.max, count: count), count: count) + + return output + } +} + +let s = Solution() + +let input = [[0,0,0], + [0,1,0], + [0,0,0]] + + +s.updateMatrix(input) + +//: [Next](@next) diff --git a/AlgorithmsBook.playground/Pages/81. Search in Rotated Sorted Array II.xcplaygroundpage/Contents.swift b/AlgorithmsBook.playground/Pages/81. Search in Rotated Sorted Array II.xcplaygroundpage/Contents.swift new file mode 100644 index 0000000..fc47155 --- /dev/null +++ b/AlgorithmsBook.playground/Pages/81. Search in Rotated Sorted Array II.xcplaygroundpage/Contents.swift @@ -0,0 +1,46 @@ +//: [Previous](@previous) + +/*: [81. Search in Rotated Sorted Array II](https://leetcode-cn.com/problems/search-in-rotated-sorted-array-ii/) + + +There is an integer array `nums` sorted in non-decreasing order (not necessarily with distinct values). + +Before being passed to your function, `nums` is **rotated** at an unknown pivot index `k` (0 <= k < nums.length) such that the resulting array is `[nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]]` (0-indexed). For example, `[0,1,2,4,4,4,5,6,6,7]` might be rotated at pivot index `5` and become `[4,5,6,6,7,0,1,2,4,4]`. + +Given the array nums after the rotation and an integer target, return true if target is in nums, or false if it is not in nums. + +  + ``` +Example 1: + +Input: nums = [2,5,6,0,0,1,2], target = 0 +Output: true + ``` + + ``` +Example 2: + +Input: nums = [2,5,6,0,0,1,2], target = 3 +Output: false + ``` + +Constraints: + +* 1 <= nums.length <= 5000 + * -104 <= nums[i] <= 104 + * nums is guaranteed to be rotated at some pivot. + * -104 <= target <= 104 +  + +Follow up: This problem is the same as [Search in Rotated Sorted Array](https://leetcode-cn.com/problems/search-in-rotated-sorted-array/description/), where nums may contain duplicates. Would this affect the runtime complexity? How and why? + + */ + +class Solution { + func search(_ nums: [Int], _ target: Int) -> Int { + return 0 + } +} + + +//: [Next](@next) diff --git a/AlgorithmsBook.playground/Pages/82. Remove Duplicates from Sorted List II .xcplaygroundpage/Contents.swift b/AlgorithmsBook.playground/Pages/82. Remove Duplicates from Sorted List II .xcplaygroundpage/Contents.swift new file mode 100644 index 0000000..baa4293 --- /dev/null +++ b/AlgorithmsBook.playground/Pages/82. Remove Duplicates from Sorted List II .xcplaygroundpage/Contents.swift @@ -0,0 +1,129 @@ +//: [Previous](@previous) + +/*: [82. Remove Duplicates from Sorted List II](https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/) + + Given the head of a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list. Return the linked list sorted as well. + + + Example 1: + + ![](linkedlist1.jpg) + +``` + Input: head = [1,2,3,3,4,4,5] + Output: [1,2,5] +``` + + Example 2: + + ![](linkedlist2.jpg) + ``` + Input: head = [1,1,1,2,3] + Output: [2,3] + ``` + + Constraints: + + * The number of nodes in the list is in the range [0, 300]. + * -100 <= Node.val <= 100 + * The list is guaranteed to be sorted in ascending order. + +*/ + + +/** + * Definition for singly-linked list. + * public class ListNode { + * public var val: Int + * public var next: ListNode? + * public init() { self.val = 0; self.next = nil; } + * public init(_ val: Int) { self.val = val; self.next = nil; } + * public init(_ val: Int, _ next: ListNode?) { self.val = val; self.next = next; } + * } + */ + +public class ListNode { + public var val: Int + public var next: ListNode? + public init() { self.val = 0; self.next = nil; } + public init(_ val: Int) { self.val = val; self.next = nil; } + public init(_ val: Int, _ next: ListNode?) { self.val = val; self.next = next; } + + + func printList() { + var p: ListNode? = self + + while p != nil { + print(p?.val ?? 0) + + p = p?.next + } + } +} + + +class Solution { + func deleteDuplicates(_ head: ListNode?) -> ListNode? { + guard let h = head else { + return nil + } + + let dummyHead = ListNode(-101, h) + var pre = dummyHead + var p: ListNode? = h + // pre p + // [-101, 1,2,3,3,4,4,5] + dummyHead.printList() + + while p != nil { + // + var repeatCount = 0 + while p?.next != nil && p?.val == p?.next?.val { + p = p?.next + repeatCount += 1 + } + + if repeatCount > 0 { + pre.next = p!.next + p = p?.next + repeatCount = 0 + } else { + pre = p! + p = p?.next + print("=========") + dummyHead.printList() + print("=========") + } + + } + + return dummyHead.next + } +} + +func generateListNodes(_ array:[Int]) -> ListNode? { + if array.count == 0 { + return nil + } + + let head = ListNode.init(array[0]) + var p: ListNode = head + for i in 1..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 E0H#0chyVZp literal 0 HcmV?d00001 diff --git a/AlgorithmsBook.playground/Pages/82. Remove Duplicates from Sorted List II .xcplaygroundpage/Resources/linkedlist2.jpg b/AlgorithmsBook.playground/Pages/82. Remove Duplicates from Sorted List II .xcplaygroundpage/Resources/linkedlist2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..886e025aa786d41430cdd48d6e0673489ee2e661 GIT binary patch literal 13922 zcmb_?2Urx%mi7<_Br8EO${?GRzJ^qy1Kf%s{5_?oKtnq_2~5sfLuvVQ4WBG1pr{(9Dr*K z-~|8&`*-;*ac&AOKJM>AfRB%dPe^d<79jy4;Voh^;#)+dM1+JS6eOf%8Dn`UKl!0(Q+v4Dg)1cbOazrP9_2Nw??NI-G>9xve?%KOq9 zXqvmMe7bt3kx^97?WsY+W)4oSWl#BqL^Pe>`;4Xh;eQ@qQId5NC6I2Y`PH>(J@eTBi@KajhaB`!ZqNjWiiI=ATDG4-7|`TXJkC$ z;Y491xIPLX?1||5QNh)Wq3X?Hq;gcJwLY|XY<8j7rADRQH~I+{sLI#q8Azazt6J{` zhCz*n*Hl6$i`*EWEM@M7^b1ZRHJY%N^dG+87XSbx^m=ta@nC_i{8IWiAp;Wb&DQ$` zJe`k<1UuAZQWDb-BJDf;-NFhe{l-Vg>=}Fsd$eIiGv! z14_eqDvJ-5e?d3KTZM8q!by$XckO2nh9hmFnF|b@&4!3cXE?b~XBt|n^JBZU$dMM7 z%dxvVOTq{Sv>%U*46e+x8zGy65~-qR!WNhQYTVWh9x+{1ld!VSxd~vd%82ds7Tl`3Q5ZAl&bDi*tq9o?F(M9orv@Nrb8a#u}Lp|xzOA4vB^BYwyV102ykMrv%mR$DoY)FUcSCP?Y= z9W%a()7SuaIs?CFs8CKgm}Uo_^(#oUmF!wODzLL^zMVag;zWyArn%M{r$LzvZ9n&Z zHQT`+7q6L^Hh8^)83hZ}t3n#q>=}-|8Ko`nH#;G8;F}HuhNL+&&aIi<-WgOB&Y_@> zGtnKyeq$gQE&!$2deuOsNMNXa}ih=Ys8qw7(lt9ko*QL^Bvm06NF#)_6zA;a>Y zJG8ifJ$ZKDWAZ*XhP`LpJ$CqQm6x3PJ$WlhPPIcXyG+F1ez+qrzAkkCmJ8Ojue4*} z7Tt(_#|)!krB~Tx38F&v2jtL6U$tzJ>-LDQ63$Fbrw%P1CzC||D$f_j|J94?)6`ab_#&2lM-wYSFrR|A+vtyji+{|(REQ(+2hEJ)i>#{7z zOl>V0-7N8^a$*5}7exwt;~`U52T5o@#g92;XZa?2qe&a8_ffTCv1>X{}o{4C@_wD|D?E5Ug z#ULhb0x!~zPG2{EL_>1bEiYEgM9ku!{(W*g97hj*6cL+%i=%yZUY#-1z0�s`>}( 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 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AlgorithmsBook.playground/playground.xcworkspace/contents.xcworkspacedata b/AlgorithmsBook.playground/playground.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/AlgorithmsBook.playground/playground.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/AlgorithmsBook.playground/playground.xcworkspace/xcuserdata/ST22956.xcuserdatad/UserInterfaceState.xcuserstate b/AlgorithmsBook.playground/playground.xcworkspace/xcuserdata/ST22956.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..c7cec88da19782fdc24d2d143cef0eadb7eecdb8 GIT binary patch literal 46497 zcmeFa2Xs`$7e78TufI*%B=i~x>21>!YAO&qB=izOvOpk>-Gq+50YxbSA|i?i2~Ch< z0~JvLQA80XG#iMb0*Z(N0s`{C^WJVMV*LJop7Z;kV{(#x``)}M_kQNioqO-hj495~ zvzJ&b#}GyYafn9(5|M<|A?+qxZT7sP!lCW5Z8_uf;9F+9lA_`v?TW@su;!H5JrSO} zCd=&JC!?oznl(4ck?07Lkuor&B)i0_;q4yWaAZO*s4;4SnxbG7fyH`E=aqaLUy>V-z5Y%~Vtpj>1{W6?M?9!*Cx&`dN7J%AoW8lvbSv;ZwckD(=K zDO!%6LL1TZXcO9uUO-#WR&)@3h(1Dx(8uU7`UHK7j-U#36dgmy(P!vObQ*n)&Y&OA zIdlbGMc2^p=sLQAZlXW1h+VM<_QYPeG4{djurKz*{x}$i;xHVIV{ig)kGtT$xF7D1 z2jC2xi3j3Acqkr$$KyOa0Z+t}unkYe)9@Vp5PlfX#S8Hg{5XCJufQwuvv?PN6Ys`v z;kWTScn{u-_u+T(e*7MOA0NOU;KTS6d<>t)U*j|Q8~iOki+{$K@Gtl>zJ_n&JNQpR zhzoHgo}>wBN}7>Yq%H9w?MM&_CgCKC#E}$|O43MI(v9>d14stRBss)RrjZB8Y%+&D zL>?vc$b7PhEGAEq736913|UE@C2PngvYot2UMFvmUF2=@4%tKYllRC$@*(+%93x+l zugO{R9r>PIAU~3y$S>qFxk|2)-^pE0;8e~HU*X(2FRlUCkZZ~{<63d8Id3kI3+JM_ zcrJnK#C7Jna4B3W*PZLn4dzC0qq%Hu3^$e=$BpOmxdLtyH=WbChq-y&d~N}^m|Ma< z&OOO3=bqtKa_hLw+;;92?p1CF_Xf9%dy{*I+r#bW-s28)$GFeAQ`~9pTkb6P9e19) z$n(6wi@e0kyuz!ziFe^$c{kpZZ^}30z4aeO?Vz_;g9_;kJ> zpUDs8hw{VtQG6Dk!{_qj`8>XWFXW5(Vtx`oo!9t>`FZ?&egVIjU&24mKgloWpW#>X z>-f$5cK#LqRelHm2EU7clYfWb!|&(cEug;qj4!B+?s!h~=kPKXye3Y~;>p@+~@=q2v-z3VDKEC=p792L(-_!Xv_?!aU(I;c;QDuufPnY!EgI&kLJ`&BCj~4q>P8wy;ll zSNKRcBz!C!5k41A3Fm~Lgp0yu;aB0B@Vn?Dx{7Y1yJ!|YL{HI6Y#=rin~L6|pXe`! zixx3Lj1;594q``ffS4g>iUY+#;$U%zI8+=a4i~e;vEn#!yjUm}iBrU>;xv(pv&9wS z)8aGYO7U57mH3>vT3jQRiR;BJ;>+SI;+x`b@h$N^@qO_-@w|9J{8_vt{w7`#uZuUt z+u|JwOGFYSNop;5OKqgKl8@9*@|FA~e!lSSB(j^Rgg|vLws0BCE2S z+)!>Lw~$-PzOtX}F9*nha)cZy_mF$az2x37<&y;7$Ps+>Xr{op#)ABR&O8HrNmHeE%T3#z}mS2=#lHZVb$#2T<%KPQ7 zf`EC^$B&E`lPyCeMT))H>%I8FRCx8 zFRQPpZ>qc1_tgXH2kJrfi29}am3m4&t$wYZQNK}tQZK4MtC!Rp>P__z^_EF6i6+I= z)YQz>+|h8j=tE855`bGwB2__(BmsJPICgygu;=$HsgXuKsQ zEi^hgIxadbCMG2|EhWp`AU!p0aFK1Iy*N9^np%`oT3{_KahBW+wM9W2QFGJ+wM4B@ zYvhgEXo4nck|t}4rfQ~*$OpAUzQ_*}1t4F|h2j^r0E%CNWDT?cEhNj_xq1ni*<(_Q z3QKH7`T15`R$6jgLUh;2h|t)$IH;Hf{>4WoB!$LA$HYZhqT-`sA`?cj*YgT7q7 zWfxep%zl+OAhYCb+u&^bpgeotn0)Ktypr)5d4=Qht?(qv98kSrBa5s)83U~Lk|J9+ zB-ho1)a;V%EOTo}nv_!ldPXHJYSz@;w5rsiqWm%0wsdEyS>`5H&-5BqK627A3Uy#~ zj7Bji7R8}>lz`f6u9}r%)MjZK(2z1JnxTx0 z@kLYmWKYf;mklj2ZdHCwvRR=W9*}BaNnU>D6 zlCc6RUmpp1rRC;1UQ(QG>5T@VpyyE^)ED(b{m}rFfilrRt&!GPYoayPnrY3o7Fx^a z(O@(L4MoGya5MsqM5DA;TBsJL#c18M!CJ0X$lBC$NKR3%H4Mt>nO724S)s6uX$517 z@}V^u)_kb7HMjB+XnfslMWw~Y1JDocf1OLZ-Ck;i=gt43l&%1(EVK7tJgvmRUuV#( zXdGm3smvgwsMMBYb-;UIdbI|z%m9}uMa94tCn59DBnFBJXd=o-1*i}ep<=DI=B>5S z+G;*pJI!|^vH=);0UDFh6cnKO0T==R8i866{C9vNZEA6LVXiedy~J7o)nQ0B=vPTJ z#?|h5RvXi#r-5L&cM4YT?7TuyyZaXAL$Wr1k&KBPt0PUbYH13r{jy6+thU085*xJj z-WfRfX;ctu>r*WQ2d-IdD~ZplQlSgM*=Wuh&A$RYjOL<8(4)f)*;fb>VTf^QwU6qP z(Yv&S_3R{@EqmHpNH-772f?X-9nvSGuReE>`x!YdLW|dE!A6er(BtJSvGMH*v@FZ) zRhe6A9!Q3w!fYF4`2>0r%^%Sxqv~EgAmrru3bYypZ9q?>XV6OYELw%0)50~27NJFI zQCjo{=uMf>X$C^y8UQ`11$3B}(65>?PPeT@S&goucZM)0(*FX>Mj`{PzW2)qI9Hle zQfdPs8&jF?FHvn|TLapEQ%`5VzHdEQw{#M08+sE3Z9&`7i|8fvGI|BQiguu#=r!~@ zdIRm!VzoFeUQ5v0YaO(XS|_cu)o$4PA%*1)%-<)d4M8ONGB==tS(V zftIFUb!7x*k~0NHrR-w6HMeVCK9d{`89Hl-Aix&fuaP!$S~0uV7}7esVsDUY`3BhF z2^$^KY_=jB5SZ5=lTlopocu`$%Mdcis)_4gd(D3n`b^pO+j$gq}_qt97SVXDbjdav}l>-YhZ&6r^c@wUtg@tzSAA06Ty5g8FRYnGFr-=MQ7 zs0@9pbuUBTY3YpaO(&IFZPWT?v#}khW3SQ^=mPo?{e&)RJ+z)$FRk}F zbP4@}E~8(yK3ZR`pVpsc)`*bcL(@d+aU}yo$BqiH!9ma%Lu3pb!`eVH^ z+CXi9tRXE^8*~hEldy~xtYQv~1(Tr`)~R4J$;m58&9fKhXHPR^?GPYb0b_P%2~v=Q1UEerkwqZ=5VLf7Dur?H*` zW*~riFJN=!xW{e-CI%Lc)jMA8#7&GmthoczYd&(;CjbYcMr+n+BMtmNi9^bn^f$U~ zjZ!j-K;we(!TDx5jzEpdutghPh9k9XrjE0&e$RI*fXlHs4##Jin}IsSBtt)D6&ql6 zfLVv2mZOd7>)~;BOkIl^4gynA#Lzq#|Mhl&#>dc}l#`>222gOVqwG0M0&IX_$U`of#n~m}he98-PVJso2$Dxd zrcp`x<6bm?u9IEJY>GOSqLTLA-J5siYDY6v zjFkp+EPVo1EBgsxDU1i5Jq&pdzcuE8$3GtGYArUC3f-jG3^lKJN!MDNu~AY>)i|Sj*R`F#Rm{=jP$YZTBld4tBu!u14%qd0Q z8Knh-4b{b70kf};FuSU6DbN&)QA!t9N+L=^3AIY8O{)~$nq1!k3O{b>pj9_k05d?> zE&!+n6VQBXR?*ljHYCEJ2JK)*>fZmP9Z5zz`m$o!Y^`oFEn+NDVcvaU-0a{{-dm4&%>YRwA1K)-CZLpuEB{d#o>Efph(h^0QcP27CVB@QvB} zN7jd+My_L7&jG(ctz1FBxIYz*Io>~z6~m133elu;HZ81GUQP6wl?r4>B`}Gs2bqj~ zC!=ZQFr%DWE8o9qhgq(0xI^kukS8l6n#el#GMv042^K$SLJzk5(HF;M76Ut@aPpU`u zMy|_QJDx%->a?Sp+^cZRFYA%1V-&mwvW4~9=UDEm(V9BB-&=T>qqS&Ved?|kvvtig zn~h>NAdhn9I;%yR8co=&`_%qHmziPYy^TQ|CXBW6u1$6}ncPyJsvEiPU>$L19br~s zOhoIGkCW0585!XL4A9@9?`vg$??L<=IuDcC z`XW1j_O=&|LViM*%F#vibFD&Zw!zF*ut_oc?Vq$_l~KS|biJJUrE3)c8g5i1U^1mB zuh2VXe0JeDt68dGj%%3r)|<`Ge?7-2JFF{yWUg&(`-=-FW&v`s8v zu~vpPsZwFgqW?kmZljFsT|ke(u65*L1$M_~>``wn0#w!;8F~ScG0dH7)%TwbgAgas z1ULOBrEfDzZ_Y|@fm_xpy*9Pje7k9VsAc5Z7Wx&s6+D_Jw zKPVWrduKTg!C~bP5)tZy96#ka99w)6r^V~veG-@6&@W)hZB#3YK?C9^YE|oAV;PKn zO<^__3n3vHFg^VR0yO@FiK!>hsuk3_Jx+(fi%dKckAYB&x%g2Cu2_d(fuM@FA%x-( z{*uT%fxXBUD#CdXUxDW_a=*0Eo zvLF~?5;v851VRs<<6eRwgM(ZJ1Q?v>ZbMK(6W*V4)sJa zUF;){6laPLh>w7yd=ogv-xT+WN5ntD@!bsE+>ufTDOu_d&g^N@LTRP6PTDHH4DRVq zq|c_KDt(nP;OL#MJg6*Eo>Df0D|esr5x8%^R(@6fP+ip)s;?TRMybi*j2)#GsFT$h z>U?!IxLG%=Z>fjWHgXOIw#hieDI+s^mcDuai@`1}q zmoqL`T#2j6wSj9>*8ta8*DkIDT(ey#xY}K(x<2B%#C5If%dT&_?sq-t`k9;H=H}MM z&El5emh9HeZID~8TY;PAw%Bcj+bXv$ZoAxeyS?Z3ncF$H%WgN_{&eTuUEDp~o4NbA z`?-g^N4uvO=q1GX#IeSw^S}FG!@Sl3cLY}_Sd{Y(XJy~gl6>&a49c@kF@l}g?9gGk zT8lg3&de}X&-7X5FNO2Jhr)dInxr zr~j<7>R_{HeyQqjRJX)e<=Y^~=`g5jH@tjr8@O(p!h;=dEHIwqVfwX`P9R&D^>Y-? zLc4IbR-_ecN!p}!I0sF}RyW(;e~|l${TL)g*iMq;^~i zhJ9S3m6qYj+GH(cWG}0=Bn1qx8B_AcI^zlObo>AcS_=)DiDyA`rf5^)3;TsH>^Edc zvW?lynM1`L=xiSk)+j^exF=nsBP)Fi_z^s>vbOWJ8QMr^Gakc>P!O1LLwpj86ZLN9 ze6kcTW3_%ld!P(IsXfR@+olx!1^sN+u~wVSnwtXl5U@2)OPdM?7-l+5PlcHh61+9TSd+B|K( zwm@5`J*F+%iZ0=;cpKi1U&Jrrm+>p`eFxr&UxT2EKH6e!iT13vN?Wb1(aPX^x%MK( zE1{o2l_L!n_RgM~SCBUy{Lcl&*|t1;QK4@C9tiDmbPB_nZ&<~>9bZcGOY({#6atKm zCH-u91z^PPl|8Mfv;;=URO^`1apSBu{UH-P!)oN<^o&)-2yEaubBY+W^t-}X_?#xX}%3B2J`Y}D0R zwjLsyTk|dGh|b5>Y`tpw%K#)VK(V99YV``ZFCFvjm306gk%LCPtYb?uiw5M48(#_W zgZLwcsSmZs%kUv>DPxca2-!*+>LzysL!Y8K<@gA$(4Nqq*8H6iI*va_jn?85_$2;J zTc$m!EnkbjKmqtG?J4kBuFyt~gzT#1%?S3bDip;GUm2@1(Y!pOk14cOudQ>Ki;S+vKat{6a^6TP<0#pk$Nloj&;6U z^-SBMt<$z^Yqb}$%;A;paRbaS7Bj{g*@abxFH}0zb%ql+w78tO6SKBn+oS~_1%dpPDrcZx18sx0QG5Pgx+-&XKokUNPFjG$4%l0z4;b!12Osim<)kIk3htZ6 zS&P=_5^1b$2H8^EEaUZ{!@GNw_(FC4h(8Iy-0)mStk}Q-y@oQUvb`j`pjg|gZPUP8 z`T)4xtnI_Y!hC7LB51--;ISa2bP=wd??SwHOry)SXnNz|Z4lV@W zNQ>b_fD6No5H>ZZDq*qiykGg6$gfY6@>ybfP3yCno$7*o5iq16! zO*x5V*|Bi5dZjnO5RK-Pkr?fz%AQZ+Nhi<%NCIh3I*^Xq%i1g2tJ;orFr(-~5=oM_ zlj7+VKciLXLdEFR&>tWK&LI`OjCY- zh6$#7a^RoYbaa`%iack8-1IYVRznU&WXb}bsQe64-WV0I6P_KaK*ocL#RC)O!WH0MP4EN zbF_io*FElVp|=A*?+d}bI^0hFFW{*k9qTgrkj~^!KoTAy6~v~U)0zAgF!{XpLrvLo zoSe{^{JHj>c1maRS%b-6GA4gTPHCsLZ>pGlhI|7|{#rZ3nA{)&jKAsNf`+MpcS#X& zxgfjHOq^W(LFekX_2KG8ovYs)T%Gf8aTTfy%yLv1u1bpFpI+(vGVr3#!0-Q}z4tJJ z*Ja3cogse!LvE8h(Ce=04EYfl^1F7mMz7-#hZ#dSUi(e^NoUBfIzu=S7{W=MtXItwn>g9Th8ods767EJlqSim>{Q5f(a;xO(eBi)qcztKXnmdY2U`EG)A|O``WnT!Cb5IKV4c`u+Fk9YPV7Go zVp|xoBe+QI5AAjpv14>{-eTmuS6!S`Z?7l2Qy;1)GOAOI46;xEx5!?HZ1<&nBBMN1 zsxEDh=(O#{R4lG92$u7VwiFZt&{`;Vtsz>t0bGVo+(8tZDCQY?DK;XpxFL+bL%CrT z3lz&$6duWqB8@2)DV7+G@8Mr^5;=zvnPR0rRL(P~>|#)P*1tt%<_rU1Gj|yK&>dp; zC3K!aXqP&K=4?8lOM%cwxT(ZOaWjL`?o5VL+_Wa8XK*uhNmWv44x|EWifH%>tF+ z!x5?kSB_vMxJpmIFBg^?Txjw)M5xQ8XLTm61}2qp<>Yya{S79y049Awv0qJDv!2_a zGiejW?I><(Fv-VY(hH19Tez(hx1zXB6_Z{heHoKlv*{Kvsdfl}S#k1Zr@@!D_2J8I zgD<`YU;f1jx!xNr5x@asHVzl}WyEfS5x#XBT9@|klYH(2?jR}R-scW6+V|2vpg5A^ zKK|v+Kf#@(IGEzlD(Zj1>@O6D{FS}MN&K%3 z;)m6P_=btZFosm0r}(p`Yg-+YZ|-OA1`68DUE+S>E_1(fzj0T%tK2p2ckVjHQ4~j0 z97Ay|#c>qJQ=C9?dx|?y+;KB^6QXqCm%GFL$=yZ1Jmz8c+zG69@Jn$b#a$`x#xA>4 z+>=e=n>m+pspkb3qBACSg%`;yj&|R`U{)F*3{{E;@#2WGTuyaXSRq4d;+`|TFh1@ zT;dy{O8}BS6nBA-V6)RU%s1y-f{TK0L2*(U4m)vz;*k^&XX-;A z)@4Ug4BEhmY7(HJd9I|TNG8UmZ2!RtB=4?4|w3T{tb zdmLwQpXoIGY#wx)F%(;?cs`eZgz-Fw;#@Xd{)2d8v*6^sL&F(+502Khck>PnC(mGQ z*}uhF2>yqm(+K~Ei>d_x@P#b_fR9R(1X~6G-_z6K-~9$#-l6s6{Ub8f<*Kd&@t_0o zWqdhPRHqtTEnr-oM)8yynkv7Z*Oee1l%P_I3k|LsOUihr1o2yVP=bmmwpDTUMgAqm z)nbY#F|PW?Lm>a(n3mGh&AgML4%NtBABH+qqsazCpZV7q8o?M^Z}Zaq^;h1ZHo+pW z`jMu7RwbjS9RObh{{h7_V1+IJ5e#LA_>Uo;Ag2_Z;DsfI1gK{Hr+6mCPuD>S2ih8c zgs-TjtvyV^*?%u>jsJ}QoJoHED~cbY_yGeZbBrpTW-$4hKSMEy23iG^vxdml{!V0{ zH$?XAdf=gkwr1?P!2ibI0o9DZ!e8aD@xSxe`5XLA{tx~Zf1BdD6hA`oqZH4hcs|7o zC|*eMV-zo6r+6*J>()V+xuoxK5CGlP zvA03=Y?#RxtEt-0n?$9hJ6F)hTC)Oe`B4z~PMD@+seiorDs z6M#lFlIXcJ7ooGRqlD2A#UW%-yrE3Urg-Ch;y45=#Bm5?g>e)=Pw@+t{#;>#0P#~b zBRPa36d+8Zc$3zELNw6GN{ad&Way`HomGBMhjqzFa##hOO6*jERM%+YwPwmRYkZg!#x_ zSRgE9j`P;px?&VWY-Pnl@|RqGhYr z-fc$q$*8v33zVM8mLx*uVdoa(0jRdXLaPln!U20{G7D}R1g^dG^i(h;_Q~j)XJcz; z?Zrh9hhzhPUL0Vu-)wG)6Un=KOitDDxrOc zq;B2Qd-XN;_JM6nEZ*@k-i+uv&Alz~YkZ52i18i-Rc#*;1sf{VSu|Nk-!qo;S614n zTR)?ZI^CAlmemJ`goarn8Dl5jb3dW7a7`|Y&|Eb0(dZc1nFkgoHvu~3KxAN{LAQYe z(^HL56DYdoqYQ{ZGj;}ojYi^A;-aIHBcejPrdlFlXP@}k(5`Wo*wDzRl*lwoQgT9U zMEnRR?xLeDvno1v>fGfow)UuAf%49YmD_n7O->1gxJQ`0IN4%UvKowFSCpF1s^_Ke znxN^M@xU$)f6*U6U{q~v;OHp8Cg>;~JN4*U2?(R)@*atByLX=&+k}+&P8?;K8aFmK zAwD5KH#f>+ftYg-)C{$Q<<^m~lrVOEAkYs7!kX_;4C~BsSKJHdV>@j1$HE8S#~kA=aWFQ$s#zAEI4A_wGF|r(@)88Opl2fqN-Z$hHY^B$f3*dq|3q+H-B3 zY<$A<(HcKoUy5Hg2Bt;AV(7MxtyfsE#adyJumsJAZppqmCE8Nq8QAYectThP(do;D zr-T*4(-gl-@eYb1wB%}=83NKK7K0hS#IEn%#C*@XJw*>DG=@6eCS>ngWCPznhXCR0|rlL7cu|^nKU!5m|Gau!my>X`T&?-IJO9qJHuis zlQ%JfhmHC;Gh@|p66OVAJH+7d$--7)8`wrD-c9jaYlRnumxPxoew*S0l$cnHL+cTj zP-VILUtH17D!nG`LP6zxk^uYwd(AuL!kYrrYA?m_X(81tnu6~3rg%@5`H6pP8dblL zuR10V-3nxA^TK}N05nH{*dBBYlXAIcf$7+ zAEx*$#W!k_`bWcVelW{i{1>FQ+9$#usecLL|Ez*njS9j9w#Q#o@NemK4+=PtbX~+KXp?Y5xGDT0+!AgJ zcZ5HMyCRr3KcV+G#!8_@^mdLqp7 zzAO{Lp#D|;=6Yg)7_86rMCjNl6rTbaB8IYFep(w@Yp&-Zbn;2`GlomE$ss1hXfaNo z@QL8jfeGKY_sPKdN+%K4&TJApi(O#ZR+5-3riiIxnh4IF?d1Opp*G%h*8HX6Vt zW)n@!7IP{7McV`aD83ACp9W@6Cm-{~i41cSDE_TX%%}KDJuz1-+6~Ovbj)474`h7a zxoiN=S>|+cmI1e!I^1As?_c88`N|yeF$TAX#D~SXur}~fah^C|Tp)sV>n6p2P<)Hx z+Z5lS_)m)OQi3SKo5V#9xGfc*(1qJ_N{9n)gr`I{gd0)*!`uIYw{nKJwUls9yluFz zaN8^Z!3Q0-_$VND1ul_Ww+*llZGaL|Eee|5$vd_`6Xv zuPpQbvoT8IEu)UGvEIo4Rdv;8D&c>lL06l>Nw6yqgaMMqS?2%W#QRHvQRk*v=Ba-{ zr~l(Qh;uVE@Zd3$)-k#{M42Q@Uf?K_6iJm#l8fXjxk>JlS@MuTRyC)j1tl#hX+=qE zO1vp)LrGgod?;zRS!!T7ilin|Q>Ld$Ex=Jkd>xJ=5=cq7uBj2re|{pvcJdFDwfcqd zNI@{VO2L%)IYw703`SQe99@zkARLAGgWrQNmqf7H&+J^FDaA<%Fvd#plmwMY?I{Va z-xw=(mXctcl)CW1{ty^u%VCp+6iPxV3A@J(B43}}NZs{KihUBjYmB*4FR8CS=1Sn0 zfiX9tTuPCWAtT7HPF_x=4wS&Bu~`}<4VH#TL#1KTaA|}zQW_;?Q4&Q-G$k>V#8MJR z3A8PN5@=foN;+gZN@JyQfYdyORA;mqNus1HB`n&EbpH>k{}xoIFsM$Y#2IZS z&0tWS2~d52K@}p+C`r_z+RxnI$?}J!xeTfgQ<7XJJwi!JJ)yclTEw8bkU=$7hw5Sm z)wFv;RW9(^Q~ImEjfFYLS@KiTGX_Ax#0vmTX8;8y3;+r-Yqh4!&Ue;Guy}s6R3?>6 zYhlxo_0k4uqx8JAN!mv01 zQHe8DJ8?oqzX!g*At;9Bv>U6o_FapeZn#VCLPk3V2vRo>%hxHD0G%~MmlSt z@>?C1S@(I%`N{?9Dg)(@u=CAD>1XMZ^ow*^`c?W(xnG6%j;`(7yZY4t$Nx9sbNloza zrs{?E2J5h3H0H_=- z$H=jAoE$GF$nE70a!0unB`{u0qhvZIGbou!$t+49pyWYHG)m}Zxr+f%IYmyD(~z&+ zjRADF6QFY`SwP7`22hA?`VXN04nSdXe3?9mk~vO*4h4Y9!_Xyp1RK^LV#E5w`mo;3 z+}+9YF>)>gCAp@;nC52W3sB@@#pI{E+;xJXd~1ew30Wlsrz!Qc9knWEmw- zQUb=qrzlxL$dDT625nM9YL&sGlV5J&VMI{zJXu3_jbqhzHMo$K^L z9YQN%i31Gh0L+aHoK9xHAa7;B+(OB!GI<*%&(#x{FUva&U_vwiNX*qt?t!r`j1t&= zzm~S>VJdYNw_AS4fFt;@wj|~1$N4xGdyl{;_*dFpz``G2;v$31LVI0 z$a4&k=PB9l1msTuNap9OwdTgj?ce0943MC!y;LS&qp+Dly;j`FH|5&~Ai?DUfP4jz z#rrcrvL!dQ09iY-6LvimbyzBb4$GbQd)ZM@#YJfhuvATl`p-b$KlKpHDhku}Bj&<_8z0whYsepau{W1kKwFC77rjn$j z0=AT7rel7gKWB*iLPun>ImOBH zIm*KflMhkyRha_n|EYRna=!8y!{h>n$!lf|8*$ci> zzBb?pPzI&)cLv83431a-5{}<1ml+&?P|hjml?%#`%1_EgIpse%{!4IFC4i$UQ_dM-p@Pk5 z9p{2Bu|JIkkg-4K6i4+`8vqzpFUkpJYD3D^Gr~e`s~ zSIW6j&Yf~*%6U-ElXB3M29#^KS&cWqsCHC4LEC-RL7n%7S_s@W>o zkQg3wbUe0zNs2m_&2YGubpgr!R!I_&R0Q=O$gpgu^swv_XsTszA7QqGTZ{*(ix1yT-rNbqKrI-vQmI#-A0JO<4W zCp4kbQ3f=l|AXeg1Sh?Uxd=9Bt6L?ImyrO?I=D1v)q&-!svgK@Q6Z2G1ZE6_#U9dngx2xp>MYtX21^@2dML*Pe0%DVN5=7cH>9vgYy-$5Ilum33(W z+dSJ?7L{Qg$Cib_S`oGNWLu%5|e$cgn%Jvp$Jt zBZC3$y~zhNy5Uu9*uHp zubWi=*L9OeWF^y9R8*qj?dH}d7q14eVlpT=9F`XPc1-M^-lJ!)0fPn)A2q(HxMYg4 z%}#Yo(3f|z{8+sz--ETnQ29)DzbhPm2uEMT z`Nr({V0*PBu=>$RGBACh9b&;MA5}DR>(r&JGc5RQ$jVMiZCRe2qM0?1^0cm+r{={< zZ4R$Gb7qIx7ul+I`iAv}l~38~v?NiV* z2KEOA>3f*M>NKMvjHY^1;Ef?ejdim?f-1t659@!AyO4UsNC(r)NAy3QH9C8YTTZTZ z>^LZ4@c6tED^!h%L^vcEq@Vr;aFJ1*odZjFVWntFDXiTs(7~eLOtzpDSpI6};E?l{ z$MPmjbjvU3QJ4uE!>7V_z3C|_kS|-PoNrdN=2{Cl0QXshJf3A6_p;+t3JObX-3BBL z9Wr#7xAYaPr)-SeQ5bU1&aoFK_3PJ*b#ZoJG5f6f^ZN;e*`1@IEU%i+{`Q-Y3s8ns zd*E+cu05v!A>0umxmixJtpp)u2;BFXQc}#WXTo)ZiJ1dZ;Ccz9adEs0w^8eE)Wm%%0}mEgJ?9@5r!7?|!x-7S+g-{NMd4$S-B}WVGi<9#P^?~a|gh;#MlH>t!-2<+3OD7IYg6j~t-Zs|Obs$`KhU+iJ zmv(2@(Fk!(rjO4Y4A;%zy4S>_p6uPWa6PtgOrO4R4P|kU=Gaq)!8Pns#qAq!O=mo7 z2iHH^iUzPWK?w0~xz^M)xQ2T0@p&cbnU3qZ_Q@ISKGc&xHhp{wt0$BtxJ=0I(GRX+ z1&-in&F{v_g?xlw#U=e%p733mT$ta7m6ZtBA6V^rd*Qn%myFNs4)-JBItO;AM-%lF zHuQbvbLSiEolsN^>59-;NShCDvYd>(av=wn(#WL)~i; zZ!{iVgy-Yosy8~L-Rbq`pR@J4>22p5!zN`>@Yex00PDnC^wMmQVj2q7?|0PiIZLf-IcwX6 z%2FpmU8}dgI>nq+-V5|9ft>T9g@r&tMjt!W<~G!OqT}rhToSe->capjDAA)adM6Dh=v=8wqv{x9w5(r^s^?Qvf*9P_d#Rg` zTZEhB7UUM=mgI)vT(mZBk#31_<>S`Yt(RM4c-q~~-!0Xxc_lrZ9LtA03_*GNXHB^` z6l&>28f)Kp;J!_lX4#JRR_~7tRo*q^ACrK2)%zKCg`RAbWXON3&^7G;QG$^MUir^cQ6Rd7Uc(~5Pdtg*-FZ#o>O@B!3kOZ)dv%A<8dBb^pa9<1; zd%$%9OU1Y1BlvWXdVP^M?4K9|yC@phOcHj4UnU2Qu_2W20#7@`28!`aMpkbv)Wo1I zla}{xY4u(Rx<(0XtP5ilN+~LyW@85$dFz@uZ2X=R7UCUgiGUH2=~*ldLRb3h`V($+ z2=)k@Y~177hk#Vj!5YA6imi|jjOw9K*El$TJrSjW-q06i!ja&kpmyVdmo}j7OhnOK zv;YoDeiBYCUJb_yZ$jJ9%jh+<8|_8!!@0AcqT}dG7=gY=Kf%eSzoT0iV+p%rFW3{K zHTH#lFd}h0?hFUZ^@1}RhvLzA94^GAaKzXgyZ|r7&)_mRdFv(o2HuMg!f{KV<8NSZ zjNkAdaA=SVX+T;MKN1dSuOyM4Boj_183(6|OeYVKMPvmjCtJu)vX^{Bj*~OwCvpw; zZ8vd^;Pl2&E}l!_`f|g#v7C*2fSb=P=gPTlAO#L^N4YcHMeZgq@?N|*9}2wb&JW~s z_(}W&{6hX2{&{{Uzn?$Kf5Ttq{}fz>7I1!Jdm&vIB8(HJz}bzq2dH_hPY5%C2kk@z*4!h;x#z2v8fa+b&~o@*;0u#S9)67BE2J3NZ(60 zWRu)lj+DE~!{kDUyjm`Amfw~u;9SOA5Mbb|w1@K;bCqezVsM`AQa(|>S8k~us=wMv z%~U6-R9&HNQ{Pj+Qm>dyrnaU8Q-4#QNi(f5y=eNt^o{8zoU0h*lHxMLrPO7S%SM+y zE}z2*imtAHu8FS0TuWRRxo&cO*Y&jP4L2{hFt>C#Bk@7Em2NxTD%>u)EAGDTN$#WE zr@JqAf5rV1_lsr))>ovMv&|2fSDN22pEO_d@bZZ8=<8A7vCw0)$3c(to|31ZXPRfO z=R=-rJ>T^_>&1Ebc%^vdc+K%z=k=b~_YK4b{teO_OlYv6!PW+c8(ePa*)Y1{poUW$ zu59>L!!wPzMt+Ub8|61z-00;-CmQ|HxMky{#@5F38gFY{(fE3k=1mftSewjmvc1Xi zCVw>bZkpC~V$;W)zSi_qGrn0+v;NJdG<&Yud(AF3Z_vC$^PJ}Mo4?%rix#9sP>TUA zX0%w_;!ulgEnBth*0Q+e(=Fd^d9hWaR*9`9v|85c?N%3Bd$sP|Ix)4fe;o3b{C+uUmF-*#Zz*=@JCJ>{eN#QTi(S?06P=W@H&?RvMH z+3tmQU-&A%@xJ4IpYlE6d)?39Z?NAZey{nR_iy5#?mylC1^=%CTm!lUObRFuI2I@d z#s^LeTow3f5DAJ28XvSW=#yX)92=Y$yejxeh!BzxQW#Pmax&Bn>(EE=-<)Wab3r=o!WNF?o`(4OlR-TqdTwZe5OmA zF4JnLf6aPV!F-fwx_$$y=V8wyPr&NnVyrrDgAPfxE`~5?C)Ip9Es zS4LLG=8WGnlQS1*emO8;VClepgWLy=7_@27^}(rwmkvHNBz(xMAs-EGHZ*VO>%*jB zgNAJwc5Qgt@F$0VKO$zt+z}^6`j4DC^5Cduqw+_+mF1q5o%PCSVf5h9n@8Wy?wehn zeQiwom}kda&PmC6D(9!%#N1`M7p$GEOReX|b{e~M?D=t>#yv6a!uT%Zmyf@gmy-8P z-meq7Pgp(S`oz8yH%`2pKRADTfm|@U;Eh7h!ik0Zi&_;;Ejm&hTs*h<%%t{{o}6^q z*3-7Zj_o7uua`7{N$H`|fYOIcznR>5^2*6KrVN_$%2bc3g;Nhr3z{}>+PUdnr>~#E z&&ZjvZ)TgBbmlj+l4g}XfFBt1z`h549(?G*@3n5)^Hil1>BqAzvzN}kI%n{lT@ST< zNPFn)!`&W!VXoU;+uW0nba-U-qx_?Jj~<>EHSg(pf6mXH|KS45g5?WtFU(o^;bRex zt$6J2qOpq(FOFUO+!Ap~;gS=NcX|Bzr5;PCFFpH2?gL^kV6YKfW~jr4ujre0kq1@vm%q)%VqBcX;iX zzZ37Aw)669<6k@T`q0;pywT&0eY-mB+VN)Cn;Unx*}d|uhHou?TYdYXx9`3){he!j ziuYXHJ8tjUeOddye0RvZ$M*N%fB3zg?|txo*Z1E&kaXak4?2CY`(XQnZ+sa4;cFko zezfyY%%L40$9%lwaO~lopTvFg`lkt>?mE)($lDcND)t^tJ^KE!^kW|#?{oafiGe3R zJ2~Ryna^@RJO6q9=f8e2`HNd$YM|K9KV?3({B(=cQ)A(y}Z)%NS%-xgkJdS&C)=&Sp#^}BZZ_k!PVU7vrW>5b=a#@{^f$KXHC-I{V+ zy1n8~;GJE6_Wbj!y9Iaef_-R`t%lX7+}^*&cSun>*=a80p7n$Nf6HX7xh-Q3lLDW}w-iM=S*$q71D?>(O?!6TOWNqC@B~=nzLii#Q2K z$De^2?-le1=HU45#@HK9t@efUode-;+HN=(kHzD05$vT^il^Xdcou#TQ_vzF#w+2R z=g;wJ*jMXY{2lD8bqQYv4dNQUj&I^yq$!DlbD!f#M>zSpA7~Jx;heHUG7ADr=8=_T z4S5B0h=Xwc^KtSSISX3E4Nl;iaVkwPOK)(Y!KDVb8vNPN z)X?0pNyFw1y&J|f1PcfIA=vnYw$}J*2w`0>J1pQP)#L%^?W#vjE+$v?xXIlFj$UvK zfaehWik&Ifk8=Gts3$oWQv*{&4h~2LKY@0Masw!r2`-#V%v-=t)xD3mfY~blHW6(7 z1&RFcpA$=@@4)xBDKp`SK|N)KsTFcJwKjPJjKbK#gFftt@K#+GDwNC6HzWgf#RsgE zEbnqtTQq-EW>GE}*s@E!BO}_!M45loT`VSlG^Y%Cfc4wCveOi73PnNsy)qN{6o)vr zZ!$$xrZnD+L37r?PPuH;cT+rCyqP-$N6_41yJhiH#bapv^_WQqeT22Q2dJBV|YfVYTKk ziApPALENj-PU&@Nm$X}YTiPS-la5G7r4w)}_m|Qs>1*j5=`5Ve9VL%|==x3ad-56i zXZg1Lr-Brs@QSFwu8T@jIFGxf(pqVw_<#=R4<~bX1U)cEnXJrLRw*wiTi{gg50yj8 zVK|q&LOG_KP(D+>fOwXlm0#eL?kmbQ<+^fHxux7uTS90-ikbtO;yQ4ZT?0Rehsn#- z(9{^t=5B6k2^21@Orn@e_E@3X=E)g#6UD90o zxQv8zx${Anoa{2iMRTDpb6gg}3Ej`Qyy)_p%YK)0E>~T#E9WY>O0Ei=((UTn%(aDU zD_3vVwyy0!=L~S|?ON=*!u3>4eBC<33^W<$oLyn=*#l;wecbxF4RFhZv$~7i zCb`+&O5LWoO>>*!HVd>;>NdyiVYf%z=E3RRJKPSsorN>Io4UuiXS(OOPjO%9zS4c2 z`+E0{?k~FUbbr%*zx#Xc2i!k(Kkt6c{f7G=?swepnz6a1ImjGkjxooX6U-gVsphWc z?&comUgkdLapt+^rRI(1P3FDk_sw6MFPN{G?|8_d-!}AU?9s%dnMVtcRvzIV-8}kv z4D=Z6G1OzYN3O?A59;x>$4eeNJ>Ky+J{V_;uYrG(6^Ou zH{U+KQ+&Vjz2N)1?+xESd~f^y>4*G?pSz!jpO;@lzs7z|{hIr=^h@-!`cc29{ND0A z=6BKWn&0n!H~g_b@#pH-R0+m2hpkE+twiy@_7#3&=j0}tpj0K&zePGAHE`dpbDS=Z1 zR|akm+!c5#@Jf&n6c7{_G%~0(XhG1wgO*pQTv)R450ZXqK=ib5U;c|2rm z$o7zzLS6~k5%OBdg^=Guu7}(VxfOCJR1Iwy+B~#nXzS26p)sLxp^2ecp}C=RLYIUt z4P6$xJam2Nw$L|24}=~GJsNsE^kmqOuHKkTEh-^1>PlW;y<4EG9e z5#B1?JG?Du`k`@S^bP;g5tb3SSbwG<;e3%J5a;Yr@xtuMgi9 z{&D!%;pZ*b!dV21WKk?8i<`y6(!kQ#(#!(;ms;9dQY=}PIhH3auUHOPj#_>Nd)YP1 zb<0i5Ez2Ft-3T1fD56P3vxpWEts=Z50wcmAz>W|R9g!4~5|I|sEn-B(sECOX1rbFN zlOnW;c@fJaRzy4#@oZ$r$n?nmks~9sBC}!cksoP`oD%tD(=q2_ zuEzWxb0g-DSS|Lk*u}Ar$379eIrgpC)3Ik_zm5Ga_J`Q>u|LLMjJ*`c#R+jzoDye> zbB${h*F3IeT{{8q5;!nn(iT^qNa{O=cR}&^BJdmIz%uaYXVMD_637ZqPBy3N3DdClb zo&R4|_x;z@q5pAQt*v#{ilR7LS8-9PSQN?LIb>MLBFP~Ek{nJrcx7E^*Sq!HJUYrHJ$Z7E0e`#$yi#Jfn{WwS(jON zSnaG1RwsK1JB2-*J%T-oJ%;@bdpvt0JBQ6;bJ={hkS$@W*&4Qd5( zUCU0gSF_i$*R#K4A7CG2pJ1P2w{VI%CIqT%Ld@=1F;Go~5ToZ9E4L=DB%3UKOvJ7ve4AE#-Z} zTh80S+r`_%YvBFBJIXu5YvoWg!{ln|x_vMe`kL8c!Pvocbr}8uSnfxq% zHa~~2;(x@?=WF?TzL5{|t^8uXonOj#^5gvV{Gx+ygp+`@kdM3GfVf0sNcSJMXo; z@p=3nuZZ`E#p%39iWEhbLZbi`Rz-=zu5c-Q3PKT3kczOPMzK^;tEf}dD^@C2DfTK3 zD~>BpDq0lh6&Dqk6;~A{$~Tn#d&Fa?a+q?2GEF%}Ia3KJ)k;W7C}YZ{%35We zvR=7TxmLMBxmmeYxn22n`LC+Cs;{b_>TOkuYPf2IDor(7HCLrq zRjHP%7}XlpdetV?R@K+4Ce<<3Db*R(Z>kHbHq~9#JyoabzN$<0T=i1*O5IyMKs`)7 zUOh!UO`V~hq0Uz4sB_gEHBSww^VL>$iQ1ut)n)2(HKksuUaQ`k-G$Si2?MCeu?GEj?+TGgkwTHBawMVqab;UYVhwFU0 zDqToN=_0zAZnbWQu0gj?cR=@}?pIxl?wsy|?uzaY-8J0}U5BnycVG8V_e%eUzQ2Bu zeu#dAew2Q!ew==SK2twaKTAJbzgfRW-=P0Nf54DuFc^#mv%zB6YG^PVH=H!I7|t0k z7=AZgHT-F~VYp>@YItGjHoPk6UC_6nU%`NaK?Oq!h8AQNs0%y=bp;Ite;9ik#~b-Z zz^F9NGtM`fj5edgSZZ_{5u?i(Fp@^f7%|3;3ykZH-x|L+{$M;{JZL;*Y&IS>UNl}d zwi$039~!%i&yC%tKBm5=ey0AWG*h~1u8D2pnS>^ZNp4b@)Ta3+t*NxfuF6fQ2{Yj) zpNTL9Or$AnT4ma2YBl#Vzh_pME6hvHUz_)s_nP;c8_mt;)8@10-^>@ym(5qrt>$ay z|C;ZcADN$+pP65PX<#}y9h?Eq1ZRUeAPeMxN>B%ufTds==mI@pCFlpMzy;t6a1*!{ z+z##pzXQJqe*h1FKY>4k=fO+hW$-H43SI|qf_K1n@E+J%IIwVf;k-h3;flh2g{_6% zma&#}%T!B-Wrk&rg>MmB#1^SVZppJ4EGA2#rO0BlI4rbfnWfHBZ&_(!EUPW+EE_Dl zEsd7rmeZEAmh+a&maCROE!QpgE#20%9-SL&9cP_rO}9?9W>_<=S=MZ8j+JHQT8&oF zYPFVF9ah+iSW&CnT50uL16I;XS!wGsYpwND>t{u?iugssB5{$dsJZA|(fOi_MVE_< zi_v1N*i-B+>02_iWLQaRNm@x&NxWo1$-Zrj>z z_iTUL9@_q~J+-~Czil68PqmM)7DfX_8U>Ao(xJ)FR45DLL1IV- z+6Og4KS2kfLr^nx3_1awg3ds{K^LG$r75LzN{yvt>Dtof(pzv}I33P}v*2ua4$OxE zSP84)`LG7o!3Nj}L$DJrhbv$YTnX30Nq8;10p1L6hj+r?!F%9e;3IGgd=~x_z6sxf z@4|n>58;2{F6SH0Va}<}3}>b@%bD%Wak89Tr@$$8%ABCn>MVBJoDL`KM4T>Xh128o zI{nT%=Pu_3=hL#WWumguvUu70vcqMk%FdMiR(7H6&$7SDI?6iB9+W*Uds6na>^ag8 z8GsB%-bRKYsmLsZk4O+XqCh@E@(~?kKp@14_>dqHLTZpWvH)3xEJ0Qwn~_GO2|0u` zBgc>v$Z6y(avr&aTtV(5kC1MLaxtzouJx`>t}U)+*E!cE*A-W*tIc)W z)$ZzWJ$H4ZZ}b>&Dmof{2OW>5qf^lgbOy>n^H3{Vf;vzbMNkxVqm`&14WJ~t99@Cd zqo1Q+ph;sI0@i7r5#Q;o!!I&2dU?fIiF)V>C#1>;;U`cEvwi(-l?ZXYxrew@+^Oy~_Zas~_lNG;?i_cno8#uYg>JE1=FW2~ z-A?xc_cr%Q_XE#J58Gq*1Uz4O)_FF1ws^LAc6%B?=XZq{^Wt8wce$7GuJdm6Zt?E$e(T-s{oZ@nd&+yo zd(GSCz3uJrc6uLpANl(DhWOs|P4P|l&G60iedwFx%k^=5e4ofy;4}LQeO6zw&+aSr zIemx^^|^hx?-Sn+-&x;de_D^{+x)bDwf~_1xc{WT#edd+#edU($KUS1=kN62_doQ% zBKi=o6K@g&iNVBlB8T7*d_qLX2?e1d<`EX6m_P}f@DWu+h@glF5hLn|)x;iRFR`Ea zkvK^FLL4EE6DNrl;vDf8(Lwx|_?vh@JSMt`=fq3mRaKv=zEu;d1XYfzMAg=+ma4~r zVS!lzZJ;nv6tD#x0W{zb1OnB8aG)j-3B&@4KwY3durlyv;H$uzz>k4n11*7bfeV2v zf!4saz>UCzz~ex7a6oWKFeR889331R92cAroEhW>H9>vQ7zBgXU`fysgo8*B4Z4Hz z;K#v5!6m_E!R5gf!TR9m!Bs&fxH{MvyjtC>dSbP#+Era!{Y~|$>c6X>R==qJm+VFM zCsW8&awIvL9811SW{{a=7MV@vkh!FRw3AMVM{n1UJzasUK;)+{CRjycwKlycvE;wcw2aHcz^iE@WJpe z;pT8#_h5?d|dN&&960g>4Efc zdL%uX9!sawnet_A4bVz@9-U9?XaikI*U)kLV|p=NOV`o$^yl;@dMo`M z-9#UzkJ7)=E%Z710)2_TLqCr6j|_?oiKIkQBWaN_k#{2#BJV|}L^u(CL>LiAq!A#Z zjHn|YMKlq8q#)vr)I}O1zel>GlcMryX*3?)82u)?E4nAz5N(Pci~brt89g066FnEb z7Hx~(j*wk1?EHgGU#*YbOidaFcFjf?^#o!ncLt|Jh99taw zH1=8S^Vq7`+SrEJ=GeB__Sm)9i}>*PJMpRUjCf`|E1n(CiRZ>;admutTpKsUE%D;G zJzg4j#+S!`ig&~x$6q7{Bt|CQO-x9x#>|v3rHqdum>MR^#F+)m3g$n| zO6E)ED`pL|mD$dG!+gu^WA-zROfz$ZX=Sc6ZOm<^ow>*S%{*itGhP3i5&HD`-yJCV Lf3rd_=Gp%Nh=yp) literal 0 HcmV?d00001 diff --git a/AlgorithmsBook.playground/xcuserdata/ST22956.xcuserdatad/xcschemes/xcschememanagement.plist b/AlgorithmsBook.playground/xcuserdata/ST22956.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..55f6ce9 --- /dev/null +++ b/AlgorithmsBook.playground/xcuserdata/ST22956.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,16 @@ + + + + + SchemeUserState + + AlgorithmsBook (Playground).xcscheme + + isShown + + orderHint + 0 + + + +