• [^] # Re: La solution

    Posté par . En réponse au message Equivalent en Perl de Hashcode en Java. Évalué à 1.

    Ou pareil en plus court, parce que quand même, décomposer des multiplications en additions, pour ensuite faire des soustractions, c'est un peu fastidieux...
    J'étais tellement content d'avoir un truc qui marche, que je me suis empressé de le couler dans le marbre !

    sub hashCode {
    my $hash = Math::BigInt->new();
    my $MAX_VALUE = Math::BigInt->new('9223372036854775808');
    my $MIN_VALUE = Math::BigInt->new('-9223372036854775807');

    foreach(split //,shift) {
    $hash->bmul(31);
    $hash->badd(ord($_));
    while ($hash->bcmp($MAX_VALUE)>0) {
    $hash->bsub($MAX_VALUE);
    $hash->bsub($MAX_VALUE);
    }
    while ($hash->bcmp($MIN_VALUE)<0) {
    $hash->badd($MAX_VALUE);
    $hash->badd($MAX_VALUE);
    }

    }
    return $hash->bstr();
    }