Входные данные : шестнадцатеричный цвет RGBA c
( FFFF00FF
пример) и целое число> 0 и <1000 n
( пример 200
).
Вывод : Сырое байт файла PNG таким образом, что , когда выход сохраняется в файл и открыть в программе просмотра изображений, n
по n
изображению , заполненного цветом c
отображается.
Спецификация : Ваша программа должна выводить точно :
- заголовок PNG (
89504E470D0A1A0A
в шестнадцатеричном формате ) IHDR
фрагмент , содержащий эти спецификации:- ширина: предыдущий ввод
n
- высота: предыдущий ввод
n
- битовая глубина:
8
(RGBA
) - тип цвета:
6
(истинный цвет с альфа) - метод сжатия:
0
- метод фильтра:
0
- метод чересстрочной развертки:
0
- ширина: предыдущий ввод
- один или несколько
IDAT
фрагментов, содержащих данные изображения (сплошное изображение ранее введенного цветаc
); может быть сжатым или несжатым IEND
конечного изображения кусок
Более подробная информация доступна в Википедии , на сайте W3 или через поиск Google.
Ограничения :
- Вы не можете использовать любые библиотеки изображений или функции, предназначенные для работы с изображениями любого рода.
- Ваша программа должна работать менее чем за 3 минуты и вывести файл размером менее 10 МБ для всех входных данных (проверка работоспособности).
- Это код-гольф , поэтому выиграет самый короткий код в байтах!
code-golf
graphical-output
Дверная ручка
источник
источник
999x999
Файл имеет более чем 30720 пикселей, так что кажется внутренне противоречивым.Ответы:
Perl, 181
Размер составляет 180 байт и
-p
требуется опция (+1). Счет тогда 181.Аргументы задаются через STDIN в строке, разделенной пробелом, цветом в виде шестнадцатеричного значения (16 символов) и количеством пикселей для ширины / высоты, например:
Размер файла составляет 832 байта. Изображение максимального размера (n = 999) того же цвета имеет 6834 байта (намного меньше 10 МБ).
В решении используются две библиотеки:
use Digest::CRC crc32;
для значений CRC32 на концах чанка.use IO::Compress::Deflate deflate;
сжать данные изображения.Обе библиотеки не связаны с изображениями.
Ungolfed:
Правки
use IO::Compress::Deflate':all';
заменяется наuse Compress::Zlib;
. Последнийcompress
по умолчанию экспортирует функцию deflate . Функция не нуждается в ссылках в качестве аргументов, а также возвращает результат напрямую. Это позволяет избавиться от переменной$o
.Спасибо за ответ Майкла :
Функция
k
: вызовpack
может быть удален с помощью шаблонаNa*N
для первогоpack
в функции.pack
ШаблонNNCV
с четырьмя значениями оптимизируетсяNNC3n
с шестью значениями.Спасибо за комментарий ВадимР с большим количеством советов:
use String::CRC32;
короче чемuse Digest::CRC crc32;
.y///c-4
короче чем-4+y///c
.CH*
с повторением в значении.$i
с помощью ссылки на значение.-p
) с соответствующим разделителем пробела/ /
. Тогда первый вариант в,$`
а второй аргумент входит в$'
.-p
также автоматически печатает$_
."\cZ"
короче чем"\x1a"
.Лучшее сжатие
За счет размера кода данные изображения могут быть дополнительно сжаты, если применяется фильтрация.
Нефильтрованный размер файла для
FFFF0FF
200
: 832 байтаФильтр
Sub
(горизонтальные различия пикселей): 560 байтФильтр
Sub
для первой иUp
остальных строк: 590 байтСначала нефильтрованная строка, затем фильтр
Up
: 586 байтТакже
Compress::Zlib
можно настроить; самый высокий уровень сжатия может быть установлен с помощью дополнительной опции для уровня сжатия в функцииcompress
за счет двух байтов:Размер файла примера
yellow200.png
без фильтрации уменьшается с 832 байт до 472 байт. Применительно к примеру сSub
фильтром размер файла уменьшается с 560 байт до 445 байт (pngcrush -brute
дальнейшее сжатие невозможно).источник
-p
. В дополнение к пониманию ответа Майкла (NA*N
иNNCV
шаблонов), -String::CRC32
экспорт по умолчанию,y///c-4
все в порядке,CH*
шаблон,$i
нет\cZ
, голые слова в порядке,-p
и/ /;
помещает аргументы в prematch и postmatch. Интересно, если я что-то пропустил и счет может стать ниже 200 :)use Compress::Zlib;
PHP 214
Я не специалист по PHP, здесь есть место для игры в гольф. Советы приветствуются.
Создайте файл PNG:
Генерация потока base64 (вставьте результат в адресную строку браузера)
Безголовая версия:
источник
Python, 252 байта
Этот скрипт принимает входные данные из argv. Запустите этот скрипт из командной строки, как
python 27086.py deadbeef 999
источник