How many rounds to visit every place on a Monopoly style game board I see some kids playing on a circular gameboard trying to visit every field and I wonder how long it will take before they finish.
I can simulate it like below, but is there possibly an elegant solution that can compute or approximate this?
Rolling with a single 6 sided dice and moving on a Monopoly style board (36 fields) it takes on average about 12.55 rounds around the board with a variance of 13.8
The distribution seems to be approximately a Gumbel distribution (as this relates to the Coupon collectors problem which is also approximately Gumbel distributed). But there are some irregularities in the histogram which might have to deal with the moving around the board. We could use a model scheme like here but with an additional irregularity.

simulate = function(n = 4*9, d = 6) {
  fields = rep(0,n)
  position = 0
  counts = 0
  while(counts < n) {
    position = position + sample(1:d,1)
    if (fields[1 + position %% n] == 0) {
       fields[1 + position %% n] = 1
       counts = counts + 1
    }
  }
  return(position)
}


n = 36

set.seed(1)
x = replicate(5*10^4, simulate(n))
hist(x/n, breaks = seq((min(x)-4.5)/n,(max(x)+4.5)/n,4/n), xlab = "number of rounds", freq = FALSE)


mu = mean(x/n)
var = var(x/n)
scale = sqrt(var*6/pi^2)*1
location = mu - 0.57721 * scale
xs = seq(0,40,0.001)
lines(xs,evd::dgumbel(xs,location,scale), col = 2, lwd = 2)


My best idea so far is still simulation. Here is a vectorized approach that can complete a large number of simulations pretty quickly. The idea is to use a state vector initialized at $S=2^c-1$ for each replication, where $c$ is the number of positions on the board. $\mod\!\!{(S,2^{p+1})}<2^p$ when position $p\in0...c-1$ has not been visited yet. When a position is visited for the first time, update $S$ to $S-2^p$. When all positions have been visited, $S=0$
rdist <- function(n, cycle = 36L, d = 6L) {
  state <- rep(2^cycle - 1, n)
  fields <- integer(n)
  totdist <- integer(n)
  k <- 0
  
  while(k < n) {
    fields <- fields + sample(d, length(fields), TRUE)
    pos <- fields %% cycle
    a <- 2^pos
    state <- state - ((state %% (2*a)) >= a)*a
    idx <- which(bln <- (state == 0))
    if (length(idx)) {
      totdist[(k + 1L):(k + length(idx))] <- fields[idx]
      k <- k + length(idx)
      fields <- fields[-idx]
      state <- state[-idx]
    }
  }
  totdist
}

system.time(totdist <- rdist(1e5))
#>    user  system elapsed 
#>    1.50    0.13    1.63

