[Moscow.pm] Конкурс

Михаил Монашёв postmaster на softsearch.ru
Пт Окт 26 08:38:40 PDT 2012


Здравствуйте.

Вот  код,  дающий  пока  лучший  результат.  Основан  на  коде Руслана
Закирова  с  подобранной  на  глаз константой для srand, дающей худшее
сжатие  и увеличено количество точек. Они наслаиваются и увеличение до
40000  даёт  непревышение  лимита.

Также добавлена  проверка  на количество пикселей.

#!/usr/bin/perl
use strict;
use warnings;

use Imager;
use Time::HiRes qw(time);

my $filename = 'competition.jpg';
my $image = Imager->new(xsize=>1024, ysize=>1024);
my $before = time();

# этот блок кода надо ускорить
srand(13);
my $dots = 40000;
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
    );
}

my $after = time();

my $black_color = Imager::Color->new(0, 0, 0);
my $nonblack_pixels=0;
for my $x (0..1023) {
        for my $y (0..1023) {
                unless ( $image->getpixel(x=>$x, y=>$y)->equals( other=>$black_color, ignore_alpha=>1) ) {
                        $nonblack_pixels++;
                }
        }
}
if ($nonblack_pixels > 39293) {
        die 'Too match non-black pixels: '.$nonblack_pixels;
}

$image->write(file=>$filename) or die $image->errstr;
my $filesize = -s $filename;
my $elapsed = ($after-$before) or die 'You are winner!';

print "Nonblack pixels: ",$nonblack_pixels,"\nTime: ",$elapsed,"\nFile size: ", $filesize, "\nResult: ",$filesize/$elapsed,"\n";

-- 
С уважением,
 Михаил                          mailto:postmaster на softsearch.ru



Подробная информация о списке рассылки Moscow-pm