Category: финансы

Category was added automatically. Read all entries about "финансы".

(no subject)

WebMoney Transfer - полноценная среда финансовых взаимоотношений в интернете. Её ядром является платежная система, которая позволяет участникам обмениваться цифровой наличностью безопасным способом. В отличие от многих других платежных систем, WebMoney предоставляет богатый API, позволяющий не только принимать платежи от покупателей в интернет-магазине, но и выполнять другие действия (передавать деньги, работать с платежами, защищенными кодом протекции, получать историю операций, обмениваться сообщениями по WM-почте).
Мной написан модуль Business::WebMoney, который распространяется по свободной лицензии, и уже получил статус официального Perl-интерфейса системы.
Collapse )

Jenkins' hash

Эта эадачка навеяна соседним топиком о неупорядочности хэш-таблиц и заключается в создании функции обратной хэш-функции Боба Дженкинса. Решение может выглядеть примерно так:
my $x = 0;

my $jenkins_iterator = reversed_jenkins($x);
while (defined(my $key = $jenkins_iterator->())) {
    # Save or print out $key:
    # ... 

    # In this particular case, we have "\x0" x 1, "\x0" x 2, "\x0" x 3 etc. after each iteration
}
Реализация посредством перебора - не интересует, потому что у Моссада, в частности, наверняка не найдется денег даже на самый подержанный суперкомьютер. Однако, авторам иных решений, возможно, разрешили бы по пятницам открывать ногой двери в каком-нибудь Goldman Sachs. Ну, если это вас не прельщает, то можно просто потешить себя славой Герострата. Исходная функция ниже по тексту.
use Math::BigInt;

sub U32_MASK () {Math::BigInt->new(2)**32 - 1}

sub U32_HASH_SEED () {Internals::hash_seed()}

sub U32_3 () {Math::BigInt->new(3)}

sub U32_6 () {Math::BigInt->new(6)}

sub U32_10 () {Math::BigInt->new(10)}

sub U32_11 () {Math::BigInt->new(11)}

sub U32_15 () {Math::BigInt->new(15)}


sub jenkins
{
     local $_;

     my $u = Math::BigInt->new(U32_HASH_SEED);
     for (unpack("U*", $_[0])) {
         $u += $_;
         $u &= U32_MASK;

         $u += $u << U32_10;
         $u &= U32_MASK;

         $u ^= $u >> U32_6;
     }

     $u += $u << U32_3;
     $u &= U32_MASK;

     $u ^= $u >> U32_11;

     $u += $u << U32_15;
     $u &= U32_MASK;

     $u->numify;
}


'Good Luck to you!';