# 1. zadatak 

# Zadatak 1: Simulirati bacanje regularne kockice za igru. Izracunati
# frekvenciju pojavljivanja šestice u 1000 izvodjenja eksperimenta. Nacrtati
# histogram frekvencija.


sample(6, 1, prob = rep(1/6,6))
s<-sample(6, 1000, prob = rep(1/6,6), replace = TRUE)
mean(s==6)  # ekvivalentan poziv sum(s==6)/length(s)
hist(s, main = "")


# Zadatak 2: Bacaju se istovremeno kocka za igru i novčić.
# a) Ispisati skup svih ishoda.


kocka<-c(1,2,3,4,5,6)
novcic<-c("pismo", "glava")

matrica.ishoda<-outer(kocka, novcic, FUN="paste", sep="")
matrica.ishoda

# b) Da li su svi ishodi jednako vjerovatni? Ocijeniti vjerovatnocu ishoda “5pismo”.

vektor.ishoda<-as.vector(matrica.ishoda)

# Pozicija ishoda pismo5 u vektoru ishoda

pismo5<-which(vektor.ishoda=="5pismo")

# Generisemo vektor od hiljadu elemenata iz skupa 1:12 na slucajan nacin

simulacije<-sample(length(vektor.ishoda), 1000,  replace = TRUE)

# Ocjena vjerovatnoce na osnovu frekvencija

mean(simulacije==pismo5)

# Zadatak 3: IgraČ baca strelicu na tablu na kojoj se nalaze tri koncentrična
# kruga poluprečnika 5, 10 i 15 cm. Najveći krug je upisan u kvadrat stranice 30
# cm. Smatra se da je svaki dio table ravnopravan.

# a) Napisati funkciju strelica() koja simulira opisanu igru. (Funkcija treba da
# vrati 1-ako je pogođen prvi krug, 2 za drugi i 3 za treći, -1 ako je strelica
# van krugova)

strelica<-function(){
  
  # Postavljamo koordinatni pocetak u centar kruga i na slucajan nacin biramo x i 
  # y koor- dinatu za pogodjenu tacku, (x,y) su iz [-15,15]x[-15,15]
  
  poz<-runif(2, -15, 15)
  
  # racunamo rastojanje tacke od centra
  
  r<-norm(poz, type="2")  # ekvivalentno: sqrt(sum(poz^2))
  
  if(r<=5)              return(1)
  else if(r>5 & r<=10)  return(2)
  else if(r>10 & r<=15) return(3)
  else                  return(-1)      
  
}

# b) Ocijeniti vjerovatnocu da je da je pogodjen 1., odnosno 2. krug.

# Koristimo funkciju replicate cijim pozivom 
# 1000 puta pozivamo funkciju strelica() i rezultate tih poziva smjestamo 
# u jedan vektor

simulacije<-replicate(1000, strelica(), simplify = "array")


# Napomena: Ako fji replicate proslijedimo argument simplify= F, vratice listu

table(simulacije)

frekvencije<-table(simulacije)/1000

frekvencije

# Ako izracunamo vjerovatnoce teorijski, gledajuci kao gemetrijsku vjerovatnocu 
# po formuli: P(A)=m(A)/m(kvadrat) , dobicemo priblizno:

#  -1           1             2         3

#  0.21460    0.08727    0.26180    0.43633


# c) Igrači A i B naizmjenično bacaju po tri strelice na tablu. Na početku igre
# imaju po 20 poena. Ako se pogodi prvi krug gubi se 1 poen, drugi 3, treci 5 i
# van kruga 10 poena. Igru započinje igrač A, a završava se kada jedan od igrača
# izgubi sve poene. Simulirati igru. Napisati funkciju pikado() koja vraća 1 ako
# je pobijedio igrač A, odnosno 2 ako je pobijedio igrač B.


# Pravimo pomocnu fju koja racuna koliko treba oduzeti poena igracu nakon jedne
# partije. Prosledjujemo joj vektor sa oznakama pogodjenih polja


poeni<-function(x){
  
  # racunamo koliko je puta pogodjeno svako polje
  
  krug.1<-sum(x==1)
  krug.2<-sum(x==2)
  krug.3<-sum(x==3)
  kvadrat<-sum(x==-1)
  
  return(krug.1 + 3*krug.2 + 5*krug.3 +10*kvadrat)
  
}



# Hocemo da napisemo funckiju pikado() koja vraca 1 ako je pobijedio igrac A, a
# 2 u suprotnom.


pikado<-function(){
  
  poeni.A<-20
  poeni.B<-20
  
  # Napomena:  
  # Indikator da je igrac A na redu: U aritmeticki izrazima T ce imati vr 1, a F 0
  
  A.na.potezu<-TRUE
  
  
  while(poeni.A*poeni.B>0){
    
    # Oduzimamo poeni igracu koji je na potezu
    
    poeni.A<-poeni.A - A.na.potezu*poeni(replicate(3,strelica()))
    poeni.B<-poeni.B - (!A.na.potezu)*poeni(replicate(3,strelica()))
    
    # Mijenjamo igraca
    
    A.na.potezu<-!A.na.potezu
    
    
  }
  
  # Ko prvi izgubi poene izgubio je igru.
  
  ifelse(poeni.A<=0 ,return (2), return(1))
  
  
}

# Ocijeniti vjerovatnocu da pobijedi igrac koji zapocinje igru, odnosno igrac A.
# Sta se ocekuje?


s<-replicate(1000,pikado())


mean(s==1)
mean(s==2)


# zadatak 4

# (a) Neka igrac ima pocetni kapital A i on baca kockicu. Ako dobije 1, 3 ili 5,
# njegov kapital se uveca za 1 dinar, a u suprotnom izgubi 1 dinar. Za N
# ponovljenih bacanja, nacrtati trajektoriju njegovog kapitala u zavisnosti od
# trenutnog bacanja. (dozvoljeno je da igrac ide u minus)

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")

# Primijetimo da je drugi nacin efikasniji

system.time(trajektorija(1, 10000))
system.time(trajektorija2(1,10000))


# a.1) Ocijeniti vjerovatnocu da igrac zavrsi u plusu posle N partija


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)
frekv.plusa(5,100)
frekv.plusa(100,1000)



# ZADATAK ZA SAMOSTALAN RAD

# Slijepa kornjaca se nalazi na 14.5 cm od vode i na slucajan nacin pravi korake
# duzine 1cm ka vodi, odnosno od vode (krecuci se po pravoj liniji). Koraci su
# medjusobno nezavisni, a vjerovatnoca da ce kornjaca napraviti korak ka vodi je
# p, dok je vjerovatnoca da ce napraviti korak od vode 1-p ( 0<p<1). Kretanje se
# zavrsava kada kornjaca dodje do vode.
# a) Simulirati kretanje kornjace i nacrtati trajektoriju kretanja
# b) Ocijeniti vjerovatnocu da ce kornjaca posle N koraka doci do vode
# c) Teorijski, izracunati vjerovatnocu da ce kornjaca u nekom trenutku doci do
# vode.

##### Uraditi zadatak ne koristeci petlje #####







