Created
February 10, 2016 13:38
-
-
Save iangmaia/7a552c475b8c3cd835f6 to your computer and use it in GitHub Desktop.
Solution for the Trello iOS coding challenge
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
// | |
// TrelloHash.swift | |
// TrelloHash | |
// | |
// Created by Ian Guedes Maia on 09/02/16. | |
// Copyright © 2016 Ian Guedes Maia. All rights reserved. | |
// | |
import Foundation | |
//MARK: - trello hash | |
func hash(s: String) -> Int64 { | |
var h:Int64 = 7 | |
let letters = "acdegilmnoprstuw" | |
for(var i = 0; i < s.characters.count; i++) { | |
h = (h * 37 + letters.indexOf(s[i])) | |
} | |
return h | |
} | |
//MARK: - reverse hash | |
func reverseHashRecursive(let code: Int) -> String { | |
let letters = "acdegilmnoprstuw" | |
let remaining = (code - (code % 37)) / 37 | |
if (code > letters.characters.count) { | |
return reverseHashRecursive(remaining) + letters[code % 37] | |
} else { | |
return ""; | |
} | |
} | |
func reverseHash(var code: Int) -> String { | |
let letters = "acdegilmnoprstuw" | |
var hash: String = "" | |
while code > letters.characters.count { | |
hash.append(letters[code % 37].characters.first!) | |
code = (code - (code % 37)) / 37 | |
} | |
//ha! | |
return String(hash.characters.reverse()) | |
} | |
//MARK: - util | |
extension String { | |
subscript (i: Int) -> String { | |
return String(self[self.startIndex.advancedBy(i)]) | |
} | |
func indexOf(target: String) -> Int { | |
let range = self.rangeOfString(target) | |
if let range = range { | |
return self.startIndex.distanceTo(range.startIndex) | |
} else { | |
return -1 | |
} | |
} | |
} | |
//MARK: - main | |
print(reverseHashRecursive(25377615533200)) | |
print(reverseHash(25377615533200)) | |
print(hash(reverseHash(25377615533200)) == 25377615533200) | |
print(hash(reverseHashRecursive(25377615533200)) == 25377615533200) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment