256-кольорові термінали, сумісні з Xterm, додають 240 кольорів поверх звичних 16 системних кольорів. Кольори 16-231 використовують 6 рівнів (0, 95, 135, 175, 215, 255) червоного, зеленого та синього кольорів, упорядкованих лексикографічно. Кольори 232-255 - це просто 24 рівня сірого (8 ... 238 на 10с). Щоб краще зрозуміти, про що я говорю, дивіться цю таблицю .
Змагання
Ваша мета - створити програму або функцію, яка приймає в якості значень rgb значення та виводить число, що відповідає найближчому кольору Xterm до цього значення rgb. Оскільки 16 системних кольорів (кольори 0-15) часто настроюються, ви виключаєте їх із цього перетворення.
Щоб краще визначити, який "найближчий" колір, використовуйте відстань на Манхеттені уздовж червоного, зеленого та синього компонентів. Наприклад, на rgb(10, 180, 90)
відстані 20 одиниць від rgb(0, 175, 95)
(колір 35), оскільки abs(10 - 0) + abs(180 - 175) + abs(90 - 95) == 20
. Якщо колір введення однаковий між двома або більше кольорами Xterm, виведіть колір Xterm з найвищим показником.
Приклади
R G B Xterm
0 0 0 ==> 16
95 135 0 ==> 64
255 255 255 ==> 231
238 238 238 ==> 255
90 133 140 ==> 66
218 215 216 ==> 188
175 177 178 ==> 249
175 0 155 ==> 127
75 75 75 ==> 239
23 23 23 ==> 234
115 155 235 ==> 111
Правила
- Стандартні лазівки заборонені
- Вашій програмі або функції дозволено приймати значення rgb у будь-якому розумному форматі, включаючи:
- Окремі аргументи для червоного, зеленого та синього кольорів
- Список, кортеж, словник тощо
- Рядок або stdin, розділений роздільником
- Шестигранні кольори (наприклад
#ff8000
)
- Можна припустити, що всі значення r, g і b будуть цілими числами від 0 до 255.
- Оскільки 16 системних кольорів повинні бути виключені з відображення, всі виходи повинні бути в діапазоні 16 ... 255.
Це код-гольф , тому найкоротший код виграє.