//ricevimento 2023 07 05 (luglio)

int npronti = 0
condition tuttipronti;
int gnumeri = [];
condition ok2play[MAX]
int nallabandiera
int[2] punteggio;

def nuovapartita():
	punteggio[A]=0;
	punteggio[B]=0;

def chiama(squadra, numeri): //numeri è un vettore di interi
	if (npronti < 2 * MAX) tuttipronti.wait()
	gnumeri = numeri;
	nallabandiera = 0
	//tutti a casa! (se è finita la partita signal a tutti)
	if max(punteggio) >= 10
		for n in range(MAX):
			ok2play[n].signal()
			ok2play[n].signal()
	else
	//si gioca
	for n in numeri:
		ok2play[n].signal()
		ok2play[n].signal()
	return punteggio

def pronto(squadra, numero):
	npronti++;
	if (npronti == 2 * MAX) tuttipronti.signal();
	if (max(punteggio) >= 10) return 1; //esci se è finita la partita
	//lascieranno la pronti solo gli studenti che vengono chiamati
	if (not numero in gnumeri) //se non sono chiamata aspetto
		ok2play[numero].wait;
	npronti--;
	return 0

def allabandiera(squadra, numero):
	//l'ultimo che arriva alla bandiera ha perso, fa sempre parte della squadra perdente
	nallabandiera++
	if (nallabandiera == 2 * len(gnumeri)
		punteggio[1-squadra] ++ //l'altra squadra ha vinto