sample(6, 1, prob = rep(1/6,6))
## [1] 5
s <- sample(6, 1000, prob = rep(1/6,6), replace = TRUE)
mean(s == 6)  # ekvivalentan poziv sum(s==6)/length(s)
## [1] 0.177
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.5659
# Ideja je da definisemo koji ishodi predstavljaju pobedu za igrača 1, odnosno igrača 2.
# Npr. neka se baca novcic dva puta i kazemo da je igrač 1 pobedio ako se dogo-
# dio ishod pismo-glava, a igrač 2 ako se dogodio ishod glava-pismo. Na ovaj na-
# čin verovatnoce pobede oba igrača su jednake. Proverite 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 hoćemo da proverimo odnos pobeda igrača 1 odnosno igrača 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] 0.986456
# Odnos je približno isti, što znači da smo napravili fer igru. 

Primeri 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 početni kapital 5 i broj bacanja 20

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

# 2. način: Hoćemo da izbegnemo 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.88
frekv.plusa(5, 100)
## [1] 0.69
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 način:
  # koraci <- runif(N, 0, 1)
  # koraci[which(koraci < p)] <- -1
  # koraci[which(koraci >= p)] <- 1
  
  
  trajektorija <- rastojanje + cumsum(koraci)
  
  # Ako hoćemo da prekinemo kretanje kad pijanica dodje do provalije, tj. kad nam
  # trajektorija preseče 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 deo zadatka trebaju nam ishodi kod kojih posle N koraka dolazi do
  # provalije
  
  ifelse(trajektorija[length(trajektorija)] <= 0, 1, 0)
  
  # Ovde vidimo da nije neophodno pisati return, vratiće poslednji izraz 
  
  
}

# 2) Uzmimo neke konkretne vrednosti za p i N


pijanica(20, 0.7)
## [1] 1
# Isključiti 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.6731
mean(replicate(10000, pijanica(1000, 1/3)))
## [1] 0.5069
# 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 dodelimo vrednost 1 a za B -1
  glasovi[glasovi.A] <- 1
  glasovi[glasovi.B] <- -1
  
  # Zanimaju nas one trajektorije koje nisu došle do 0 (A je uvek vodio)
  trajektorija<-cumsum(glasovi)
  ifelse(any(trajektorija<=0),0,1) 
}

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

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