Another idea:
First create a list for each individual value, i.e.:
Red, Red, Red, Red, Red Green, Green, Green Blue, Blue, Blue Yellow
Then combine them into one list, starting from the largest list, so that a new element is added to each i-th position. Remember the last insertion point so that you fill out the entire list, not just the beginning, as in David Gelhar's answer. Increment i if you reach the end:
Red, Red, Red, Red, Red // i = 1 Red, Green, Red, Green, Red, Green, Red, Red // i = 2 Red, Green, Red, Green, Red, Green, Red, Blue, Red // wrap-around, increment i Red, Green, Blue, Red, Green, Blue, Red, Green, Red, Blue, Red // i = 3 Red, Green, Blue, Red, Green, Blue, Red, Green, Yellow, Red, Blue, Red // i = 3
I do not think this will create the optimal solution, but it can be good enough for your purposes.