1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# gradbot

size = 7

SONGS = (0..size-1).to_a

DONT_REPEAT_FOR = 3

def next_result pick, discard
  result = pick.delete_at(rand(pick.count));
  discard.push result
  pick.push(discard.shift) if (discard.count > DONT_REPEAT_FOR)
  result
end

def playlist_of_length n
  discard = []
  pick = SONGS
  playlist = []
  (0..n).each { playlist.push next_result(pick, discard) }
  playlist
end

def max_repeat(playlist, size)
  last = Array.new(size, 0)
  distances = Array.new(size, 0)
  i = 0
  playlist.each do |song|
    if i - last[song] > distances[song] then distances[song] = i - last[song] end
    last[song] = i
    i = i + 1
  end
  distances    
end

playlist = playlist_of_length 30000
# print playlist
print (max_repeat(playlist, size))