2012/10/26 Михаил Монашёв <[email protected]>:
> Здравствуйте, Ruslan.
>
>> Еще не смотрел другие  решение, но вот мой вариант:
>
>> # этот блок кода надо ускорить
>> srand(123);
>> my $dots = 39293;
>> my (@color) = map Imager::Color->new(rand(255), rand(255), rand(255),
>> 255 ), (1..30);
>> my $dots_per_color = $dots/@color;
>> foreach my $color (@color) {
>>     $image->setpixel(
>>         x => [map rand(1024), 1..$dots_per_color],
>>         y => [map rand(1024), 1..$dots_per_color],
>>         color => $color
>>     );
>> }
>
>> Оригинальное:
>> Time: 1.1980619430542
>> File size: 344696
>> Result: 287711.334124571
>
>> Мое:
>> Time: 0.078991174697876
>> File size: 349384
>> Result: 4423076.39222125
>
>
> Твой вариант самый быстрый и дающий наилучший результат. Я
> немного доработал твой вариант:
>
> - srand(123);
> + srand(13);
>
> и получил больший размер файла при том же времени:
> File size: 366696
> а значит мой вариант лучше ;-)

Вот вам еще в два раза быстрее, но с хаком:

srand(13);
my $dots = 39293;
my (@color) = map Imager::Color->new(rand(255), rand(255), rand(255) ), (1..30);
my $img = $image->{'IMG'};
Imager::i_ppix($img, rand(1024), rand(1024), $_)
        for (@color)x($dots/@color);

:)

> --
> С уважением,
>  Михаил                          mailto:[email protected]
>
> --
> Moscow.pm mailing list
> [email protected] | http://moscow.pm.org



-- 
Best regards, Ruslan.
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить