sample(6, 1, prob = rep(1/6,6))
## [1] 1
s <- sample(6, 1000, prob = rep(1/6,6), replace = TRUE)
mean(s == 6)  # ekvivalentan poziv sum(s==6)/length(s)
## [1] 0.154
s <- sample(1:6, 10000, replace = TRUE, prob = c(1/21,2/21,3/21,4/21,5/21,6/21))

mean(s%%2 == 0)
## [1] 0.5757
# Ideja je da definisemo koji ishodi pretstavljaju pobjedu za igraca 1 odnosno 2.
# Npr neka se baca novcic dva puta i kazemo da je igrac 1 pobijedio ako se dogo-
# dio ishod pismo-glava, a igrac 2 ako se dogodio ishod glava-pismo. Na ovaj na-
# cin vjerovatnoce pobjede oba igraca su jednake. Provjerite ovaj rezultat
# eksperimentalno. 


nefer.igra <- function(p) {
# neka 0 predstavlja pismo, a 1 glavu

novcic <- sample(c(0, 1), 2, replace = TRUE, prob = c(p, 1 - p))

if (novcic[1] == 0 & novcic[2] == 1)
return (1)
else if (novcic[1] == 1 & novcic[2] == 0)
return (2)
else
return (0)
}
# Sada hocemo da provjerimo odnos pobjeda igraca 1 odnosno 2 u 10000 odigranih
# partija. Neka je p=0.1, 1-p=0.9

r <- replicate(10000, nefer.igra(0.1))
sum(r == 1) / sum(r == 2)
## [1] 1.021205
# Odnos je priblizno isti, sto znaci da smo napravili fer igru. 

Primjeri slučajnog lutanja

trajektorija <- function(A, N) {
  a <- numeric(N)
  
  s <- sample(6, N, replace = TRUE)
  
  a[1] <- A
  
  for (i in 1:N)
  ifelse(s[i] %% 2 == 1, a[i + 1] <- a[i] + 1, a[i + 1] <- a[i] - 1)
  
  return(a)
  
}

# Crtamo trajektoriju za pocetni kapital 15 i broj bacanja 20

plot(trajektorija(5,20), type="o", col="blue")

# 2. nacin: Hocemo da izbjegnemo petlju 

# Kumulativna suma vektora x=(x1,x2,...,xn) je vektor

#   x = (x1, x1+x2, x1+x2+x3, ... , x1+x2+x3+...+xn)


trajektorija2 <- function(A, N) {
s <- sample(6, N, replace = T)

i <- ifelse(s %% 2 == 1, 1,-1)

trajektorija <- cumsum(i) + A

return(trajektorija)

}

plot(trajektorija2(5, 20), type = "o", col = "red")

plus <- function(A, N) {
  a <- trajektorija2(A, N)
  
  ifelse(a[N] > 0, return(1), return(0))
  
}

frekv.plusa <- function(A, N, broj.sim = 1000) {
simulacije <- replicate(broj.sim, plus(A, N))
f <- mean(simulacije)
return(f)

}

frekv.plusa(5, 20)
## [1] 0.894
frekv.plusa(5, 100)
## [1] 0.713
frekv.plusa(100, 1000)
## [1] 1
pijanica <- function(N, p) {
  
  rastojanje <- 1
  
  koraci <- sample(c(-1, 1), size = N, replace = TRUE, prob = c(p, 1 - p))
  
  # Drugi nacin:
  # koraci <- runif(N, 0, 1)
  # koraci[which(koraci < p)] <- -1
  # koraci[which(koraci >= p)] <- 1
  
  
  # Sjetite se trajektorije sa 2. casa i funckije cumsum()
  
  trajektorija <- rastojanje + cumsum(koraci)
  
  # Ako hocemo da prekinemo kretanje kad kornjaca dodje do vode, tj kad nam
  # trajektorija presjece nulu:
  
  if (!all(trajektorija > 0)) # ili if(any(trajektorija)<=0)
    
    trajektorija <- trajektorija[1:which(trajektorija == 0)[1]]
  
  # Crtamo trajektoriju:
  
  #plot(trajektorija, type = "o" , col = "blue")
  
  # Za drugi dio zadatka trebaju nam ishodi kod kojih posle N koraka dolazi do
  # vode
  
  ifelse(trajektorija[length(trajektorija)] <= 0, 1, 0)
  
  # Ovdje vidimo da nije neophodno pisati return, vratice poslednji izraz 
  
  
}

# 2) Uzmimo neke konkretne vrijednosti za p i N


pijanica(20, 0.7)
## [1] 1
# Iskljuciti plot!

# p>0.5

mean(replicate(1000, pijanica(1000, 0.7)))
## [1] 1
# p<0.5

mean(replicate(10000, pijanica(1000, 0.4)))
## [1] 0.6615
mean(replicate(10000, pijanica(1000, 1/3)))
## [1] 0.4935
# Uporedite rezultate sa teorijskim.
izbori <- function(m, n) {
  
  # Biramo m ljudi koji su glasali za A
  glasovi.A <- sample(1:(m + n), size = m)
  
  # Ostali su glasali za B
  glasovi.B <- (1:(m + n))[-glasovi.A]
  
  glasovi <- numeric(m + n)
  # Glasovima za A dodijelimo vrijednost 1 a za B -1
  glasovi[glasovi.A] <- 1
  glasovi[glasovi.B] <- -1
  
  # Zanimaju nas one trajektorije koje nisu dosle do 0 (A je uvijek vodio)
  trajektorija<-cumsum(glasovi)
  ifelse(any(trajektorija<=0),0,1) 
}

mean(replicate(10^5,izbori(23,16)))
## [1] 0.1796
# Poredimo sa teorijskim rezultatom.

(23-16)/(23+16)
## [1] 0.1794872