Вы должны сыграть в гольф программу, которая будет принимать имя файла в качестве ввода, и вы должны вывести, какого цвета файл.
Файл будет иметь любое из этих расширений, но ваша программа должна поддерживать только одно. Пожалуйста, скажите, какой в вашем ответе.
.jpg
.png
.svg
.gif
.bmp
А теперь к классическому макету.
вход
Имя файла с одним из вышеуказанных расширений.
Вы также можете взять объект изображения или уже закодированное изображение.
Вывод
Единственный цвет в этом файле в виде 6-значного шестнадцатеричного кода с необязательным начальным символом, #
например #000000
, черный.
Вы также можете вывести список / кортеж / строку, содержащие десятичные или шестнадцатеричные значения цвета RGB, с четким нечисловым разделителем, например, и
,
|
т. Д.
Вы не можете выводить прозрачность.
Если файл не весь один цвет, вы должны вывести ложное значение, которое не совпадает, #000000
и прекратить работу, ничего не печатая STDERR
. Это так, что вы не можете просто открыть файл и получить значение RGB первого пикселя.
правила
- Шестнадцатеричный код необходимо выводить только в том случае, если файл имеет один цвет.
- Файл будет в
500x500
пикселях - Все пиксели будут иметь прозрачность 0%.
- Это Код-гольф так выигрывает самый короткий код!
Примеры
источник
bool
. Для этого случая я бы возвращал astring
для нормального случая иbool
для ненормального случая, завернутый вobject
. Это нормально, или я могу вернуть пустую строку или подобное?Ответы:
MATL ,
1512 байтПротестировано с изображениями ".png", приведенными в задании. Вероятно, это работает и с другими расширениями. Входными данными могут быть имя файла или URL изображения.
Выходные данные - это десятичные значения R, G, B, разделенные пробелами, или пустая строка (которая является ложной), если существует более одного цвета.
Пример с первым и последним тестами:
объяснение
источник
You may also take an image object or already encoded image instead.
Обновленный OP может сохранять байты ...M×N×3
массив напрямую, что, вероятно, не то, что означает OPBash + core-utils + Imagemagick, 60
Выводит цвет, если есть один цвет, и ничего, если есть более одного цвета.
convert $1 txt:
читает входной файл и выводит его в виде текстового файла, особенно в этом формате:sort -uk3
однозначно сортирует это по третьему столбцу. Этот вывод присваивается массивуa
((${#a[@]}-9))
проверяет, не имеет ли массив длину 9если массив НЕ имеет длину 9 (то есть имеет длину 9), то выведите элемент 2 (на основе 0), который будет уникальным цветом.
источник
JavaScript (ES6) + HTML,
315289243218217215211210208 байтПроверка того, что все пиксели были идентичны, добавила много байтов.Вплоть до того, что он не намного больше, чем когда я просто проверял цвет первого пикселя - доволен этим :)Принимает URL (абсолютные, относительные, данные или что - нибудь , что может быть использовано в качестве
src
Апаimg
) файл изображения в качестве входных данных. Выводит цвет RGB в виде строки, разделенной запятой, или0
для фальси. Протестировано с файлами PNG, но должно работать и с JPG & GIF.Попробуй это
Требуется добавление замыкания
>
наcanvas
элемент для работы с фрагментом. Поскольку извлечение изображений из внешних источников может привести к возникновению ошибки, вместо этого в качестве входных данных будут использоваться URL-адреса данных Base-64. Раскомментируйте последнюю строку, чтобы проверить разные цвета, используя изображение, состоящее из 4 тестовых цветов.источник
A filename with one of the above extensions.
-> Вы уверены, что можете взять изображение как закодированную строку вместо загрузки из файла?You may also take an image object or already encoded image instead.
Обновленный OP может сохранять байты ..."data:image/png;base64,"+
из своего кода, взяв вместо этого ввод в качестве URL.Python 2, 80 байт
PIL.Image имеет функцию getcolors, которая возвращает значение,
None
если количество цветов больше, чем параметр, и возвращает гистограмму цветов в[(pixels, (r,g,b,a)), ...]
структуре.источник
You may also take an image object or already encoded image instead.
Обновленный OP может сохранять байты ...print i and i[0][1][:3]
?Mathematica,
5551 байт-4 благодаря CalculatorFeline
+0 для рефакторинга в полную функцию.
Использование объекта изображения Mathematica в качестве входных данных
Import["filename.png"]
.Возвращает 0, если не все одного цвета. Выводит десятичное значение цвета, если оно только одно.
Объяснение:
источник
a==1
==a<2
иJoin@@
эквивалентно~Flatten~1
в этом случае. (Присоединяйтесь к перерывам, если список содержит какие-либо списки.)If[Length@#==1,#,0]&@Union[ImageData@#~Flatten~1]&
You may also take an image object or already encoded image instead.
. Буду обновлять.Join@@
.Java 8+,
331165119 байт-Байты поблагодарили @LethalCoder за то, что сообщили мне об изменении правила, которое позволило много играть в гольф
-46 байт благодаря @KevinCruijssen и исправленной опечатке.
источник
You may also take an image object or already encoded image instead.
Обновленный OP может сохранять байты ...Object f(java.awt.image.BufferedImage i){Integer j=i.getRGB(0,0),k=500,l;for(;k-->0;)for(l=500;l-->0;)if(i.getRGB(k,l)!=i)return"";return j.toHexString(j);}
. Изменяя версию Java на 8+, вы также можете изменитьObject f(java.awt.image.BufferedImage i)
наi->
. Кроме того, я думаю, что вы сделали опечатку: не должноif(i.getRGB(k,l)!=i)
быть!=j
вместо этого?Python 2 ,
12385 байтисточник
You may also take an image object or already encoded image instead.
Обновленный OP может сохранять байты ...PIL
является исключением из импорта, вы не можете сделатьfrom PIL import*
ниPIL.
C #,
163128125 байтовСохранено 3 байта благодаря @Kevin Cruijssen.
Если у нас не было необходимости в дополнительной проверке того, чтобы изображение было одинакового цвета, то это всего лишь 55 байтов:
источник
b=>{var c=b.GetPixel(0,0);for(int w=500,h;w-->0;)for(h=500;h-->0;)if(b.GetPixel(w,h)!=c)return"";return c.R+" "+c.G+" "+c.B;}
(-3 байта)Mathematica, 112 байт
образ
источник
You may also take an image object or already encoded image instead.
Обновленный OP может сохранять байты ...Most@PixelValue[i, {1, 1}, "Byte"]
сэкономит несколько байтов.If[Length@Tally[a=i~ImageData~"Byte"]<2,"#"<>StringPadLeft[Most@a[[1,1]]~IntegerString~16,2,"0"],False]
- используйте функцию ImageData. Не знал, что существует.Bash + ImageMagick, 100 байт
Протестировано с .png, должно работать и с другими форматами. Выход для полихромного изображения - это просто пустая строка.
источник
((`identify -format %k $1`-1))||
короче чемi=$(expr `identify -format "%k" $1` = 1)&&
.C
224205 байтовПринимает растровое изображение 500x500 в качестве аргумента командной строки. Печатает RGB файла, например
255,255,255
, или0
если файл не является константой. Вероятно, вылетает плохо, если файл не указан.Интересные моменты для заметки:
void*
в месте,FILE*
чтобы избежать в том числе<stdio.h>
for
цикл сi%3
чтобы определить, все ли байты одинаковыисточник
JavaScript + HTML, 143 + 23 = 166 байт
Попробуй это:
Менее гольф:
источник
PowerShell, 79 байт
Менее гольф тестовый скрипт:
499..0*500
означает: повторить 500 раз в диапазоне от 499 до 0$b|% G*l $_ $y
является сокращением для$b.GetPixel($_,$y)
. Этот трюк полезен для gofing, но он замедляет код.Вывод с
$b|% G*l $_ $y
:Вывод с
$b.GetPixel($_,$y)
:Объяснение:
gu
(псевдоним для Get-Unique ) к массиву цветов.hu
является один элемент (свойствоrank
имеет значение только для массива), выведите десятичное значение R, G, B этого элементаисточник
Python 2 + OpenCV + NumPy: 66 символов
colors.py
test.py
Результат:
OpenCV может читать изображение и возвращать его в виде N-мерного массива. NumPy используется для проверки первого пикселя относительно других и вывода значений RGB или пробела.
источник
PHP, 88 байт
анонимная функция принимает индексированный ресурс изображения PHP в качестве параметра, принимает цвет в первом слоте палитры, возвращает код цвета или 0.
программа, 96 байт
берет имя файла GIF из аргумента, печатает код цвета или ничего. Беги с
php -r '<code>' <filename.gif>
.для изображений истинного цвета,
113112 байткак указано выше, но требует истинного цветного изображения.
программа,
122116 байткак указано выше, но требуется файл PNG.
источник