Бюджет:
4000 руб
Необходимо реализовать следующий алгоритм:
Имеется конечный массив цветов в формате RGB и целевой цвет также в формате RGB. Необходимо подобрать все варианты для получения целевого цвета, удовлетворяющие следующим условиям:
1. Максимальное число цветов из массива RGB три. Т.е. вариант может содержать один цвет, два или три цвета из заданного массива.
2. Для каждого цвета нужна пропорция с точностью один знак после запятой, которая в сумме с пропорциями других цветов из этого варианта в итоге дает целевой цвет с точностью приближения не менее 99% в цветовом пространстве LAB (дистанция между цветами).
3. Сумма пропорций всех цветов для каждого варианта должна составлять 100%
В качестве результата необходимо получить массив вариантов, отсортированный по количеству цветов и точности приближения к целевому цвету. Результатом может быть и пустой массив, если из заданных цветов нельзя в итоге получить целевой цвет.
Пример:
Есть массив цветов:
1. [52, 53, 50]
2. [90, 192, 255]
3. [0, 12, 51]
4. [28, 219, 6]
5. [94, 63, 54]
6. [38, 35, 81]
7. [244, 207, 17]
8. [78, 1, 255]
9. [85, 90, 125]
10. [177, 109, 204]
Цвет, который надо получить: [89, 165, 199]
Результат:
1 вариант: цвет 2 54%, цвет 6 46%. Приближение к целевому цвету 99,9%
2 вариант: цвет 2 40%, цвет 3 20,2%, цвет 10 39,8%. Приближение к целевому цвету 99,5%
3 вариант: цвет 7 15,3%, цвет 9 63,5%, цвет 10 11,2%. Приближение к целевому цвету 99,2%
Необходима рабочая реализация алгоритма для его проверки заказчиком (с показом и цифр, и самих цветов). Предпочтительный язык Swift (обговаривается).