Вызов:
Напишите программу, которая выводит графический файл шириной 1920 пикселей и высотой 1080 пикселей. Каждый из 2 073 600 пикселей в графике должен иметь уникальный цвет, и никакие значения цвета не должны повторяться. Цвета должны быть указаны в RGB и начинаться с 0,0,0 и считаться в порядке возрастания до 255,255,255. Вы увидите, что изображение размером 1920 x 1080 пикселей будет содержать только много черного, синего и зеленого.
Например, (уменьшенная урезанная версия). Если высота была установлена на 5, а ширина была установлена на 5, будет выведено квадратное графическое изображение 25 пикселей, и каждый пиксель будет иметь уникальный цвет. Цветовой массив RGB будет выглядеть так:
Array (
[0] => Array
(
[0] => 0
[1] => 0
[2] => 0
)
[1] => Array
(
[0] => 0
[1] => 0
[2] => 1
)
[2] => Array
(
[0] => 0
[1] => 0
[2] => 2
)
[3] => Array
(
[0] => 0
[1] => 0
[2] => 3
)
[4] => Array
(
[0] => 0
[1] => 0
[2] => 4
)
[5] => Array
(
[0] => 0
[1] => 0
[2] => 5
)
[6] => Array
(
[0] => 0
[1] => 0
[2] => 6
)
[7] => Array
(
[0] => 0
[1] => 0
[2] => 7
)
[8] => Array
(
[0] => 0
[1] => 0
[2] => 8
)
[9] => Array
(
[0] => 0
[1] => 0
[2] => 9
)
[10] => Array
(
[0] => 0
[1] => 0
[2] => 10
)
[11] => Array
(
[0] => 0
[1] => 0
[2] => 11
)
[12] => Array
(
[0] => 0
[1] => 0
[2] => 12
)
[13] => Array
(
[0] => 0
[1] => 0
[2] => 13
)
[14] => Array
(
[0] => 0
[1] => 0
[2] => 14
)
[15] => Array
(
[0] => 0
[1] => 0
[2] => 15
)
[16] => Array
(
[0] => 0
[1] => 0
[2] => 16
)
[17] => Array
(
[0] => 0
[1] => 0
[2] => 17
)
[18] => Array
(
[0] => 0
[1] => 0
[2] => 18
)
[19] => Array
(
[0] => 0
[1] => 0
[2] => 19
)
[20] => Array
(
[0] => 0
[1] => 0
[2] => 20
)
[21] => Array
(
[0] => 0
[1] => 0
[2] => 21
)
[22] => Array
(
[0] => 0
[1] => 0
[2] => 22
)
[23] => Array
(
[0] => 0
[1] => 0
[2] => 23
)
[24] => Array
(
[0] => 0
[1] => 0
[2] => 24
)
)
Правила:
Любой язык программирования может быть использован для генерации изображения.
Ответ с наибольшим количеством голосов выигрывает.
Цвета должны быть использованы только один раз.
Пиксель в позиции 0,0 должен начинаться с цвета 0,0,0
Цвета должны находиться в пределах 24-битного диапазона истинного цвета.
Размер изображения должен быть 1920 x 1080 пикселей.
Цвета должны быть в формате RGB.
Использование библиотеки для вывода изображения в порядке.
Выходные данные должны быть в формате графического файла, например output.png
Вывод в виде текста, который представляет значения цвета, не учитывается, код должен выводить графический файл.
Размер файла выходного изображения не имеет значения.
Вы должны иметь возможность просмотреть вывод, открыв его в виде графики в веб-браузере Chrome.
Я был бы впечатлен, если вам удастся сделать это с действительно коротким кодом, ваша программа также выводит время в секундах, затраченное на генерацию изображения, встроенного в само изображение, наложенное на последовательные пиксели, ваша программа выводит изображение в течение 10 секунд. Я был бы очень впечатлен, если ваша программа выводит изображение в течение 1 секунды.
источник
x==y==0
кажется немного произвольным. В любом случае, это неоднозначно, потому что эти координаты могут относиться либо к верхнему левому, либо к нижнему левому углу изображения.Ответы:
Python - 660+ байтов
Инкрементная версия
Полный размер: http://www.pictureshack.net/images/57626_all_colors.png (4,52 МБ)
Это изображение, основанное на фрактале Джулии Сет . Каждый цвет добавляется к изображению постепенно, хотя существует значительный предварительный расчет.
Версия светимости
Полный размер: http://www.pictureshack.net/images/95389_all_colors4.png (5,24 МБ)
Я добавил возможность повторять каждый цвет по яркости, а не по индексу. Это не может считаться «отсчетом» с нуля, но это, похоже, слабое требование. Интересно, что эти два порядка представляют совершенно разные структуры изображения. Чтобы использовать это, установите
use_luminosity
флаг вTrue
.Источник
Требуется ПИЛ .
Имейте в виду : это займет несколько минут. Использование PyPy с Pillow работает примерно на одну пятую времени CPython с PIL, поэтому я бы порекомендовал это, если это возможно.
Редактировать : обновлено, чтобы
#000000
оно находилось в верхнем левом углу, как указано.Редактировать : добавлен флаг для повторения цветов по яркости.
Изменить : переключен на собственные сложные вычисления и целочисленные значения яркости, которые немного быстрее.
Решения, над которыми я работал до того, как основным критерием стал конкурс на популярность
PHP - 161 байт
Это происходит для максимально быстрого вывода. Библиотека не используется, только предварительно вычисленный заголовок и прямой байтовый вывод. Запускается менее чем за 2 секунды на моем компе. Увеличивая значение на 256, а не на 1 , он создает эффект псевдоградиента, не требующий реальных вычислений. Единственным недостатком является то, что ( 0, 0 ) не черный, но результат выглядит намного лучше.
ob_start();
иob_end_flush();
не являются строго необходимыми, но буферизация вывода заставляет его работать намного быстрее.Другие интересные приращения включают в себя:
17: http://i.stack.imgur.com/ieyyZ.png
103: http://i.stack.imgur.com/WD2wa.png
326: http://i.stack.imgur.com/c4DSF. png
557: http://i.stack.imgur.com/eTTWE.png
943: http://i.stack.imgur.com/7rrmR.png
2125: http://i.stack.imgur.com/Ct1kM .png
И многие другие. Хотя большинство моделей, которые выглядят как что-либо, напоминают полосы
PHP - 105 байт
Безрассудная неуважение к версии.
Content-type
заголовок, Chrome постарается выяснить, что именно было отправлено. В этом случае он правильно идентифицирует его какimage/bmp
. Последние версии Firefox и IE также могут исправить сломанный заголовок.BM
,I5S2
иCS
сгенерируетNOTICE
ошибку. Чтобы предотвратить искажение изображения,php.ini
необходимо установить отчет об ошибках в (напримерerror_reporting = E_ALL & ~E_NOTICE
).PHP-CLI - 83 байта
Запускайте прямо из командной строки и передавайте в файл (например
$ php all-colors.php > out.bmp
),Content-type
заголовок не требуется. Полученный файл идентичен 105-байтовой версии и может быть просмотрен в Chrome.источник
C с графической библиотекой GD (ошибается, около 2,5 КБ?)
Правила не запрещают изменять существующее изображение. Я сделал программу для замены всех пикселей изображения последовательными значениями RGB от
#000000
до#1fa3ff
, и я очень доволен результатами. Вот что получено из фотографии, опубликованной на Flickr Майклом Карианом ( cc-by-sa 2.0 ):(Необработанное выходное изображение довольно большое (5,6 МБ) )
Вот крупный план верхнего левого угла (увеличенный на 400%):
Время обработки составляет около 3 секунд для изображения такого размера:
и да, все пиксели разных цветов:
(
identify
это утилита ImageMagick;-format %k
опция подсчитывает количество уникальных цветов в изображении)Вот исходный код:
источник
C ++, 750 байт
Полное разрешение PNG (5,1 МБ)
Код создает коллекцию всех целых чисел от 0 до 1080 * 1920, а затем сортирует их по общей яркости. Затем он создает набор Мандельброта и сортирует позиции на основе их итерации и значения. Затем он проходит через оба набора, назначая цвета в порядке от темного до светлого значениям Мандельброта от наименьшего к наибольшему. Наконец, он записывает 32-битное изображение BMP в выходное имя файла, указанное в качестве параметра командной строки.
Код не полностью соответствует, но он не станет намного меньше.
источник
C - 854 байта (при сжатии)
Первоначально у меня было что-то с голубыми, пурпурными и желтыми углами и плавными градациями цветов, которые выглядели действительно хорошо, но это не соответствовало спецификациям.
Следующее соответствует спецификациям: использует «первые» 2 073 600 цветов, без повторов и черный в верхнем левом углу.
Как это работает, это круто. Он строит массив с цветами, а затем сортирует их по вертикали и горизонтали по разным критериям несколько раз. Конечным результатом являются приятные переходы между синим и зеленым и между темным и светлым. Запуск занимает около 1,5 секунд. Скомпилируйте используя:
gcc -o many many.c -lm
и запустите используя:./many > many.ppm
К вашему сведению, это было оригинальное изображение ...
И для тех, кто заинтересован в коде, используемом для создания этого изображения:
источник
./a.out | hexdump | head
показывает ,7d ff de
повторяющиеся много раз), (2) не используют последовательные значения RGB от000000
через1dffff
и (3) пиксел (х = 0, у = 0) не черный (Хотя я сам не вижу смысла в (3).)Рубин, 109
РЕДАКТИРОВАТЬ: я должен отметить, что я представил это, когда вопрос все еще был помечен code-golf , прежде чем он стал конкурсом популярности, поэтому я собирался для короткого кода. Это не очень изобретательно, но я считаю, что это правильное представление.
Цветовые значения варьируются от
00 00 00
до1f a3 ff
, с приращением1
, поэтому отсутствиеred
результата не удивительно.Что касается стоимости добавления 1 символа к длине исходного кода (заменить
<<8
на<<11
), может быть получен следующий вывод. Это охватывает более широкий спектр спектра за счетblue
разрешения. Он увеличивается через пространство RGB в восемь раз быстрее. Цветовые значения варьируются от00 00 00
доfd 1f f8
.источник
рэкет
Раньше никогда не использовал объектно-ориентированное программирование на ракетках (передача сообщений), поэтому я не уверен, что это оптимально, но похоже, что работа выполнена.
Не используя 3 первых бита в красном канале, я получаю все три цвета в моем итоговом изображении.
Brainfuck
Код распечатывает 24-битное изображение BMP в STDOUT для 8-битных интерпретаторов BF с ячейками. Создает то же изображение, что и версия Racket. Он основан на версии PNM.
Ubuntu поставляется с
bf
8-битными ячейками:Старая версия, которая нарушает возможность открытия из Chrome. Он создает файл .pnm, совместимый с большинством средств просмотра изображений.
источник
Обновленная первая версия не имеет всех цветов, уникальных в 24-битном пространстве:
Математика: 110
Правила проверки:
Первый пиксель черный:
Все цвета уникальны:
Математика: 146Занимает 14,778 секунд.
Правила проверки:
Первый пиксель черный:
Все цвета уникальны:
источник
Python - 104
Это версия, которая была бы для соревнования Code-Golf. Так как он просто увеличивает значение с 0 до 2073599, он содержит только уникальные цвета.
Питон - 110
Поскольку мне не понравилась вышеуказанная версия (цветовой диапазон не используется полностью), я попробовал что-то вроде следующего:
Питон - 122
Еще одно дополнение к вышесказанному:
источник
i.show()
может использоваться для открытия изображения в средстве просмотра по умолчанию. Не существует строгого требования, чтобы он был сохранен в файл..show()
у меня тоже не работает. Не знаю почему. : PОбработка, 301
Это не попытка наиболее краткого решения, но она сохраняет весь контроль для достижения желаемого расположения цветов. Да, цвета не последовательные, но это не весело.
источник
0,0
был RGB0,0,0
. Я вижу31,31,31
. Фактически, весь ноль столбца выглядит именно таким цветом.Visual Basic .NET, 273 байта
Это выводит файл 5,61 МБ:
Код выше является сжатой версией этого более читаемого кода. Пробелы были удалены, чтобы сохранить байты.
Ссылка на изображение: http: //µ.pw/k
источник
ImageMagick - конвертировать 119
Давайте использовать
convert
из панели инструментов ImageMagick для создания изображений. Работает за 0 секунд. Гольф до 119 символов. Я накладываю два градиента (красно-синий и черно-белый), преобразую их в HSL и обратно в RGB.Примеры наложения градиента можно найти на страницах справки ImageMagick .
источник
identify -format %k o.png
. Я получил 1762920, а не 2073600PHP, 507
Вам, вероятно, потребуется увеличить объем памяти, выделенной для PHP, для запуска. Использует GD. Занимает около 9 секунд, чтобы сгенерировать изображение.
Ссылка на выходное изображение: http://i.stack.imgur.com/AAKqW.png
Посмотрите, как он работает в Интернете: http://ben-paton.co.uk/portfolio/pixel.php?w=1920&h=1080.
источник
DELPHI / PASCAL (Версия # 1), 361 байт
источник
Tcl / Tk, 149
150источник
Java
411386 + 24 байтаGolfed
Ungolfed
Результат
объяснение
Это не моя попытка найти самое короткое решение, а скорее самое портативное. Импортируется только для BufferedImage, потому что другие не сохраняют байты. Вместо того, чтобы загружать изображение в JPanel и писать на нем, я сохранил время, от начала до записи на диск, в качестве имени файла. Для меня это потребовало, это привело к именам файлов около ~ 110 мс, тогда как время от начала до конца обычно занимало ~ 500 мс. Наконец, он должен быть независимым от платформы, как я тестировал как в Windows, так и на виртуальной машине Ubuntu, и он работал (он записывает файл на рабочий стол). Должен был быть оператор return из-за мусора синтаксиса Callable. Хотя я работаю над обходом, я сомневаюсь, что найду лучшую реализацию самостоятельно из-за экономии от использования l и w для цикла for. Я бы сказал, что полсекунды для Java не так уж и плохи.
Но я верю, что он все еще проверен, так как его все еще можно открыть с помощью chrome, он просто автоматически открывается в вашей программе просмотра png по умолчанию (версия не тестировалась на машинах на основе Unix).
Я знаю о возможном сохранении байтов, но в основном опускал их, чтобы претендовать на бонусы. По запросу я могу загрузить более короткие примеры для конкретной платформы. Спасибо.
редактировать
Удален ненужный блок Try Catch и неправильно отформатированный оператор return для уменьшения ~ 30 байт.
Удалено,
BufferedImage.TYPE_INT_RGB
потому что буквально 1.источник