Created
October 7, 2014 09:37
-
-
Save isRuslan/5cfc8b425a17a83394f8 to your computer and use it in GitHub Desktop.
Trello developer task
This file contains 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
#!/usr/bin/node | |
/** | |
* Trello task description: https://trello.com/jobs/developer | |
*/ | |
/** | |
* @function hash Create hash from string | |
* @param {String} str String to hash | |
* @return {Number} hash | |
*/ | |
function hash (str) { | |
var h = 7; | |
var letters = "acdegilmnoprstuw"; | |
for (var i = 0; i < str.length; i++) { | |
h = (h * 37 + letters.indexOf( str[i] )); | |
} | |
return h; | |
} | |
/** | |
* @function deHash Get string from hash | |
* @param {Number} hash Hash to string | |
* @param {Number} L Lenght of string | |
* @return {String} string | |
*/ | |
function deHash (hash, L) { | |
var letters = "acdegilmnoprstuw"; | |
var str = ''; | |
var hashList = []; | |
var index = null; | |
for (var i = 0; i < L; i++) { | |
hashList.push(parseInt(hash)); | |
hash = hash/37; | |
} | |
for (var j = hashList.length-1; j >= 0; j--) { | |
if (j !== L-1) { | |
index = hashList[j] - hashList[j+1]*37; | |
} else { | |
index = hashList[j] - 7*37; | |
} | |
str += letters[index]; | |
} | |
return str; | |
} | |
var hash7 = hash('leepadg'); | |
var deHash7 = deHash(hash7, 7); | |
console.assert('leepadg' == deHash7, 'Hashing `leepadg` failed'); | |
console.log( 'Test `leepadg` ok' ); | |
var deHash9 = deHash(956446786872726, 9); | |
var hash9 = hash(deHash9); | |
console.assert(956446786872726 == hash9, 'Deashing `956446786872726` failed'); | |
console.log( 'Test `956446786872726` ok\n' ); | |
console.log( 'Answer: %s', deHash9 ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment