Last active
September 20, 2017 16:44
-
-
Save vukcevich/e785e0fc4ad0fcbe0022fec111c8a092 to your computer and use it in GitHub Desktop.
Swift - find pattern that matches input pattern string
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import UIKit | |
| //Find matching pattern string as per input 'pattern' string | |
| //****Input: | |
| //var arStr = ["abbba"] //test 1 | |
| //var arStr = ["bbbaaa", "baaaa"] | |
| //var arStr = ["bbbaaa", "baaaa", "abbbc", "abbba"] | |
| var arStr = ["abbba", "bbbaaa", "cbbbc", "baaaa", "abbbc", "abbba"] | |
| let pattern = "xyyyx" //pattern to match against | |
| //-1) convert string pattern to array of strings | |
| //let aP = Array(pattern.characters) | |
| let pArr = pattern.characters.map { String($0) } | |
| print("pArr: ", pArr) | |
| //-2) Create keys for pattern to use -- using 0 and 1 | |
| //Note: using 'tuple' in switch statment | |
| var newKeys = [Int]() | |
| for (i, item) in pArr.enumerated() { | |
| switch (i,item) { | |
| case let (m,"x") where (m == 0 || m == 4): | |
| newKeys.append(0) | |
| case ( 1...3, "y"): | |
| newKeys.append(1) | |
| default: | |
| break | |
| } | |
| } | |
| print("newKeys: ", newKeys) //print out keys == mapped properly | |
| //-3) map varialbe 'checkString' according to array of 'newKeys' values | |
| var matchingArray = [String]() | |
| for (i, item) in arStr.enumerated() { | |
| var checkString = "" | |
| for (k, indexValue) in newKeys.enumerated() { | |
| switch indexValue { | |
| case 0: | |
| //index of Character and character value | |
| let index = item.index(item.startIndex, offsetBy: indexValue) | |
| checkString.append(String(item[index])) | |
| case 1: | |
| let index = item.index(item.startIndex, offsetBy: indexValue) | |
| checkString.append(String(item[index])) | |
| default: | |
| break | |
| } | |
| // print("debug (check) -- tempString: ", tempString, "\n") | |
| } | |
| //if there is match we append it to 'matchingArray' | |
| if (checkString == item) { | |
| matchingArray.append(item) | |
| } | |
| } | |
| print("Matching Pattern - Array:", matchingArray) | |
| //Tip: | |
| //Another way to map string pattern to keys: | |
| let pTest = "xyyyx" | |
| let pTestArray = Array(pTest.characters) | |
| var keysArray = [Int]() | |
| //we map it to keys according position of the key as per their index | |
| for (i, _) in pTestArray.enumerated() { | |
| switch i { | |
| case 0,4: | |
| keysArray.append(0) | |
| case 1...3: | |
| keysArray.append(1) | |
| default: | |
| break | |
| } | |
| } | |
| print("dbg-keysArray:", keysArray) | |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Xcode 9 - Swift 4
It should work with Xcode 8 and swift 3.