Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- http://www.reddit.com/r/askscience/comments/35uljq/if_i_wanted_to_randomly_find_someone_in_an/cr89r0o
- #options:
- #initialize:
- simulate=function(move2=F,verbose=F){
- die=function(x=1){floor(runif(x,1,11))}
- coords=function(who){pos=which(park==who);y=ceiling(pos/10);x=pos%%10;if(x==0)x=10;return(c(x,y))}
- park= matrix(data=".",nrow=10,ncol=10,byrow=T)
- #place A
- posA=die(2)
- park[posA[1],posA[2]]="A"
- #place B
- overlap=T
- while(overlap){
- posB=die(2)
- if(! all(posB==posA)){overlap=F}
- }
- park[posB[1],posB[2]]="B"
- #plotpark=function(){for(i in 1:10){for(j in 1:10){cat(park[park$x==i & park$y==j,"who"], " ") };print("")}}#print()
- plotpark=function(){print(park)}
- if(verbose)plotpark()
- found=FALSE
- counter=0
- if(all(posB==posA)){
- warning("+++ REDO FROM START +++ >> collision")
- found=T
- }
- while(!found){
- counter=counter+1
- # #### A
- #get pos:
- pos=coords("A")
- x=pos[1]
- y=pos[2]
- if(verbose==2)cat("A: ",x,y,"\n")
- park[x,y]=counter
- #valid moves:
- dirs=c("U","UR","R","DR","D","DL","L","UL")
- if(y==1)dirs=grep("[^L]$",dirs,value=T)
- if(y==10)dirs=grep("[^R]$",dirs,value=T)
- if(x==1)dirs=grep("^[^U]",dirs,value=T)
- if(x==10)dirs=grep("^[^D]",dirs,value=T)
- if(verbose==2)print(dirs)
- dirs=sample(dirs,1)
- if(verbose==2)print(dirs)
- if(length(grep("D",dirs))==1) x=x+1
- if(length(grep("U",dirs))==1) x=x-1
- if(length(grep("R",dirs))==1) y=y+1
- if(length(grep("L",dirs))==1) y=y-1
- if(verbose==2)cat(x,y,"\n")
- newA=c(x,y)
- # #### B
- #get pos:
- pos=coords("B")
- x=pos[1]
- y=pos[2]
- if(verbose==2)cat("B: ",x,y,"\n")
- park[x,y]=counter
- #valid moves:
- dirs=c("U","UR","R","DR","D","DL","L","UL")
- if(y==1)dirs=grep("[^L]$",dirs,value=T)
- if(y==10)dirs=grep("[^R]$",dirs,value=T)
- if(x==1)dirs=grep("^[^U]",dirs,value=T)
- if(x==10)dirs=grep("^[^D]",dirs,value=T)
- if(verbose==2)print(dirs)
- dirs=sample(dirs,1)
- if(verbose==2)print(dirs)
- if(length(grep("D",dirs))==1) x=x+1
- if(length(grep("U",dirs))==1) x=x-1
- if(length(grep("R",dirs))==1) y=y+1
- if(length(grep("L",dirs))==1) y=y-1
- if(verbose==2)cat(x,y,"\n")
- newB=c(x,y)
- if(all(newA==newB))
- {
- found=T
- park[x,y]="X"
- }
- else{
- park[newA[1],newA[2]]="A"
- park[newB[1],newB[2]]="B"
- }
- #Search nieghbouring squares
- if(verbose==2)plotpark()
- }
- if(verbose)plotpark()
- if(verbose)cat("\n\nFound in: ",counter)
- return(counter)
- }
- simulate()
- nruns=10000
- dataA=rep(0,nruns)
- dataAB=rep(0,nruns)
- for(i in 1:nruns)dataA[i]=simulate()
- for(i in 1:nruns)dataAB[i]=simulate(T)
- summary(data)
- summary(dataAB)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement