Skip to content

Instantly share code, notes, and snippets.

@iangmaia
Created February 10, 2016 13:38
Show Gist options
  • Save iangmaia/7a552c475b8c3cd835f6 to your computer and use it in GitHub Desktop.
Save iangmaia/7a552c475b8c3cd835f6 to your computer and use it in GitHub Desktop.
Solution for the Trello iOS coding challenge
//
// 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