[Moscow.pm] Конкурс
Roman Parshin
roman.dev на gmail.com
Пт Окт 26 05:09:56 PDT 2012
Здравствуйте!
Хотелось бы уточние ТЗ, а именно "не более 39293 нечёрных(rbg=0,0,0) точек".
Ведь 1 нечерная точка - это тоже не более 39293, в чем подвох?
Am 26.10.2012 14:01, schrieb Михаил Монашёв:
> Здравствуйте.
>
> Возникла идея провести конкурс по творческому программированию.
> Участвовать может каждый. Достаточно прислать в лист свой вариант
> решения задачи. Другие участники могут использовать чужие решения,
> беря оттуда всё, что им нужно, развивая и дорабатывая их. Побеждает
> тот, кто пришлёт наилучшее решение. Возможно победителей будет
> несколько, если их решения будут давать примерно одинаковые
> результаты. Дату окончания конкурса пока фиксировать наверное не
> стоит. А там видно будет.
>
> Задача.
>
> Требуется сгенерить 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.
> Я никого не нанимаю. Конкурс исключительно ради развлечения.
>
--
Roman Parshin
<roman.dev на gmail.com>
Подробная информация о списке рассылки Moscow-pm