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

Dmitry Karasik dmitry на karasik.eu.org
Пт Окт 26 06:09:12 PDT 2012


1453063 байта =)

use Prima;
Prima::Image->new( 
	width  => 1024, 
	height => 1024, 
	type   => im::RGB, 
	data   => '' . ("\xff" . ("\0" x 79)) x 39293,
)-> save(
	'competition.jpg',
	quality => 100,
);

> Решение опять тривиально. Сжатие идет квадратными блоками, достаточно                                                                                          
> нарисовать один такой случайный квадрат, и размножить его, для интереса                                                                                        
> можно его ротировать. 

+1, rand вообще не нужен

/dk


On Fri, Oct 26, 2012 at 04:01:59PM +0400, Михаил Монашёв wrote:
> Здравствуйте.
> 
> Возникла   идея  провести  конкурс  по  творческому  программированию.
> Участвовать  может  каждый.  Достаточно  прислать  в лист свой вариант
> решения  задачи.  Другие  участники  могут использовать чужие решения,
> беря  оттуда  всё,  что им нужно, развивая и дорабатывая их. Побеждает
> тот,   кто  пришлёт  наилучшее  решение.  Возможно  победителей  будет
> несколько,   если   их   решения   будут  давать  примерно  одинаковые
> результаты.  Дату  окончания  конкурса  пока  фиксировать  наверное не
> стоит. А там видно будет.
> 
> Задача.
> 
> Требуется сгенерить jpeg-файл размером 1024х1024 точек 16777216 цветов
> максимального размера за минимальное время. На изображении этого файла
> до  сжатия  должно  быть  не  более  39293  нечёрных(rbg=0,0,0) точек.
> Временем  работы  скрипта  считается  время  создания  изображения. Не
> считаются сжатие и сохранение на диск результирующего файла.
> 
> Повторные   запуски   скрипта   должны  давать  идентичные  файлы.  XS
> использовать  нельзя. Пишем только на перле. Нельзя увеличивать размер
> файла за счёт добавления комментариев и прочих метаданных. Изображение
> создаётся в последней версии Imager-а.
> 
> Считается  отношение  размера  файла,  на  время  работы.  У  кого это
> отношение будет наибольшим, тот и победил.
> 
> При  этом  каждый  может  проверить  код  другого  участника у себя на
> компьютере.  Результаты конечно могут отличаться, но это не важно, ибо
> в  процессе  конкурса  будет  видно, кто предлагает лучше оригинальные
> идеи,  кто  лучше  оптимизирует  реализации чужих и т.п. Заодно узнаем
> силу коллективного разума, и существует ли он вообще. :-)
> 
> Вот первая и самая примитивная версия генерилки файла:
> 
> #!/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(123);
> for (my $i=0; $i<39293; $i++) {
>         my $color = Imager::Color->new(rand(255), rand(255), rand(255) );
>         $image->setpixel(x=>rand(1024), y=>rand(1024), color=>$color);
> }
> 
> my $after = time();
> $image->write(file=>$filename) or die $image->errstr;
> my $filesize = -s $filename;
> my $elapsed = ($after-$before) or die 'You are winner!';
> 
> print "Time: ",$elapsed,"\nFile size: ", $filesize, "\nResult: ",$filesize/$elapsed,"\n";
> 
> P.S.
> Я никого не нанимаю. Конкурс исключительно ради развлечения.
> 
> -- 
> С уважением,
>  Михаил                          mailto:postmaster на softsearch.ru
> 
> -- 
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org

-- 
Sincerely,
	Dmitry Karasik



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