You can weigh songs; let's say each song has a rating of 1.0 at the beginning, 0.5 if dropped and 1.5 if you click. Then you select a random element from the set of all points, with its probability, but weighted by its weight. A quick and dirty approach that I would think of would be to summarize all the weights. Choose a random number less than this amount. Move all songs until CurrentWeight + SongWeight> RandomNumber (aka CurrentWeight + = SongWeight)
Of course, you can make it arbitrarily more complex by introducing collaborative filtering :)
Imagine five songs. The first two fingers are up, the next one is a draft down, two are neutral.
{1: 1,5, 2: 1,5, 3: 0,5, 4: 1, 5: 1}
The amount of 5.5. Now we select a random number <5.5 and see: 2.43789
Now find the song to which this random number belongs.
Start with CurrentWeight = 0. First song weight = 1.5. CurrentWeight + 1.5 <2.43789 → we continue, but increase CurrentWeight by this weight of the song.
So CurrentWeight = 1.5. Next song weight: 1.5 again. But now, CurrentWeight + 1.5 == 3> 2.43789. This means that we have chosen the second song!
What you are doing here is basically choosing a random spot on the line, but increase the “territory” on that line, which would select the song if the song was dropped.
This creates a lot of repetition or does not depend mainly on how much you increase / decrease the weight of the songs.