#include <iostream>
#include <functional>
#include <map>
#include <string>
#include <vector>
#include <iomanip>
using namespace std;

string liczba_na_pkn(int w);
void sprawdz_wynik(int gracz, int komputer);

int main()
{
	string typ{};
	const int k{ 0 }, p{ 1 }, n{ 2 };
	int magiczna_liczba{};
	vector<int> gra{ k, k, p, p, n, p, n, k, k, p, k, p, p, n, p, k, n, k, n, k, p, k, p, n };
	cout << "Napisz losową dodatnią liczbę całkowitą " << endl;
	cin >> magiczna_liczba;
	cout << endl << "PKM" << endl << endl << "> ";
	while (cin >> typ)
	{
		string typ_komputera = liczba_na_pkn(gra[magiczna_liczba%gra.size()]);
		int typ_gracza = [](string w)->int{if (w == "k")return 0; if (w == "p")return 1; if (w == "n")return 2; return 4; }(typ);
		switch (typ_gracza)
		{
		case 0:
			cout << typ << " przeciwko " << typ_komputera << endl;
			sprawdz_wynik(typ_gracza, gra[magiczna_liczba%gra.size()]);
			++magiczna_liczba;
			break;
		case 1:
			cout << typ << " przeciwko " << typ_komputera << endl;
			sprawdz_wynik(typ_gracza, gra[magiczna_liczba%gra.size()]);
			++magiczna_liczba;
			break;
		case 2:
			cout << typ << " przeciwko " << typ_komputera << endl;
			sprawdz_wynik(typ_gracza, gra[magiczna_liczba%gra.size()]);
			++magiczna_liczba;
			break;
		default:
			cout << "Dozwolone typy: k, p, n" << endl;
		}
		cout << endl;
		cout << "> ";
	}
}

string liczba_na_pkn(int w)
{
	switch (w)
	{
	case 0: return "k";
	case 1: return "p";
	case 2: return "n";
	}
	return "błąd";
}

void sprawdz_wynik(int gracz, int komputer)
{
	if (gracz == komputer)
		cout << "remis" << endl;
	else if ((gracz + 2) % 3 == komputer)
		cout << "gracz wygrywa" << endl;
	else
		cout << "komputer wygrywa" << endl;
	return;
}