Newsgroup: it.hobby.enigmi
Titolo: i calzini di mio zio

Nel 1998 su it.hobby.enigmi venne postato questo quesito:
-----------------------------------------
Mio zio ogni mattina (esclusa la domenica) fa uno strano rituale.
1) Preleva a caso da un cassetto 3 calzini.
2) Se ci sono almeno 2 calzini dello stesso colore, li indossa rimettendo il 
restante nel cassetto.
3) Se i 3 calzini sono di colori differenti, li rimette nel cassetto e torna 
al punto 1.
Ogni lunedi mattina nel cassetto ci sono 16 calzini in tutto (8 blu, 6 neri, 
2 grigi), e dopo l'ultimo prelievo di sabato mattina, ne restano solo 4.
In quale giorno della settimana e' piu' difficile, per mio zio, ottenere un 
paio indossabile al primo tentativo ?
-----------------------------------------
ci furono una serie di risposte compresa quella del fido Mau il quale 
sosteneva che "se c'è una risposta univoca questa può essere solo il 
lunedi).
Personalmente sono d'accordo, per un fatto puramente matematico, ma volendo 
come al solito provare il sistema con un modello di simulazione (fermo il 
fatto che potrei averlo sbagliato :-D ) ho ricavato risultati discrodanti.
##########  Matematica:
facciamo due conti.
b=calzini blu
n=clazini neri
g=calzini grigi
la probabilità di tirar su tre calzini con almeno due dello stesso colore è 
1 meno la probabilità di estrarre tre calzini tutti diversi tra loro.
La probabilità di estrarre 3 calzini diversi è
perm(3,3)*b*n*g/((b+n+g)*(b+n+g-1)*(b+n+g-2))
e quindi la probabilità che mi ritrovi in mano almeno due calzini dello 
stesso colore estraendone 3 è
prob(b,n,g):=1-6*b*n*g/((b+n+g)*(b+n+g-1)*(b+n+g-2))
lunedì  -> prob(8,6,2) =  29/35 = 0.
8285714285
e supponendo che (alla lunga) i calzini che sono in numero maggiore siano i 
candidati più probabili ad essere estratti per quel giorno.
lunedì  -> prob(8,6,2) =  29/35 = 0.
8285714285
martedi -> prob(6,6,2) = 73/91 = 0.8021978021
mercoledi -> prob(4,6,2) = 43/55 = 0.
7818181818
giovedi -> prob(4,4,2) = 11/15 =  0.7333333333
venerdi -> prob(2,4,2) = 5/7 = 0.
7142857142
sabato -> prob(2,2,2) = 3/5 = 0.6
-------
domenica -> prob(0,2,2) = 1
[se i calzini di un certo colore finiscono e se quelli rimasti sono almeno 3 
la probabilità di estrarrne almeno due dello stesso colore è 1]
ergo lunedì (sui grandi numeri) dovrebbe essere il giorno in cui 
l'estrazione dei calzini risulta maggiormente problematica.
questa situazione dovrebbe verificarsi pure cambiando il numero dei calzini 
e infatti se proviamo con
b=8
n=6
g=4   (abbiamo aumentato di 2 i calzini grigi)
cambiano le percentuali ma il risultato è lo stesso: lunedì è il giorno 
peggiore.
adesso invece proviamo con il
##########  Modello di simulazione:
Ho implementato  un array nel quale  b+n+g calzini vengono collocati in 
maniera casuale.
Vengono estratti i primi 3 calzini dell'array ma se sono tutti diversi 
l'array viene rimescolato e si prelvano nuovamente i primi 3 calzini fino a 
quando nella terzina non se ne trovano almeno 2 dello stesso colore. Un 
contatore (associato al giorno) tiene conto di quante volte è necessario 
ripescare nell'array prima di trovare una terzina favorevole.
Vengono scalati 2 calzini dal colore equivalente a quelli estratti e si 
ripete l'algoritmo per altre 6 volte (una volta per tutti i giorni della 
settimana)
Se esegue questo algoritmo un numero N (elevato) di volte sommando via via i 
tentativi necessari in ogni diverso giorno della settimana per pescare due 
calzini uguali e si fa le percentuali.
L'algoritmo fa esattametne il lavoro mattutino dello zio.
Le percentuali però danno un risultato leggermente diverso
nel caso
b=8
n=6
g=2
N=10.000.000 di prove
tutto torna
Lun (0.166155)  giorno peggiore
Mar (0.155944)
Mer (0.149610)
Gio (0.142292)
Ven (0.134833)
Sab (0.128936)
Dom (0.122229)
mettendo invece
b=8
n=6
g=4  (due calzini grigi in più)
abbiamo
Lun (0.148304)
Mar (0.151251)  giorno peggiore !!
Mer (0.150859)
Gio (0.148345)
Ven (0.142243)
Sab (0.133838)
Dom (0.125160)
diventa MARTEDI  il giorno peggiore !!!
questa cosa secondo voi, matematicamente parlando, potrebbe avere un senso o 
è più probabile che vi sia un errore di valutazione nel mio modello di 
simulazione?

 l'estrazione dei calzini risulta maggiormente problematica.
a me sembra che 0.6 sia minore di 0.82, o mi sfugge qualcosa?
sabato e' il giorno peggiore (pero' ovviamente tu hai molto
semplificato,
che il sabato mattina ci sia un 2,2,2 sara' la cosa piu' probabile
magari,
ma non e' sicuramente un evento certo.
ciao.fabio.

 ...
Secondo me, devi simulare un miliardo di estrazioni casuali :-) e 
adottare la definizione frequentista della probabilità...

 lunedì  -> prob(8,6,2) =  29/35 = 0.
8285714285
Quella è la probabilità di trovare una coppia al primo tentavivo o
quella di non trovarla?
Mauro

a me sembra che 0.6 sia minore di 0.82, o mi sfugge qualcosa?
no hai ragione.
Ho scambiato la probabilità della funzione con quella del modello che è 
relativa al numero di estrazioni necessarie affinchè si abbia in mano almeno 
due calzini dello stesso colore.
Da cui se p è alto è facile che ci siano parecchie estrazioni (giorno 
problematico), con p basso le estrazioni sono poche.
al che mi pare evidente che ci deve essere un errore nel mio ragionamento 
matematico dato che da risultati opposti sia al modello sia rispetto a tutte 
le altre soluzioni proposte al problema.
Ma quale?

 quella di non trovarla?
p=6*b*n*g/((b+n+g)*(b+n+g-1)*(b+n+g-2))   è la probabilità di trovare una 
terna di calzini tutti diversi.
e (1-p), di conseguenza, deve essere la probabilità di trovare una terna con 
almeno due calzini uguali.

Dom (1000000 volte)
tu hai considerato che ad ogni estrazione valida devono essere levati 2 
calzini del colore trovato dal numero iniziale prima di procedere con 
l'estrazione del giorno successivo?
(te lo chiedo perchč anche a me inizialmente tornavano -piů o meno- i valori 
da te riportati ma non avevo ancora implementato questa occorrenza)

 l'estrazione del giorno successivo?
Sì.  Ho provato anche a guardare i calzini rimasti e i conti tornano, e
anche a me domenica viene il 100% (questo non garantiche che non ci
siano errori da altre parti).
Senza togliere i calzini tutti i giorni verrebbero uguali al primo.
Mauro

 Senza togliere i calzini tutti i giorni verrebbero uguali al primo.
Nel senso che io, all'inizio,  levavo due calzini sempre dal colore n di 
maggior numero e non dal loro specifico gruppo-colore.
Poi ho cominciato a toglierli eseguendo effettivamente l'estrazione, 
guardando il colore della terna di calzini estratti e togliendo 2 dal 
gruppo-colore di quelli accoppiati.
Perň mi risulta quanto meno bizzarro il fatto che matematicamente mi dia un 
risultato opposto al modello di simulazione!
Ero psicologicamente preparato a una ragionevole differenza ma a a una 
totale discordanza no. :-)

 wrote:

Ho provato anchio a simulare il rito, e i miei risultati sono simili:
{'mar': 122646, 'sab': 135636, 'ven': 130463, 'mer': 125079, 'gio':
128212, 'lun': 120815} numero tentativi
{'mar': 81670, 'sab': 78641, 'ven': 78164, 'mer': 80287, 'gio': 78729,
'lun': 82751} al primo tentativo
Il giorno piu` difficile per estrarre al primo colpo e` il ven, mentre
il maggior numero di tentativi occorre al sabato.
Questo e` il codice:
from random import *
settimana=[ "lun","mar","mer","gio","ven","sab" ]
stat=dict(zip(settimana,[0]*6))
tent=dict(zip(settimana,[0]*6))
iterazioni=100000
for i in xrange(iterazioni):
	cassetto=8*["blu"]+6*["rosso"]+2*["grigio"]
	for giorno in settimana:
		tentativo=0
		while(1):
			stat[giorno]=stat[giorno]+1
			tentativo=tentativo+1
			shuffle(cassetto)
			estrazione=cassetto[:3]
			if len (set(estrazione) ) < 3:
				if tentativo==1:
					tent[giorno]=tent[giorno]+1
				break
		c=[ [estrazione.count(i),i] for i in set(estrazione)]
		for numero,colore in c:
			if numero>1:
				cassetto.remove(colore)
				cassetto.remove(colore)
print stat
print tent