/**_________
 * Pergunta: 
 * Joguei numa determinada múltipla e acertei x números e y estrelas.
 * Quantos prémios obtive em cada uma das 12 categorias do EuroMilhões?
 * Para responder a isto, construi a classe PremiosDeApostaMultipla(). 
 * 
 * @dependencies nenhuma
 * @author       AJMello
 * @package      totogolo
 * @subpackage   euromilhoes
 * @class        PremiosDeApostaMultipla
 * @copyright    totogolo.com (v1-abr/05)
 * @license      Uso livre desde que MANTENHA ESTE CABEÇALHO INALTERADO!
 */

// Nota: Veja no fim deste arquivo um programa exemplo de uso!

/**
 * Combinação(n,p);(n>=p>0)
 */
function _Comb( n, p ) {
   var k1 = p; 
   var k2 = n - p;
   //__________
   // k1 >= k2 |
   if (k1 < k2) { k1 = n-p;  k2 = p; }
   if (k1 > n)  return 0;
   //__________________
   // r = n!/(k1!k2!); |
   else {
      var r=1;
      while (k2 > 1) r *= k2--;
      var d=1;
      while (n > k1) d *= n--;
      r= d / r;
   }
   return r;
}
/*
_______
Inputs:
   nC Números Certos
   eC Estrelas Certas

   nJ Números Jogados
   eJ Estrelas Jogadas
________
Outputs:
*/
_cnd = new Array(12); // Condições para ter prémio
_prm = new Array(12); // e nesse caso, determinação de quantos
_cnd["5+2"]="nC>=5 && eC>=2";                         _prm["5+2"]="C(nC,5) * C(eC,2)";
_cnd["5+1"]="nC>=5 && eC>=1 && eJ-eC>=1";             _prm["5+1"]="C(nC,5) * C(eC,1) * C(eJ-eC,1)";
_cnd["5+0"]="nC>=5 && eJ-eC>=2";                      _prm["5+0"]="C(nC,5) * C(eJ-eC,2)";
_cnd["4+2"]="nC>=4 && nJ-nC>=1 && eC>=2";             _prm["4+2"]="C(nC,4) * C(nJ-nC,1) * C(eC,2)";
_cnd["4+1"]="nC>=4 && nJ-nC>=1 && eC>=1 && eJ-eC>=1"; _prm["4+1"]="C(nC,4) * C(nJ-nC,1) * C(eC,1) * C(eJ-eC,1)";
_cnd["4+0"]="nC>=4 && nJ-nC>=1 && eJ-eC>=2";          _prm["4+0"]="C(nC,4) * C(nJ-nC,1) * C(eJ-eC,2)";
_cnd["3+2"]="nC>=3 && nJ-nC>=2 && eC>=2";             _prm["3+2"]="C(nC,3) * C(nJ-nC,2) * C(eC,2)";
_cnd["3+1"]="nC>=3 && nJ-nC>=2 && eC>=1 && eJ-eC>=1"; _prm["3+1"]="C(nC,3) * C(nJ-nC,2) * C(eC,1) * C(eJ-eC,1)";
_cnd["2+2"]="nC>=2 && nJ-nC>=3 && eC>=2";             _prm["2+2"]="C(nC,2) * C(nJ-nC,3) * C(eC,2)";
_cnd["3+0"]="nC>=3 && nJ-nC>=2 && eJ-eC>=2";          _prm["3+0"]="C(nC,3) * C(nJ-nC,2) * C(eJ-eC,2)";
_cnd["1+2"]="nC>=1 && nJ-nC>=4 && nJ-nC && eC>=2";    _prm["1+2"]="C(nC,1) * C(nJ-nC,4) * C(eC,2)";
_cnd["2+1"]="nC>=2 && nJ-nC>=3 && eC>=1 && eJ-eC>=1"; _prm["2+1"]="C(nC,2) * C(nJ-nC,3) * C(eC,1) * C(eJ-eC,1)";
// Categoria de prémios
_cat = new Array("5+2", "5+1", "5+0", "4+2", "4+1", "4+0", "3+2", "3+1", "2+2", "3+0", "1+2", "2+1");

// CLASSE:
function PremiosDeApostaMultipla(n, e) {
   var nJ = n; var eJ = e;
   var nC = 5; var eC = 2;
   this.setAcertos = function(n, e) {
   	nC = n; eC = e;
   }
   this.existePremio = function(p) { 
   	return eval(_cnd[_cat[p-1]]); 
   }
   this.getPremio = function(p) {
      var C = _Comb;
   	if (this.existePremio(p)) 
   		return eval(_prm[_cat[p-1]]);
   	else return "-";
   }
}

/*
//---------------------------+
// Programa exemplo de uso:  |
//---------------------------------------------
prmMult = new PremiosDeApostaMultipla(7, 7); // Fiz uma múltipla de 7 números e 7 estrelas
prmMult.setAcertos(4, 2);                    // e acertei em 4 números e 2 estrelas.
                                             // Quais os prémios em cada uma das 12 categorias?
premios = "";
for (i=1; i<=12; i++)
	premios += prmMult.getPremio(i) + " ";
document.write(premios);                     // Obtemos:
                                             // premios = "- - - 3 30 30 12 120 6 120 - 60"
//---------------------------------------------
*/