Skip to content

Instantly share code, notes, and snippets.

@oisdk
Last active November 4, 2015 11:28
Show Gist options
  • Save oisdk/e65f3f9f4d4993ac6e59 to your computer and use it in GitHub Desktop.
Save oisdk/e65f3f9f4d4993ac6e59 to your computer and use it in GitHub Desktop.
extension CollectionType where Generator.Element : Equatable {
private func indexOf(from: Index)(_ e: Generator.Element) -> Index? {
for i in from..<endIndex {
if self[i] == e {
return i
}
}
return nil
}
}
extension String.CharacterView {
private func rangeOf(x: String.CharacterView, i: Index) -> Range<Index>? {
guard let j = x.first.flatMap(indexOf(i)) else { return nil }
var k = j
for c in x {
if k == endIndex { return nil }
if c != self[k++] { return rangeOf(x, i: j.successor()) }
}
return j..<k
}
}
extension String {
public func rangeOf(x: String) -> Range<Index>? {
return characters.rangeOf(x.characters, i: startIndex)
}
}
import Foundation
let cs = Array("abcdefghij".characters)
func randString(length: Int) -> String {
return String((0..<length).map { _ in
cs[Int(arc4random_uniform(10))]
})
}
!(0..<100).contains { _ in
let long = randString(100)
let shrt = randString(3)
return long.rangeOf(shrt) != long.rangeOfString(shrt)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment