Suntem intr-un caz tipic de "pata oarba".
Totul este scris, toate argumentele sunt date, ramane doar intrebarea "de ce combinari...?".
Nu stiu cum sa explic, scriu inca cateva propozitii, poate totul devine cu de la sine putere clar.
Exista 2^3 = opt functii de la {1,2,3} la {1,2}, nu ne trebuie, dar sa incepem asa. Cum le putem "enumera"? Fiecare astfel de functie f este determinata daca declaram tripletul:
( f(1), f(2), f(3) ) .
Care sunt posibilitatile pentru acest triplet?
Iata-le:
Cod
R = [1,2]
for i in R:
for j in R:
for k in R:
print "( %s, %s, %s )" % ( i,j,k )
( 1, 1, 1 )
( 1, 1, 2 )
( 1, 2, 1 )
( 1, 2, 2 )
( 2, 1, 1 )
( 2, 1, 2 )
( 2, 2, 1 )
( 2, 2, 2 )
Si acum trebuie sa le izolam doar pe cele in care avem de doua ori 2-ul si o data acel 1. Este clar ca ajunge sa declaram cele doua *pozitii* pe care se afla 2-urile (cand avem doua 2-uri).
La ( 1, 2, 2 ) avem pozitiile {2,3}.
La ( 2, 1, 2 ) avem pozitiile {1,3}.
La ( 2, 2, 1 ) avem pozitiile {1,2}.
Pozitiile parcurg toate submultimile cu doua elemente ale lui {1,2,3} .
Le numaram, dam de combinari de 3 (simboluri) luand cate doua din ele.
Mult mai simplu este daca uitam de combinari si ochim pozitia, acea una si singra, pe care se afla 1-ul. Aici este scarpinat sa luam multimea pozitiilor, pur si simplu pozitia lui 1 determina functia. Avem trei sanse sa luam aceasta pozitie.
Acum, dupa ce aceste lucruri sunt intelese, este bine totusi sa gandim combinatoric, structura in care se desfasoara solutia. Si este bine sa ne gandim ca solutia "3 functii" se scrie structural
"combinari de 3 luate cate 2", daca ochim pozitiile 2-urilor, si/sau
"combinari de 3 luate cate 1", daca ochim pozitiile 1-urilor.
(Pentru ca data viitoare nu mai avem probleme...)