Разные системы по-разному описывают цвета, даже если все они говорят в пространстве RGBA. Разработчик внешнего интерфейса, знакомый с CSS, может предпочесть #RRGGBBAA
. Но разработчики Android могут предпочесть #AARRGGBB
. При обработке формата файла AAS, #AABBGGRR
необходимо. Это слишком запутанно. Может быть, нам нужна программа, которая может конвертировать различные цветовые форматы.
Входные данные:
Вход содержит 3 части:
- Цвет, который нужно преобразовать (например
#1459AC0F
), строка, начинающаяся с острого знака,#
за которым следуют 8 шестнадцатеричных цифр. - Формат данного цвета (например
#RRGGBBAA
), строка, начинающаяся с#
8 букв, которые попадают в 4 разные группы, и каждая группа является одной изRR
/GG
/BB
/AA
. - Формат для преобразования в.
Выход:
- Выведите цвет в преобразованном формате
Тестовые случаи:
Color, OriginalFormat, TargetFormat -> Result
#12345678, #RRGGBBAA, #AARRGGBB -> #78123456
#1A2B3C4D, #RRGGBBAA, #AABBGGRR -> #4D3C2B1A
#DEADBEEF, #AARRGGBB, #GGBBAARR -> #BEEFDEAD
Ввод / вывод нечувствителен к регистру. Вы можете вводить / выводить любым приемлемым способом.
Правила:
Это код гольф, самые короткие (в байтах) коды каждого языка выигрыша
AARRGGBB
объективно лучший цветовой формат. Если что-то ожидает 24-битное значение,RRGGBB
а выAARRGGBB
вместо этого задаете 32-битное , оно может просто игнорировать старший байт и все равно работать.Ответы:
APL (Dyalog Unicode) , 6 байтов SBCS
Полная программа. Запрашивает STDIN для Оригинал, затем Цель, затем Цвет. Результат печати в STDOUT.
Попробуйте онлайн!
⍞
запросить оригинал⍞⍋
запросить Target и найти индексы в оригинале, которые сделают оригинал в Target⍞[
…]
Запросите Color и используйте полученные выше индексы для изменения порядка Colorисточник
JavaScript (ES6),
5352 байтаСохранено 1 байт благодаря @tsh
Принимает входной сигнал в виде 3 -х различных параметров:
(Color, From, To)
.Попробуйте онлайн!
источник
(C,F,T)=>T.replace(/\w/g,(x,i)=>C[F.search(x)-~i%2])
сохранить один байтStax , 8 байт
Запустите и отладьте его
Эта программа принимает данные в этом формате.
Вот прокомментированная распакованная версия той же программы.
Запустите этот
источник
Python 2 , 59 байт
Попробуйте онлайн!
источник
Сетчатка 0.8.2 , 33 байта
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Объяснение:
Для каждой пары идентичных символов найдите другую копию этой пары, а затем 9-й и 8-й символы до этого и замените пару этими символами. Это возможно только для пар символов в целевом формате и заменяет их желаемым результатом.
Удалите цвет и исходный формат.
источник
Haskell ,
108 104 100 9487 байтПопробуйте онлайн!
Старая версия
Спасибо Лайкони за сокращение 6 байт и поиск более короткого способа использования
lookup
!Попробуйте онлайн!
Объяснение:
p
функция «разбирает» строка, игнорируя ведущие#
и возвращающиеся группы (списки) 2 символов.(!)
оператор принимает в качестве входных данных цвета и формат ввода и возвращает функцию , которая принимает в качестве параметра выходного формата и возвращает преобразованный цвет. Оказалось, что точечная версия была короче, но я начал с более читаемой версии:f c i o='#':concat[x#zip(p<$>[i,c])|x<-p o]
Попробуйте онлайн!
источник
Perl 5
-p
,333227 байтВведите данные в порядке: цель, оригинал, номер
Попробуйте онлайн!
Для каждого символа на входе найдите один и тот же символ на четное число мест вперед, затем оттуда на 10 символов вперед и возьмите этот символ в качестве замены. Если вы не можете выполнить эти шаги, замените их ничем.
источник
05AB1E , 10 байтов
Попробуйте онлайн!
Это работает, потому что я изменяю ввод с:
Для того, чтобы:
Таким образом, каждое значение отображается однозначно, тогда я могу использовать транслитерацию.
Аргументы поменялись местами.
источник
Java 10,
179105102 байтаКолоссальные -77 байт благодаря @ OlivierGrégoire .
Объяснение:
Попробуйте онлайн.
источник
J 5 байт
Левый аргумент - это цвет. Правый аргумент - это символьная матрица, где первая строка - это целевой формат, а вторая строка - оригинальный формат. Попробуйте онлайн!
источник
CJam, 14 байтов
Попробуйте онлайн!
Ввод - это массив в обратном порядке.
источник
Python 2, 62 байта
источник
SmileBASIC, 144 байта
источник
Красный ,
154 120114 байтПопробуйте онлайн!
источник
Python 3 , 102 байта
Попробуйте онлайн!
источник
Желе , 6 байт
Попробуйте онлайн!
Полная программа.
Аргумент 1: оригинальный
аргумент 2: целевой
аргумент 3: цвет
источник
C (лязг) , 89 байт
Попробуйте онлайн!
Принимает входное значение в
a
, в формате вi
и в формате вo
. Возвращает значение вb
Незначительный чит: сохранение результата
b
вместо печати для сохранения байтов. Вопрос не запрещает это.C (лязг) , 100 байт
Попробуйте онлайн!
C (gcc) , 181 байт
Попробуйте онлайн!
СоздаетRGBA
значение вc[]
массиве на основе форматаi
, затем печатает вo
форматеисточник
char*a,b[10],*i,*o;f(x)
вместоchar *a,b[10],*i,*o;f(x,y)
иx+=2)bcopy(a+(long)index(i,o[x])-i,b+x,2);
вместоb[x++]=a[y=index(i,o[x])-i],b[x++]=a[y+1]);
Clojure 1,8, 156 байт
Ungolfed
Попробуйте онлайн не имеет поддержки Clojure 1.8. Очень странный!
источник
Perl 6 ,
555146 байтПопробуйте онлайн!
Принимает (цветной, оригинальный, целевой) список в качестве входных данных. Разбивает каждую входную строку на компоненты, создает исходные ключи Hash, сопоставляющие значения цвета, ищет значения цвета в целевом порядке ключей, а затем форматирует результат.
источник