
# ripartiamo dai numeri random uniformi

# continui
runif(1)

runif(1, 0, 10)

runif(10, -1, 1)
runif(10, -1, 1)

( x = runif(10) )
( x = runif(10) )  

?runif

x = runif(100000)
hist(x, col='cyan')
hist(x, col='cyan', nc=100)
mean(x)

# numeri interi
sample(1:10)     # li mischia!

# mischia qualsiasi cosa  purché siano elementi di un vettore 
sample( c('a', 'b', 'c', 'd') )

sample(letters)
sample(LETTERS)
sample(c(LETTERS, letters))
sample(c(LETTERS, letters), 10)

# generatore di password da 10 lettere non ripetute
paste(sample(c(LETTERS, letters), 10), collapse='' )

# ottimo per fare un generatore di tombola
n.estr <- sample(90)
length(n.estr)
n.estr

for(n in n.estr) {cat(sprintf("Uscito %d\n", n)); Sys.sleep(1)}

# ma può essere usato anche per fare un vero generatore 
# di numeri (o altri 'oggetti') casuali, mediante "rep=TRUE"
# e il secondo argomento che indica il nr di valori

# 100 lanci di dadi
sample(6, 100, rep=TRUE)

# 100 numeri della roulette
sample(0:36, 100, rep=TRUE)

# o una password con lettere e cifre anche ripetute
# step 1, per capire cosa succede
sample(c(letters, LETTERS, 0:9))
# o, per aumentare la probabilità che ci siano delle cifre, 
sample(c(letters, LETTERS, rep(0:9,3)))    

# quindi
paste( sample(c(letters, LETTERS, rep(0:9,3)), 12), collapse='' )

#----------------------------------------------------------------
# analisi di numeri random, per avere un'idea ...
# (niente di rigoroso dal punto di vista probabilistico)
n <- sample(6, 10000, rep=TRUE)
hist(n, col='cyan') 
# -> brutto: hist non è fatto per queste cose...

table(n)
( tn <- table(n) )

barplot(tn, col='cyan')

barplot(tn, col='cyan', names=LETTERS[1:6] )

pie(tn)   
# anche se è banale

citta = c("Roma", "Milano", "Napoli", "Torino", "Palermo")
mil.abi = c(2.9, 1.4, 0.97, 0.88, 0.67)
pie(mil.abi, citta)
pie(mil.abi, citta, col=rainbow(5))

barplot(mil.abi, names=citta, col=rainbow(5))
barplot(mil.abi, names=citta, col=rainbow(20)[8:12])

#---------------------------------------------------------------
# Ripartiamo dai dadi
n1 <- sample(6, 1000, rep=TRUE)
n2 <- sample(6, 1000, rep=TRUE)

par(mfrow=c(2,1))
barplot(table(n1), col='cyan')
barplot(table(n2), col='cyan')

s = n1 + n2
d = n1 - n2

barplot(table(s), col='cyan')
barplot(table(d), col='cyan')

#--------------------------------------------------------------
# Una cosa simile vale anche per variabili continue: 
x1 <- runif(10000)
x2 <- runif(10000)


hist(x1, nc=50)
hist(x2, nc=50)

sx = x1 + x2
dx = x1 - x2
hist(sx, nc=50)
hist(dx, nc=50)

x3 <- runif(10000)
x4 <- runif(10000)
x5 <- runif(10000)

par(mfrow=c(3,1))
hist(sx, nc=50)
hist(sx + x3, nc=50)
hist(sx + x3 + x4 + x5, nc=50)

x6 <- runif(10000)
x7 <- runif(10000)
x8 <- runif(10000)
x9 <- runif(10000)

par(mfrow=c(1,1))
hist(sx + x3 + x4 + x5 + x6+x7+x8+x9, nc=50)

#-----------------------------------------------------

