WOO logo

Kolmen kortin pokerin analyysi

Tässä on videolla luotu koodi.

#sisältää
#sisältää
#sisältää
#sisältää
#sisältää
#sisältää
käyttäen nimiavaruuden standardia;

rakennekortti {
	int r;
	kokonaisluku s;
};

void set_array(void);
int pistemäärä(int p1, int p2, int p3);
void jakaja(int p1, int p2, int p3, int psc, int tapahtuma_taulukko[]);

int pisteet_taulukko[22100];
korttipakka[52];

tyhjä pää()
{
	kokonaisluku i, p1, p2, p3, sc, kissa, pairplus_array[6], tapahtuma-array[4], kokonaisbonus[6];
	int ante_bonus_maksa[] = { 0,0,0,1,4,5 };
	__int64 tapahtumataulukko[6];
	string käden_nimi[] = { "Kolme yksittäistä","Pari","Värisuora","Suora","Kolmoset samaa","Värisuora" };
	string event_name[] = { "Pelaaja voittaa", "Jakaja ei täytä vaatimuksia", "Tasapeli", "Jakaja voittaa", "Pelaaja luovuttaa" };
	kokonaislukuindeksi = 0;
	kaksinkertainen ev = 0;
	for (i = 0; i < 6; i++)
	{
		kokonaisbonus[i] = 0;
		pairplus_array[i] = 0;
		tapahtumataulukko[i] = 0;
	}
	for (i = 0; i < 51; i++)
	{
		pakka[i].r = (kokonaisluku)(i / 4);
		pakka[i].s = i % 4;
	}
	set_array();
	for (p1 = 0; p1 <= 49; p1++)
	{
		kun (p2 = p1 + 1; p2 <= 50; p2++)
		{
			for (p3 = p2 + 1; p3 <= 51; p3++)
			{
				sc = pisteet_taulukko[indeksi];
				kissa = (kokonaisluku)sc / 2197;
				pairplus_array[kissa]++;
				jakaja(p1, p2, p3, sc, tapahtumataulukko);
				ev = (2.0 * (double)tapahtumataulukko[0] + (double)tapahtumataulukko[1] - 2.0 * (double)tapahtumataulukko[3]) / 18424.0;
				ev += ante_bonus_maksa[kissa];
				jos (ev < -1) // taita
				{
					tapahtumataulukko[4] += 18424;
				}
				muu
				{
					for (i = 0; i <= 3; i++)
						tapahtumataulukko[i] += tapahtumataulukko[i];
					tot_ante_bonus[kissa]++;
				}
				indeksi++;
			}
		}
	}
	printf("Pairplus-analyysi\n");
	for (i = 0; i < 6; i++)
		printf("%s\t%i\n", käden_nimi[i].c_str(), pairplus_array[i]);
	printf("\nEnnakkoanalyysi\n");
	for (i = 0; i <=4; i++)
		printf("%s\t%I64i\t%f\n", tapahtuman_nimi[i].c_str(), tapahtuman_kokonaisuuksien_array[i],(double)tapahtuman_kokonaisuuksien_array[i]/22100.0/18424.0);
	double pelin_arvo = (2.0 * (double)tapahtumakokonaistaulukko[0] + (double)tapahtumakokonaistaulukko[1] - 2.0 * (double)tapahtumakokonaistaulukko[3] - (double)tapahtumakokonaistaulukko[4]) / 22100.0 / 18424.0;
	printf("Pelin odotusarvo ilman Ante Bonusta=\t%f\n",game_ev );
	for (i = 0; i <= 5; i++)
		game_ev += ante_bonus_pay[i] * tot_ante_bonus[i] / 22100.0;
	printf("Pelin odotusarvo Ante Bonuksella=\t%f\n", game_ev);

}

void jakaja(int p1, int p2, int p3, int psc, int event_array[])
{
	kokonaisluku d1, d2, d3, i, dsc;
	kokonaislukuindeksi = 0;
	for (i = 0; i <= 3; i++)
		tapahtumataulukko[i] = 0;
	for (d1 = 0; d1 <= 49; d1++)
	{
		for (d2 = d1 + 1; d2 <= 50; d2++)
		{
			kohteelle (d3 = d2 + 1; d3 <= 51; d3++)
			{
				if ((d1 != p1) && (d1 != p2) && (d1 != p3) && (d2 != p1) && (d2 != p2) && (d2 != p3) && (d3 != p1) && (d3 != p2) && (d3) != p3) !
				{
					dsc = pisteet_taulukko[indeksi];
					jos (dsc < 1703) // jälleenmyyjä ei täytä vaatimuksia
						tapahtumataulukko[1]++;
					muuten jos (psc>dsc)
						tapahtumataulukko[0]++;
					muuten jos (psc < dsc)
						tapahtumataulukko[3]++;
					muu
						tapahtumataulukko[2]++;
				}
				indeksi++;
			}
		}
	}

}

void set_array(void)
{
	kokonaisluku p1, p2, p3, sc;
	kokonaislukuindeksi = 0;
	for (p1 = 0; p1 <= 49; p1++)
	{
		kun (p2 = p1 + 1; p2 <= 50; p2++)
		{
			for (p3 = p2 + 1; p3 <= 51; p3++)
			{
				sc = pisteet(p1, p2, p3);
				pisteet_taulukko[indeksi] = sc;
				indeksi++;
			}
		}
	}
}

int-pisteet(int p1, int p2, int p3)
{
	int huuhtelu, suora;
	korttikäsi[3];
	kasi[0].r = (int)(p1 / 4);
	kasi[1].r = (int)(p2 / 4);
	kasi[2].r = (int)(p3 / 4);
	kasi[0].s = p1 % 4;
	kasi[1].s = p2 % 4;
	kasi[2].s = p3 % 4;
	jos ((käsi[0].s == käsi[1].s) && (käsi[1].s == käsi[2].s))
		väri = 169 * käsi[2].r + 13 * käsi[1].r + käsi[0].r;
	muu
		huuhtelu = 0;
	jos ((käsi[2].r - käsi[1].r == 1) && (käsi[1].r - käsi[0].r == 1))
		suora = käsi[2].r;
	muuten jos ((käsi[2].r == 12) && (käsi[1].r == 1) && (käsi[0].r == 0))
		suora = 1;
	muu
		suora = 0;
	jos ((suora > 0) && (värisuora > 0))
		paluu 2197 * 5 + suora;
	muuten jos (käsi[2].r == käsi[0].r)
		return 2197 * 4 + käsi[0].r;
	muuten jos (suora > 0)
		paluu 2197 * 3 + suora;
	muuten jos (flush > 0)
		return 2197 * 2 + väri;
	muuten jos (käsi[2].r == käsi[1].r)
		return 2197 + 13 * kasi[1].r + kasi[0].r;
	muuten jos (käsi[0].r == käsi[1].r)
		return 2197 + 13 * kasi[1].r + kasi[2].r;
	muu
		return 169 * kasi[2].r + 13 * kasi[1].r + kasi[0].r;	
}