2016-03-05 90 views
-2

的想法是讓什麼是7個字符長字符串產生這個號碼:3552907293224這個腳本:如何反轉這個哈希函數?

sub hash { 
    my $nr = 13; 
    for (split //, shift) { 
      $nr = $nr * 43 + index("acdegijmnoprstuw", $_); 
    } 
    return $nr; 
} 

我設法弄清楚它的「eddigjo」(帶手動嘗試)的字符串,但我需要一個反向追蹤可能會產生上述數字的函數。

回答

3

我會咬,即使你沒有把精力投入到解決問題:

use strict; 
use warnings; 

use feature qw(say); 

my @alphabet = split //, "acdegijmnoprstuw"; #/ 
sub reverse_hash { 
    my ($n) = @_; 

    my @letters; 
    while ($n > 43) { 
     unshift @letters, $alphabet[$n % 43]; 
     $n /= 43; 
    } 

    return join '', @letters; 
} 

say reverse_hash(3552907293224); 
# eddigjo 
+0

謝謝您的回答。我是Perl的新手,我試圖弄清楚這兩天,但我沒有得到任何解決方案,這就是爲什麼我在這裏問。 –

+6

任何人都不可能知道你已經做了什麼嘗試,因爲他們不包括在問題中。 –