 }
 
 // Part Two
+hashDict.removeAll()
 measure {
     for (index, candidate) in findKeys(base: input, numberOfKeys: 64, stretchCount: 2016).sorted(by: { $0.index < $1.index }).enumerated() {
         print (String.init(format: "%02d [%@] %@", candidate.index, String(candidate.character), candidate.hash))

extension String {
    
    func tripletCharacter() -> Character? {
        
        let lastIndex = self.index(self.endIndex, offsetBy: -2)
        for index in self.characters.indices {
            if index == lastIndex {
                break
            }
            
            if self.characters[index] == self.characters[self.index(index, offsetBy: 1)]
                && self.characters[index] == self.characters[self.index(index, offsetBy: 2)] {
                return characters[index]

        return hash
    }
    else {
        var hash = string.md5_2()
        autoreleasepool {
            for _ in 0..<stretchCount {
                hash = hash.md5_2()
            }
        }
        hashDict[index] = hash
