Соревнование
С учетом двух заглавных шестнадцатеричные строки (длинные оба 6 символов, XXXXXX и YYYYYY) , представляющий значения RGB ( в диапазоне от 000000
до FFFFFF
включительно), а положительный ненулевой число N, отображать линейный переход из N + 2 цветов , полученных от XXXXXX до YYYYYY это привело бы к цветовому градиенту.
пример
вход
FF3762
F08800
9
Выход
Обратите внимание, что в нашем примере я запросил 9 промежуточных шагов между двумя цветами, поэтому 11 строк будут отображаться от начального цвета до конечного цвета
FF3762
FD3F58
FC474E
FA4F44
F9573A
F75F31
F66727
F46F1D
F37713
F17F09
F08800
Предостережения
Несмотря на то, что я прошел простой линейный процесс получения целочисленных значений для промежуточных цветов перед их преобразованием обратно в шестнадцатеричное, ваши методы могут отличаться. Пожалуйста, подумайте о том, как можно округлить ваши цифры соответственно.
тестирование
Чтобы сделать это интересным, я предоставил фрагмент, позволяющий тестировать ваш код, включая кнопку, чтобы предоставить вам два случайных цвета для проверки вашего кода. Отображать результаты не обязательно, но это приветствуется!
c1=()=>('00000'+(Math.random()*(1<<24)|0).toString(16)).slice(-6);
$("#col").click(function(){
alert("Your two colors are: "+c1()+" and "+c1()+".");
});
$("#colors").blur(function(){
$("#test").empty();
var colArr = $("#colors").val().split("\n");
for(c in colArr){
$("#test").append('<div class="tester" style="background-color:#'+colArr[c]+';">'+colArr[c]+'</div>')
}
});
.tester{height: 20px;
width: 60px;padding: 4px;border: 1px solid black;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="col">Your two colors</button><br />
<textarea id="colors"></textarea>
<div id="test">
</div>
1) Вы можете получить доступ к двум случайным цветам для теста, нажав на кнопку «Ваши два цвета». 2) Количество промежуточных шагов будет таким же, как количество символов в вашем имени пользователя PPCG, включая пробелы, в случае «WallyWest» это будет 9 (как в моем примере выше). 3) Запустите ваш код с двумя цветами и числом, и после того, как у вас будет сгенерированный список, у вас есть возможность вставить свой вывод в текстовую область и убрать с него вкладки, чтобы получить сгенерированный градиент цвета.
Мой пример показан здесь:
Я должен признать, это выглядит довольно круто!
Обратите внимание: как я уже говорил, показывать результаты тестирования с использованием фрагмента необязательно, но это рекомендуется! :)
Выход
Вывод списка должен быть в форме N + 2 наборов 6-значных шестнадцатеричных чисел, разделенных переводом строки (\ n), как показано в моем примере выше. Вывод может быть в виде отдельных строк, списка, разделенного пробелами / запятыми, массива или чего-либо, что лучше всего подходит для вашего языка ... (Спасибо @nimi за заголовок) Пожалуйста, помните, что если вы планируете тестировать свой код с фрагмент, однако вы отделяете каждый «цвет» зависит от вас.
правила
Это код-гольф, поэтому самое короткое решение в байтах будет признано победителем. Никаких лазеек , естественно. Входные данные должны принимать две строки и число (которое, как я уже сказал, будет эквивалентно количеству букв в вашем имени пользователя на PPCG, таким образом, ваш результирующий вывод всегда будет иметь длину не менее трех строк).
Ответы:
MATL , 31 байт
При этом используется линейная интерполяция с округлением вниз. Формат ввода
Попробуйте онлайн!
Графический вывод, 31 байт
Это результат для входов
Попробуйте это в MATL Online ! Переводчик в настоящее время экспериментальный. Если вы ничего не получили, обновите страницу и снова нажмите «Выполнить».
источник
JavaScript (ES6), 130 байт
источник
Dyalog APL , 44 байта
Запрашивает N , затем B eginning-color, затем E- end-color. Требуется
⎕IO←0
по умолчанию во многих системах.h[
...]
индекс в h (который имеет значение, когда мы заканчиваем оценку содержимого скобки)N←⎕
запрос на номер N (4)1+
добавить один к N (5)(
...)÷
используйте это, чтобы разделить результат ...⍞⍞
подсказка для двухсимвольных строк ["7E0E7E", "FF3762"](
...)∘⍳¨
найти индексы символов каждой строки в ...⎕D,⎕A
D igits следует A lphabeth←
назначен на чтеперь у нас есть "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
E B←
назначить индексы E и B [[7,14,0,14,7,14], [15,15,3,7,6,2]]-/
вычесть и заключить B из E [[-8, -1, -3,7,1,12]]результат пока [[-1.6, -0.2, -0.6,1.4,0.2,2.4]]
(
...)×
умножить это на ...2+N
два плюс N (6)⍳
первые целые числа [0,1,2,3,4,5]это дает нам [[0,0,0,0,0,0], [- 1,6, -0,2, -0,6,1,4,0,2,2,4], [- 3,2, -0,4, -1,2,2,8,0,4,4,8 ], ...]
B∘+¨
добавить B к каждому [[15,15,3,7,6,2], [13.4,14.8,2.4,8.4,6.2,4.4], [11,8,14,6,1,8,9,8,6,4,6,8], ... ]⌊
округлить [[15,15,3,7,6,2], [13,14,2,8,6,4], [11,14,1,9,6,6], ...]↑
составить список списков в таблицуздесь мы индексируем в ч , давая
который так же, как
и печатает как
Попробуй APL онлайн!
источник
Pyth - 35 байт
Ужасно играл в гольф, просто сдался.
Попробуйте это онлайн здесь .
Пример:
источник
7cb472 93fb8a 8
и получить только 10 строк вывода при тестировании вашего кода?93fb8a
... Ваш код вывел две строки одного и того же значения?PowerShell v2 +,
176159150 байтПринимает входные данные в виде двух строк и числа, а затем преобразует начальную строку в массив строк, разделенных на каждые два символа, и сохраняет их в
$x
. Затем мы выводим в$a
качестве нашего начального раздела и выполняем цикл от++$n
до1
(для обеспечения правильного размещения ограждения).Каждая итерация устанавливает значение помощника
$j
для текущего номера (используется позже, чтобы убедиться, что мы получили правильное количество шагов между тем, где мы находимся в данный момент, к нашему месту назначения) и вычисляет следующий шаг на основе цикла$x
.Каждый внутренний цикл - это просто назначение. Мы устанавливаем
$x
в соответствующем месте, равном новой строке,"{0:x2}"
используя-f
оператор ormat.x2
Здесь задает вывод шестнадцатеричного двузначного, а вход правой стороны-f
оператора. PowerShell имеет встроенный шестнадцатеричный-десятичный оператор0x
, так что это длинное вложенное в паренсы выражение использует этот оператор для преобразования текущего шестнадцатеричного числа в числа, вычитая, чтобы найти разницу, которая еще предстоит сделать (это делается путем динамического разделения$b
здесь, как мы это делали$a
, и используя модуль по модулю, чтобы выбрать правильный элемент), деление на$j
оставшиеся шаги, приведение к[int]
(PowerShell выполняет банковское округление по умолчанию) и вычитает этот шаг из текущего гекса, чтобы получить то, каким должен быть наш следующий гекс.Результат этого вычисления сохраняется в
$x
виде трех шестнадцатеричных элементов. Это заключено в скобки для создания копии в конвейере и-join
объединено в одну строку. Все эти результирующие строки остаются в конвейере, и вывод через неявныйWrite-Output
происходит при выполнении программы.пример
Мне дали 0ba7c5 и 6c0e50 для моих двух цветов, и в TimmyD есть 6 символов.
источник
Python 2, 189 байт
источник
[Groovy] Окончательное обновление (199 байт) - согласно запросу
Non-гольф
Гольф
Попробуйте финальный здесь: https://groovyconsole.appspot.com/script/5130696796405760
СТАРЫЕ ВЕРСИИ НИЖЕ, ОТКЛОНЕННЫЕ ОП
Groovy (123 байта)
Гольф
Non-гольф
входные
Пример вывода
результаты в
Попробуйте сами: https://groovyconsole.appspot.com/script/5184465357766656
С включенными шестнадцатеричными преобразованиями
Думаю, я тоже обманываю ... Вот сценарий с использованием hex:
Новый код с шестнадцатеричными преобразованиями:
188 символов при игре в гольф:
Вывод от 000000 до FFFFFF и 16 (длина имени пользователя)
источник
{s-> s.split("(?<=\\G.{2})").collect{Integer.parseInt(it,16)}}('FFFFFF')
Результаты в [255,255,255] Я могу добавить 62 байта в мой код, используя это преобразование, если вы действительно этого хотите.R, 68 байт
Есть встроенная функция, которая интерполирует два цвета:
Входные данные:
Вывод: вектор со значениями
Спецификация цвета в R требует хеш-символа.
Давайте построим что-то вроде функции:
источник
FF3762 F08800 15
?C
175169168 байтUngolfed:
Спасибо @ h-walters за то, что сбрили 5 байтов!
источник
puts
делает синтаксис снова?printf()
, но не делает никакого форматирования, вместо этого он просто печатает заданную строку как есть, и добавляет новую строку.puts("")
в третью часть первого цикла for (;
после становления,
перед) ... +0 байт. Однако это позволяет удалить фигурные скобки после второго цикла ... -2 байта. Вы можете сохранить еще 1 байт, удалив 3 изj<3
, и заменив его своимprintf
оператором (это подлый ... printf вернет только 2, но все равно придется оценивать в третий раз).0
вj=0
. После того как все будет готово, ваша программа должна быть на 5 байт короче и не менее чем на 50% чужой.sh + ImageMagick, 81 байт
использование:
(«-depth 8» не требуется, если ваш IM скомпилирован с 8bpp по умолчанию)
источник