Будучи большим поклонником кубика Рубика и крутого искусства, я работал над тем, чтобы объединить их вместе, чтобы сделать действительно классные вещи. В основном решение миниатюрных кубиков Рубика для формирования элементарных пикселей в формировании кубического искусства Рубика. Примеры такого искусства можно увидеть по этой ссылке: http://google.com/search?q=rubik%27s+cube+art
Теперь целью этого Code Golf является создание кода, который принимает изображение в качестве входных данных, а затем преобразует его следующим образом:
Изображение изначально уменьшается до веб-безопасных оттенков серого. Причина этого заключается в том, что нам необходимо изолировать палитру градаций серого в сети (т. Е. 000000, 333333, 666666, 999999, CCCCCC и FFFFFF). Алгоритм колориметрического метода преобразования в оттенки серого доступен по адресу: http://en.wikipedia.org/wiki/Grayscale#Colorimetric_.28luminance-preserving.29_conversion_to_grayscale , если вы хотите использовать его в качестве источника вдохновения.
Затем можно отобразить оттенки серого до соответствующих цветов. Чтобы быстро его разбить: 000000 будет означать синий цвет Рубика, 333333 будет означать красный цвет Рубика, 666666 будет означать зеленый цвет Рубика, 999999 будет означать оранжевый цвет Рубика, CCCCCC будет означать желтый цвет Рубика, а FFFFFF будет означать белый цвет Рубика.
Я бы предпочел, чтобы ваш полученный код мог отображаться из палитры фотографии прямо в цвета Рубика. Двухэтапный метод от преобразования в веб-безопасную градацию серого и затем к соответствующей палитре Рубика состоит в том, чтобы просто дать вам представление о логике процесса, но если вам легче это сделать, то обязательно сделайте это.
Фактические значения RGB для палитры Рубика должны соответствовать следующему:
- Красный: # C41E3A
- Зеленый: # 009E60
- Синий: # 0051BA
- Оранжевый: # FF5800
- Желтый: # FFD500
- Белый: #FFFFFF
Чтобы дать вам пример, я обрезал голову Авраама Линкольна из следующей картинки: и отредактировал алгоритм для получения следующего:
Сетка предназначена для того, чтобы вы могли видеть, как каждый отдельный миниатюрный кубик Рубика должен быть сконфигурирован для формирования изображения. Истинный размер получившегося изображения составляет 45 на 45 пикселей, что означает (45/3) * (45/3) = 15 * 15 = 225 миниатюрных кубиков Рубика, которые будут использованы для создания этого изображения. Я не ожидаю, что вы представите полученное изображение с сеткой, как у меня.
Итак, вот что требуется:
Изображение, обрабатываемое этим алгоритмом, должно иметь ширину x пикселей и высоту y пикселей, чтобы x и y были кратны 3. Это облегчает рендеринг как часть мозаики кубика Рубика. Если ваше изображение достаточно велико, рекомендуется уменьшить его до размеров от 45 x 45 до 75 x 75 или около этого в размерах до обработки. Имейте в виду, этот компонент изменения размера является необязательным.
Чтобы создать мозаику, изображение необходимо преобразовать в палитру кубиков Рубика с секс-цветами.
Полученное изображение должно быть действительным графическим файлом после обработки. Чтобы доказать, что ваш код работает, запустите его с изображением одного из президентов Соединенных Штатов Америки или известной голливудской знаменитости. Я уже использовал Авраама Линкольна в своем примере, поэтому этого президента больше нельзя использовать. Убедитесь, что вы указали язык, который вы использовали, количество байтов, а также президент / знаменитость, использовавшиеся для тестирования вашего кода, в том числе до и после снимков ...
У каждой записи должен быть уникальный президент / знаменитость в качестве тестового примера. Я не буду принимать дубликаты. Это гарантирует, что повторяющиеся результаты не будут использоваться для проверки различных записей кода. Хорошо, что ваш код работает, это еще одна вещь, чтобы доказать это.
5. Самый короткий код выигрывает.
Я изменяю это на конкурс популярности ... Я бы лучше посмотрел, кто может сделать это, не участвуя в соревнованиях по количеству байтов ... Так что я награжу это вместе с наградой после 28 февраля 2014 года.
источник
#000000 => #0051BA
, и т. Д.Ответы:
Имиджмагик (108)
Версия: ImageMagick 6.8.7-7 Q16 x86_64 2013-11-27
Следующий звонок:
где
input
иoutput
должны быть изменены для имени файла ввода и вывода.Я только посчитал символы между
-resize
и#FFF"
, если вы думаете, что это неверно, не стесняйтесь комментировать.Я использовал Ленну как образ (она появилась в «Плейбое», и любой, кто делает это, должен считаться голливудской знаменитостью, верно?)
Входные данные:
Выход:
Выход увеличен:
Примечания: в соответствии с документами imagemagick вы не можете иметь более одного условного оператора в выражении, но вызов все равно работает нормально, так что, вероятно, это было исправлено, а документы просто не обновлялись.
Выполнить идентификацию на результирующем изображении (чтобы показать цвета действительно хорошо):
Если вы думаете, что Ленна не считается настоящей знаменитостью, вот Брюс Уиллис:
источник
fx
детали могут быть сжаты еще больше на языке, который имеет лучшую выразительность. И эти языки также имеют встроенную поддержку изображений (поэтому символы не теряются при импорте imagemagick / gd / и т.д.)Mathematica
Мы будем работать с квадратным регионом из американской марки с изображением Греты Гарбо. Это будет упоминаться как
j
.Функция f принимает 3 параметра:
i
что относится к изображениюrs
размер растраm
, булева переменная, которая указывает, должны ли использоваться линии сетки. (По умолчанию установлено значение True).Используя растровые размеры 15, 30, 45 и 75:
Я не могу представить, чтобы кто-нибудь делал кубик Рубрика с таким количеством кусков! Интересное занятие тем не менее.
Играя с цветами
Это из более ранней записи. Код немного отличается.
Graphics
используется вместоArrayPlot
. Кроме того, мы используем полную печать, даже если она не квадратная.Есть 6! = 720 перестановок цветов кубика Рубрика.
Далее отображается центральное изображение верхнего ряда (установите 6 изображений ниже). Когда значения градаций серого располагаются от самых темных к самым светлым, цвета являются {r, gr, b, o, y, w}. Другие варианты, тем не менее, работают.
i
исходное изображение в оттенках серого.i
оригинальное изображение в градациях серого полной марки Греты Гарбо.Rasterize[garbo,RasterSize->75
растеризует изображение в массив 75 на 75.ColorQuantize[<>, 6]
уменьшает значения градаций серого до набора 6.ImageData
извлекает массив данных из изображения; это приходит с ног на голову.Reverse
переворачивает массив данных, отсюда и картинку, правой стороной вверх.garboColors
6 значений оттенков серого в квантованном изображении.Graphics[Raster
отображает окончательное изображение.rubrikColors
являются значениями RGB 6 цветов кубика Рубрика.Даны различные цветовые сочетания красного, зеленого, синего, оранжевого, желтого и белого цветов.
И код:
Garbos Galore
Вот 72 (из 720) изображений Греты Гарбо, которые используют 6 цветов кубика Рубрика. Некоторые изображения работают лучше, чем другие, не правда ли?
источник
Reverse
можно было бы убрать, оставив картинку с ног на голову, но я не вижу других возможностей. Mathematica выразительна, но использует громкие слова. Кто-то, имеющий большой опыт в области изображений, возможно, немного уменьшит размер кода, но я сомневаюсь, что они могут превзойти ваш код в ImageMagick.i
удерживайте исходное изображение.gr
обозначает зеленый Рубрика.g
относится к растеризованным и квантованным данным изображения для изображения в градациях серого.Smalltalk (Smalltalk / X),
289139 *вход: я; вывод: r
вход:
выход:
расширен:
(для всех молодых людей: это НЕ Мадонна ;-)
[*] Я не учел увеличение до 75x75 (первая строка) - мог бы использовать уже измененный размер в качестве входных данных. Надеюсь, что с тобой все в порядке.
источник
Постскриптум и ИСТИННЫЕ цвета Рубика! ;-)
Что ж, это решение здесь немного не по теме, так как оно ограничено до некоторой степени узкой специализацией. Но после большого разочарования, например, из-за «вопроса о странных числах» (неспособности произвести что-то практически работающее), я решил что-то опубликовать, поэтому вытащил это из своей стопки полуфабрикатов и сделал это презентабельным.
Решение использует тот факт, что 1-я редакция этого вопроса определяет требуемые цвета по ссылке на сайт, в которой четко указано, что должны использоваться цвета Pantone (R), а цвета RGB являются только приблизительными. Тогда я подумал, зачем мне приближения, когда я могу сделать настоящий цвет? - :)
Этот код должен быть сохранен как, например,
rubik.ps
а затем передан в Ghostscript с обычным заклинанием:Затем он ждет вас на следующей строке для ввода имени файла JPG, например
и, если все пойдет хорошо, сохраняет результаты в
out.psd
файл.Входной сигнал должен быть квадратным RGB JPEG (любого размера), выходной - PSD с каналами плашечного цвета. Вам понадобится Photoshop для просмотра файла. Изменение устройства GS с
psdcmyk
чего-либо еще не даст ничего полезного. JPEG в качестве входных данных - потому что интерпретатор postscript может декодировать поток данных непосредственно из него. Квадратная форма - потому что программа используетsqrt
длину строки, чтобы найти ширину (и высоту) изображения.Первые строки определяют размер выходного изображения (можно изменить по умолчанию 75) и цветовую палитру (можно изменить цвета и их количество). Все остальное не является жестко закодированным, я думаю.
В чем дело? Поток RGB-триплетов на лету преобразуется в строку значений градаций серого (с простой формулой), обычный словарь 8-битных контоновых изображений построен и используется для рисования 5 одинаковых изображений друг над другом в 5
Separation
цветовых пространствах. Хитрость заключается в применении передаточных функций перед каждым вызовомimage
оператора. Например, для желтой краски эта функция возвращает 0 для входных значений только в диапазоне 0,167 ... 0,333 и 1 в противном случае.Входные данные:
Снимок экрана с выходом 75x75, открытым в Photoshop, увеличен на 800%:
И палитра каналов Photoshop:
источник
C #
Вам нужно запустить его с 3 параметрами:
foo.exe 75 d:\test.jpg d:\out.png
Где
75
макс. width / height,d:\test.jpg
является входным файлом иd:\out.png
является выходным файлом.Вывод для различных изображений в этом конкурсе:
Моя собственная знаменитость:
Выход:
Тем не менее, другие (больше, чем 75x75) размеры дают лучшие изображения:
И, если мы будем придерживаться президентов:
Так как это уже не кодогольф, я не стал слишком сильно «минимизировать» код. Кроме того, поскольку в инструкциях конкретно не упоминалось, что изображение должно быть той же ширины, что и высота (квадрат), я не стал беспокоиться об обрезке; Я делать , однако, убедитесь , что изображение является кратным 3 пикселя ширина / высота. Если вы хотите квадратные изображения, используйте квадратные входы Наконец; алгоритм далеко не оптимален.
Еще несколько (так как люди больше поддерживают горячих цыпочек / интернет-героев )
источник
Brainfuck
Это требует интерпретатора / компилятора BF, который имеет -1 как EOF и имеет более чем 8-битные ячейки, ЕСЛИ один из красных пикселей равен 255. В противном случае он остановится преждевременно, поскольку он не сможет различаться между EOF и значением 0xFF , С jitbf у вас есть все, что машина имеет целочисленный размер, и вы можете сделать это, чтобы принудительно установить -1 как EOF:
Представленный формат файла изображения - это полный файл RGB PNM (P6), необработанный как опция в Gimp.
Он использует только зеленый канал (это один из многих способов преобразования цветного изображения в оттенки серого). Это уменьшает значение на 43 без уменьшения значения ниже нуля, чтобы выяснить, какой цвет рубика использовать, и имеет переключатель, который выводит правильный цвет RBG, который соответствует.
Изображение Анджелины Джоли из Hackers (1995) уменьшено до 75x75 и обработано с помощью приложения:
То же самое, только я использовал оригинальный размер :
И так как я экстрасенс, вот и президент:
источник
Objective-C
Я видел этот вызов прошлой ночью, и у меня было немного запутанное время
-[NSArray indexOfObject:inSortedRange:options:usingComparator:]
, отсюда и задержка.Я запустил его на своем iPad так:
До после
До после
источник
питон
Формат:
python rubik.py <input> <max_cubes> <output>
.Покрывает пиксель в градациях серого, используя предложенный алгоритм.
Входные данные:
(источник: ilmamilio.it )
Вывод с
max_cubes = 25
:Вывод с
max_cubes = 75
:Вывод с
max_cubes = 225
:источник