Вы действительно ограничиваете себя только шестью "базовыми" цветами?
255 255 0
255 0 255
0 255 255
0 0 255
0 255 0
255 0 0
Полагаю, вы собираетесь применить к этим цветам линейную функцию, чтобы попытаться их затухать. Это не обязательно будет выглядеть так же хорошо, как вы думаете - RGB как представление не очень линейно. Вы можете дешево приблизить лучшее "линейное" представление, используя вместо этого представление HSV или HSL . Они, конечно, не идеальны, но это будет немного более естественным, чем RGB.
Что касается сопоставления IP-адреса с цветом, вы можете сохранить эти цветовые комбинации в массиве и выбрать среди шести элементов, используя простую хеш-функцию . Что-то вроде этого может быть достаточно:
b1, b2, b3, b4 = <split the four bytes from an IP address>
index = (b1 * 17 + (b2 * 17 + (b3 * 17 + b4))) % 6
(Я только что выбрал множитель 17
из эфира - его двоичное представление - 10001
, что означает, что биты каждого байта в адресе «размазаны» друг над другом. Могут быть и лучшие значения. После того, как вы выбрали несколько цветов и несколько IP-адресов, вы можете попробовать изменить множитель, например, 21
или 53
и посмотреть, что имеет смысл.)