Это просто описать, и я с трудом мог поверить, что раньше это не играли в гольф:
Для данного изображения (независимо от формата, поддерживаемого вашим языком) найдите уникальные цвета и выведите список цветов.
- Выведите цветной код в шестнадцатеричном RGB, то есть знак хеша,
#
за которым следуют 2 цифры для R, 2 цифры для G и 2 цифры для B. (#xxxxxx
где x может быть 0-9, AF и / или af). - Шестнадцатеричный код должен сопровождаться пробелом
и количеством десятичных пикселей, затем новой строкой (
\n
или\r\n
). - Список должен быть отсортирован по убыванию (наиболее часто встречающийся цвет вверху).
- Если есть галстук (два цвета с одинаковым количеством), порядок не важен.
- Изображение не будет содержать прозрачность, поэтому любое значение альфа не имеет значения. Значение альфа не может быть частью вывода.
- Размер изображения 4000x3000 должен поддерживаться (это может иметь значение для определения типа)
Пример изображения "10red 20blue 30black 40white":
Ожидаемый результат:
#FFFFFF 40
#000000 30
#0000FF 20
#FF0000 10
Пример изображения "синий градиент":
Один из ожидаемых выходных данных (поскольку порядок одинаковых цветов может отличаться):
#718DFF 19
#5571FF 15
#3855FF 11
#8DAAFF 11
#1C38FF 7
#AAAAFF 7
#8D8DFF 6
#AAC6FF 6
#C6C6FF 5
#C6E2FF 4
#001CFF 3
#E2E2FF 3
#FFFFFF 3
Пример изображения «testImage», любезно предоставлено @Luis Mendo :
Ожидаемый результат:
#FFFFFF 18042
#000000 1754
#FF3300 204
Похоже на этот вопрос , но вывод текста, а не изображения.
code-golf
image-processing
color
Томас Веллер
источник
источник
count descending
немного неясно. Как мы сортируем это?the most frequent colors at the top
?Ответы:
Mathematica, 91 байт
Использует совершенно другой метод из ответа @ DavidC . В отличие от этого, он может поддерживать изображения с любым размером и количеством цветов. Объяснение:
источник
Баш + coreutils, 54
Это предполагает ввод STDIN формата .txt Imagemagick .
Ideone.
Если указанный выше формат ввода слишком растянут, мы можем добавить преобразование Imagemagick из любого формата:
Bash + coreutils + Imagemagick, 71
Здесь имя файла входного изображения передается как параметр командной строки.
источник
,
awk
частьawk '$0=$2" "$1'
.JavaScript (ES6),
359355 байтСохранено 4 байта благодаря @Neil
демонстрация
Другие тестовые примеры, которые я загрузил в imgur для поддержки CORS:
Кажется, что конкретные данные о цвете на этих двух объектах несколько изменились при загрузке, но все равно выводит одинаковое количество вхождений для этих двух тестовых случаев.
источник
|
имеет более низкий приоритет, чем<<
если бы вы использовали его вместо того, чтобы+
вам не понадобилось так много()
s.<!-- language: lang-js -->
из фрагмента, фактически отключив JavaScript.u=>{document.write`<img src=${u} id=i><canvas id=e>`;c=e.getContext`2d`;i.onload=_=>{w=e.width=i.width;h=e.height=i.height;c.drawImage(i,0,0);d=c.getImageData(0,0,w,h).data;for(o={},i=0;i<d.length;i+=4)++o[s='#'+`00000${(d[i]<<16|d[i+1]<<8|d[i+2]).toString(16)} `.slice(-7)]?0:o[s]=1;Object.keys(o).sort((a,b)=>o[b]-o[a]).map(c=>console.log(c+o[c]))}}
Pyth , 29 байт
Попробуйте онлайн!
(Онлайн-переводчик не может прочитать изображение, поэтому я удалил эту часть и ввел результат чтения этого изображения, представляющий собой список цветовых триплетов. Часть, ответственная за чтение изображения, -
'
это одна двоеточие.)Подтверждение функциональности
'
одного двоеточияисточник
s
до'Q
, так как изображение представляется в виде списка списков триплетов.V_SrS%L+\#*3"%02X"s'z8jd_N
Mathematica
10392 байтапример
объяснение
DominantColors
обычно возвращает список цветов и счетчиков, представляющих основные кластеры в изображении. Когда количество запрошенных цветов превышает количество цветов в изображении, возвращаются точные цвета пикселей. (Я предполагаю, что во входном изображении будет менее 10 000 цветов.){"#"<>IntegerString[255Round[List@@#],16,2],#2}
преобразует базовые 10 значений цвета в шестнадцатеричные значения.Примечание: в изображении мандрил есть только 5 цветов. (Я использовал,
ColorQuantize[<image>,5]
чтобы уменьшить количество цветов в стандартном изображении мандрил.)источник
PowerShell v2 +, 187 байт
Повторно использует почти весь код из моего ответа на Получить наиболее доминирующий цвет . Поэтому, пожалуйста, обратитесь к этому для полного объяснения.
Изменения здесь в индексации
$b
в третьей строке , чтобы соответствовать требованиям в явном виде выходного формата, а в последней строке мыsort
наvalue
в-des
cending порядка, а затем трубыFormat-Table
с-H
ideTableHeaders и-A
utoSize в качестве параметров. Здесь очень редко используетсяFT
на PPCG, поскольку вывод неявен в конце выполнения, но здесь очень полезно убедиться, что мы получаем только правильный вывод частей.Примеры
Первое - это «красное» тестовое изображение из испытания «Доминантный цвет», второе - «свидетельство» из этого испытания.
источник
Tcl / Tk , 134 байта
d
дляdata
.Tcl / Tk , 232 байта
wish sort_pix.tcl QTE4O.png
wish sort_pix.tcl 5s1Ob.png
wish sort_pix.tcl z07VA.gif
источник
Brain-Flak , 1110 байт
Попробуйте онлайн!
Ну это было приключение. Оказывается, Brain-Flak не очень хорош в обработке изображений. Кто знал?
Начну с того, что технически это не соответствует строгому формату вывода. Если вы хотите, чтобы это осуществлялось, дайте мне знать, и я постараюсь добавить код перевода. Сейчас он выводит десятичные числа: каждые 4 числа представляют цвет в порядке КРАСНЫЙ ЗЕЛЕНЫЙ СИНИЙ СЧЕТ.
Далее, вход. Разрешенные форматы ввода были более гибкими, поэтому я использовал самый простой для анализа Brain-Flak формат (который я смог найти): Netpbm P6. К сожалению, Brain-Flak не смог разобрать десятичные числа из формата P3, потому что все образы Netpbm начинаются с символа, требуемого стандартом, поэтому входные данные являются действительными файлами Netpbm.
P
а Brain-Flak не может обрабатывать десятичный ввод из файлов, содержащих нечисловые символы. Поэтому вместо него использовался P6, потому что P6 хранит информацию о цвете в виде байтов, которые обрабатываются как числа в режиме ввода ASCII. Осталась проблема, потому что информация заголовка не была зашифрована с пользой, но, к счастью, эта информация мне не понадобилась, поэтому ее просто отбрасывают. Эта программа не полностью соответствует стандарту Netpbm, потому что она не позволяет переводить строки в заголовок, но переводы строк не являютсяПоследнее предостережение: версия на TIO на самом деле неправильно настроена для «официальной» работы, потому что (насколько мне известно) я не могу предоставить файлы в качестве входных данных на TIO, а также не могу предоставить байты, соответствующие непечатаемой ASCII, в прямом вводе. Для официальной работы
-a
флаг необходим для ввода данных в виде необработанных байтов и-f
для ввода данных из файла. Пример ввода по ссылке TIO вместо этого был вручную переведен из примера на вики-странице Netpbm .Кроме того, я хотел бы поблагодарить вики Brain-Flak за предоставление полезных фрагментов кода для работы. В частности, реализация Bubble-Sort здесь сыграла важную роль на последнем этапе, когда я получил счетчик для каждого цвета, так как на самом деле не имел ни малейшего представления, с чего начать иначе. Потребовалась тяжелая модификация, но я рад, что мне не пришлось начинать с нуля.
Вот версия кода без комментариев и комментариев. Brain-Flak слишком многословен, чтобы включать в этот пост полезное отформатированное объяснение, но в нем нет версии для TIO, в которой есть все, что я включил бы в одну, с лучшим форматированием, чем я мог бы здесь управлять, поэтому, если вы заинтересованы, пожалуйста, возьмите смотреть.
Возможно, еще предстоит заняться игрой в гольф, мой предыдущий ответ на «Brain-Flak» прошел через множество пересмотров, но, надеюсь, извлеченные уроки дали этому лучшую отправную точку.
источник
Python 2, 186 байт
Попробуйте онлайн!
Отказ от ответственности: Представленные результаты являются однострочными для удобочитаемости. Выводы кода приводят к пробелу и разделению строк в соответствии с запросом.
Выход для 10red 20blue 30black 40white:
Выход для синего градиента:
Выход для тестового изображения
Объяснение:
источник
Java (1.4+) ,
483428 байтПопробуйте онлайн!(Не работает онлайн)Ungolfed:
toString()
Карты выдает так:Пожалуйста, не публикуйте 1.8 конкретных предложений по игре в гольф, если только это не работает в более старой Java, я не хочу.
Пример: лямбды не работают в большем количестве версий Java, чем в.
источник
import java.util.*;class M{public static void main(String[]a)throws Exception{java.awt.image.BufferedImage i=javax.imageio.ImageIO.read(new java.io.File(a[0]));Map m=new HashMap();String s;for(Integer x=0,y=0,c;y<i.getHeight();y++)for(x=0;x<i.getWidth();m.put(s=x.toHexString((c&0xff0000)>>16)+x.toHexString((c&0xff00)>>8)+x.toHexString(c&0xff),m.get(s)==null?1:(int)m.get(s)+1))c=i.getRGB(x++,y);System.out.print(m);}}
( 419 байт )x.toHexInteger
был умнее статического импорта.SmileBASIC, 165 байт
Изображение задается в виде массива 32-битных значений цвета ARGB (альфа-значение обрезается, когда число преобразуется в шестизначную шестнадцатеричную строку)
источник