View difference between Paste ID: ZbhZzePY and qYVcNDAs
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