ICPC UAM Azcapotzalco‎ > ‎Ciclo de competencia 2014‎ > ‎

Torneo de Piedra-Papel-Tijeras

Uno de los juegos infantiles más popular entre los niñospequeños es el llamado "Piedra, papel o tijeras". En este juego,dos niños escogen uno de los tres objetos anteriores: si los dosniños escogen el mismo objeto se declara un empate; en otro caso"piedra" pierde con "papel", "papel" pierde con "tijeras" y "tijeras"pierde con "piedra". Así como hay personas buenas para losvolados, hay personas buenas en este juego.


Tu labor será la de escribir una función en C++ que acepte un parámetro P de tipo int y que regrese un int. El valor de retorno será 1, 2, o 3 según tu función escoja tirar "piedra", "papel" o "tijeras" respectivamente. Por otro lado, p podrá tomar el valor 0 para indicar que es la primera ronda de una serie de juegos o los valores 1, 2 o 3 para indicar cuál fue la tirada anterior de tu contrincante.

Tu función no podrá usar variables globales (aunque sí podrá usar variables static), no deberá solicitar ninguna entrada ni generar ninguna salida (incluyendo a través de archivos) y deberá compilar suponiendo que tu archivo fuente incluye todos los encabezados de la biblioteca estándar de C++17 disponibles en GCC.

Al final, yo escribiré un programaque ponga a competir cada posible pareja de funciones. Un "enfrentamiento" entre dos funciones consistirá en al menos 1000 rondasconsecutivas. Si ganas una ronda se te otorgarán 3 puntos, si empatas 1 punto y si pierdes0 puntos. El ganador de un enfrentamiento no obtiene puntos adicionales; sólo obtiene la suma de los puntos obtenidos en las rondas. Tu función también competirá contra sí misma.

Si tu función se ejecuta incorrectamente puede quedar descalificada; si regresa un valor ilegal perderásun punto y tu contrincante ganará 1 punto (suponiendo que él tiró algo válido). Si tu contrincante tira algo inválido, ése será el valor de p que tu función reciba en la siguiente ronda, por lo que deberán validar p para evitar que su función se comporte incorrectamente. Abajoles muestro ejemplos de funciones con las propiedades que se piden eneste ejercicio.

int franz_piedra(int p)
{
   return 1;
}
int franz_copia(int p)
{
   return (p == 0 ? 1 : p);
}
int franz_volado(int p)
{
   return 1 + (rand( ) % 5);
}