<?php
$alphabet = 'acdegilmnoprstuw';
// test data
$hash = 680131659347;
$string = 'leepadg';
$task_hash = 696005871397;
echo sprintf('Hash of string «%s» is «%s».', $string, get_hash($alphabet, $string))
, PHP_EOL
, sprintf('String of hash «%s» is «%s».', $hash, unhash($alphabet, $hash))
, PHP_EOL
, sprintf('Solution for hash «%s» is «%s».', $task_hash, unhash($alphabet, $task_hash))
;
function get_hash($alphabet, $string) {
$h = 7;
$len = strlen($string);
for($i = 0; $i < $len; $i++) {
$h = ($h * 37 + strpos($alphabet, $string[$i]));
}
return $h;
}
function unhash($alphabet, $hash) {
$result = '';
$len = strlen($alphabet);
while ($hash > 7) {
for ($i = 0; $i < $len; $i++) {
$newres = ($hash - $i) / 37;
if (is_int($newres)) {
$result .= $alphabet[$i];
$hash = $newres;
break;
}
}
}
return strrev($result);
}
preferences:
52.76 ms | 402 KiB | 5 Q