# tombola/lotto
 
# algoritmo di base:
n <- 1:90                               # settiamo il vettore dei numeri
# estrazioni:
x <- as.integer(runif(1,1,length(n)+1)) # scegliamo l'indice
e <- n[x]                               # numero estratto
n <- n[-x]                              # togliamo l'estratto
# quindi si seguita a fare estrazioni
 
# funzione che fa le estrazioni: 
# problema: come accedere da una funzione una variabile che si trova 
# nel programma chiamante? Ovvero: chiamata per puntatore?
#
# una possibilita' e' di rimandare una lista
estrazione <- function(n) {
   if (length(n) > 0) x<-as.integer(runif(1,1,length(n)+1))
   e <- n[x] 
   n <- n[-x]
   return (list(e,n)) # ritorna numero estratto vettore dei numeri
                      # ancora da estrarre
}
 
# per chiamarla (fondamentali le doppie parentesi, in quanto si tratta
# di lista e non di vettore)
e <- estrazione(n)  
n <- e[[2]]        # vettore dei numeri ancora da estrarre
e[[1]]             # numero estratto
length(n)
 
# facciamo una function che simuli l'estrazione su una ruota del lotto
ruota <- function(){
   n <- 1:90 
   ris <- numeric()
   while ( length(ris) < 5 ) {
     e <- estrazione(n)
     n <- e[[2]]
     ris <- c(ris, e[[1]])
   }
   return (ris)
}
 
# --- TOMBOLA ------
# Ovviamente, per generare delle sequenze di tombola
# basta cambiare il while(), mettendo il limite a 90.
 
# --- METODI MENO BOVINI (grazie ad R!) ------------
# MA, a questo punto si capisce che, invece di fare
# le istrazione una alla volta, sarebbe stato piu'
# sufficiente 'mischiare' (ovvero permutare) i numeri,
# ottenendo quindi,
# indicando con
#    n e' il numero totale di bussolotti      (default lotto/tombola)
#    k e' il numero di bussolotti da estrarre (default => lotto)
 
estrazioni <- function(k=5, n=90) {
   return( sample( 1:n )[1:k] ) 
}
 
# Infine,
# per estrazioni una tantum, non c'e' manco bisogno di
# crearsi una funzione.
# Basta semplicemenete, ad es. per il lotto
sample( 1:90 )[1:5]