SHOW:
|
|
- or go back to the newest paste.
1 | Let Tickets be a random access list | |
2 | Let Rating(i) be the user rating of the ith song | |
3 | ||
4 | Initialization: | |
5 | Tickets[0] = 0 | |
6 | For (i=1 to SongNumber-1) | |
7 | Tickets[i] = (L[i-1] + Rating(i-1)) | |
8 | ||
9 | RatingSum = Tickets[SongNumber-1] + Rating(SongNumber-1) | |
10 | TicketSum = RatingSum | |
11 | ||
12 | ||
13 | ||
14 | Select Next Song: | |
15 | rnd = Random from 0 to TicketSum-1 | |
16 | ||
17 | // Use binary search to find the next song | |
18 | left = 0 | |
19 | right = SongNumber-1 | |
20 | While (left < right) Do | |
21 | i = left + ((left + right) / 2) | |
22 | If (Tickets[i] > rnd) | |
23 | right = i-1 | |
24 | Else | |
25 | left = i | |
26 | ||
27 | If (left == right) | |
28 | next_song = i | |
29 | ||
30 | // Update the ticket sum | |
31 | If (next_song == SongNumber-1) | |
32 | TicketSum = TicketSum + TicketSum - Tickets[next_song] | |
33 | Else | |
34 | TicketSum = TicketSum + Tickets[next_song+1] - Tickets[next_song] | |
35 | TicketSum = TicketSum + RatingSum | |
36 | ||
37 | // Update the individual tickets | |
38 | For (i=1 to next_song) | |
39 | - | Tickets[i] = Tickets[i] + Rating(i-1) |
39 | + | Tickets[i] = Min(Tickets[i] + Rating(i-1) - Tickets[i-1] , MaxTickets) + Tickets[i-1] |
40 | If (next_song < SongNumber-1) | |
41 | Tickets[next_song+1] = Tickets[next_song] | |
42 | For (i=next_song+2 to SongNumber-1) | |
43 | - | Tickets[i] = Tickets[i] + Rating(i-1) |
43 | + | Tickets[i] = Min(Tickets[i] + Rating(i-1) - Tickets[i-1] , MaxTickets) + Tickets[i-1] |
44 | ||
45 | Return next_song |