В свое время все 1337 детей использовали текстовые фейдеры в чатах. Я не знаю о вас, ребята, но я хочу чувствовать себя круто, как они. Единственная проблема заключается в том, что их старые скрипты и приложения были тесно связаны с программным обеспечением, для которого они были созданы, поэтому я не могу просто использовать эту удивительную функциональность там, где я хочу. Я также хочу, чтобы решение было легко переносимым, поэтому вам нужно сделать код как можно меньшего размера, чтобы он поместился на моей дискете (я бы предпочел нести только одну дискету, но если ваш исходный код слишком велик) Я могу нести больше одного : P ).
вход
- Список цветов (rgb, hex, имена и т. Д.)
- Текст для форматирования
Ваша программа должна ожидать, что список цветов будет содержать как минимум 2 цвета.
Текст для форматирования может быть любой длины больше нуля, и символы будут ограничены для печати ascii. (Совет: при более длинном вводе текста может потребоваться повторное использование промежуточных цветов для последовательных символов)
Выход
Выходной текст не должен отличаться от входного текста ни в коем случае, кроме шрифта и / или разметки / стиля (Примечание: если ваш вывод содержит html-разметку, вам потребуется html-кодирование ввода). Вы можете выводить текст с разметкой / стилями (теги стиля html, цвета консоли и т. Д.) Или изображением блеклого текста. Все цветные гексы должны присутствовать в выходных данных, если входные данные не содержат достаточно символов для удовлетворения этого требования. Если это так, то обратитесь к правилам приоритета, чтобы определить, какие цветные гексы должны присутствовать в ваших выходных данных. Порядок или эти цвета в вашем выводе все еще должны быть порядком ввода.
Правила приоритета цвета
- В случае, если введен один символ, будет использован первый цвет
- В случае, если есть только два символа, будет использован первый и последний цвет
- В случае, если имеется более трех цветов и больше цветов, чем символов, первый и последний цвета должны иметь приоритет, а затем остальные цвета в порядке их ввода.
- Если символов больше, чем цветов, символы должны переходить от одного цвета к другому, используя промежуточные цвета
Примеры (правила приоритета 1-3 соответственно):
# Цвета | Цвет 0 | ... | Цвет п | Текст
3 ff0000 0000ff ffff00 M
-> -> ->
3 ff0000 0000ff ffff00 hi
4 ff0000 0000ff ffff00 0fff00 sup
Чтобы быть понятным, цвет текста должен исчезнуть из одного цветового гексагона в другой. Исчезновение не обязательно должно быть абсолютно равномерным, но оно не должно быть резким изменением цвета, если не хватает символов, чтобы красиво исчезнуть. Обычно это затухание достигается путем выбора промежуточных цветов для каждого из символов путем увеличения / уменьшения значений rgb на некоторый интервал, определяемый количеством символов, с которым вы должны работать, и разницей между цветами. Например, если нам нужен один цвет между (# ff0000) и (# 000000), мы можем выбрать, как он расположен прямо посередине. Оптимальный результат будет выглядеть довольно красиво.
Пример (правило приоритета 4):
3 ff0000 ff7f00 f0ff00 To be or not to be, that is the question...
->
-OR-
<span style="color:#ff0000;">T</span><span style="color:#ff0600;">o</span><span style="color:#ff0c00;"> </span><span style="color:#ff1200;">b</span><span style="color:#ff1800;">e</span><span style="color:#ff1e00;"> </span><span style="color:#ff2400;">o</span><span style="color:#ff2a00;">r</span><span style="color:#ff3000;"> </span><span style="color:#ff3600;">n</span><span style="color:#ff3c00;">o</span><span style="color:#ff4300;">t</span><span style="color:#ff4900;"> </span><span style="color:#ff4f00;">t</span><span style="color:#ff5500;">o</span><span style="color:#ff5b00;"> </span><span style="color:#ff6100;">b</span><span style="color:#ff6700;">e</span><span style="color:#ff6d00;">,</span><span style="color:#ff7300;"> </span><span style="color:#ff7900;">t</span><span style="color:#ff7f00;">h</span><span style="color:#fe8500;">a</span><span style="color:#fe8b00;">t</span><span style="color:#fd9100;"> </span><span style="color:#fc9700;">i</span><span style="color:#fb9d00;">s</span><span style="color:#fba400;"> </span><span style="color:#faaa00;">t</span><span style="color:#f9b000;">h</span><span style="color:#f9b600;">e</span><span style="color:#f8bc00;"> </span><span style="color:#f7c200;">q</span><span style="color:#f6c800;">u</span><span style="color:#f6ce00;">e</span><span style="color:#f5d400;">s</span><span style="color:#f4da00;">t</span><span style="color:#f4e100;">i</span><span style="color:#f3e700;">o</span><span style="color:#f2ed00;">n</span><span style="color:#f1f300;">.</span><span style="color:#f1f900;">.</span><span style="color:#f0ff00;">.</span>
В своем ответе укажите, как должен отображаться ваш вывод (в виде html, в консоли, как изображение и т. Д.).
* Все черные фоны предназначены только для выделения цвета и не обязательны
счет
Это код-гольф , поэтому выигрывает самый короткий ответ (в байтах).
Если вам удастся добавить затухание для отдельных персонажей, то я всегда буду думать, что вы крутые (но без бонуса, так как это не будет справедливым для некоторых лангов)
#000000
и#ff0000
нет#800000
.000000
иff0000
должно бытьb40000
(255*sqrt((0+1)/2)
)Ответы:
JavaScript (ES6), 290 байт
источник
Pyth, 126 байтов
Обязательное среднеквадратичное среднее вместо прямого среднего арифметического.
Попробуйте онлайн!
Пример вывода:
источник
Java,
702662 символаДве функции игры в гольф:
Так как никто не может прочитать это: здесь есть обе функции в отличной версии в классе:
Здесь у вас есть верхняя граница для вашего собственного кода. Использование осуществляется путем вызова
colorize
(или c в версии для гольфа) и передачи текста и массива шестнадцатеричных цветовых кодов. Функция вернет строку с HTML-тегами, как это сделал OP, поэтому вам нужен какой-то способ визуализации HTML.Алгоритм проще, как выглядит вопрос. Первый персонаж всегда получает первый цвет, последний всегда последний.
Если в тексте больше цветов, чем символов, мы просто перебираем текст и цвета и применяем их.Самое интересное - это то, что исчезает: я начал с определения расстояния цветов в тексте. Я в основном вычисляю разницу красного, зеленого и синего между двумя заданными цветами, а затем добавляю часть этой разницы к первому цвету, в зависимости от того, где находится символ между цветами. Если он выходит из интервала двух цветов, мы начинаем с нового со следующими двумя цветами. Это повторяется для всех, кроме последнего символа, который, как мы знаем, всегда является последним цветом. Это дает очень красивое угасание.Этот вопрос был очень веселым! Благодаря!
Обновления
Сейчас я не занимаюсь всеми делами специально. Вместо этого я обрезаю цвета, если их много, и применяю функцию fade для каждой строки. Если цветов было больше, чем текста, то цвета будут обрезаны, а функция затухания будет работать точно как простое отображение.
источник