Skip to content

Instantly share code, notes, and snippets.

@vukcevich
Last active September 20, 2017 16:44
Show Gist options
  • Select an option

  • Save vukcevich/e785e0fc4ad0fcbe0022fec111c8a092 to your computer and use it in GitHub Desktop.

Select an option

Save vukcevich/e785e0fc4ad0fcbe0022fec111c8a092 to your computer and use it in GitHub Desktop.
Swift - find pattern that matches input pattern string
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)
@vukcevich
Copy link
Author

Xcode 9 - Swift 4

It should work with Xcode 8 and swift 3.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment