UEA: Diseño de Algoritmos
Trimestre: 2006 Invierno
Entrega: 9 de marzo de 2006 a las 10pm

Uno de los juegos infantiles más popular entre los niños pequeños es el llamado "Piedra, papel o tijeras". En este juego dos niños escogen uno de estos tres objetos. Si los dos niñ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 los volados (que de paso vale decir que no es cuestión de pura suerte) hay personas buenas para el juego que nos concierne.

Tu labor será la de escribir una función (o más, si así lo desean) en C que acepte un parámetro P de tipo int y que regrese un int. El valor de regreso será 1, 2 ó 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 el primer juego de una serie de juegos o los valores 1, 2 ó 3 para indicar cuál fue la tirada anterior de tu contrincante. El nombre de tu función deberá estar basado en el login que se te asignó durante el curso. Tu función no podrá usar ninguna variable global (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 se incluirán los archivos de encabezado math.h, stdio.h, stdlib.h y string.h (de modo que podrás utilizar las funciones matemáticas, de números aleatorios, de cadenas, etc.). Al final, yo escribiré un programa que realice un torneo entre todas las funciones que ustedes hayan escrito. Un partido de ese torneo enfrentará a dos funciones, las cuales jugarán una cierta cantidad grande de juegos consecutivos. Si ganas un juego se te otorgarán 3 puntos, si empatas 1 punto y si pierdes 0 puntos. Si tu función regresa un valor ilegal perderás un punto. Nota que en el torneo también competirá tu función contra sí misma. Por cierto, yo también escribiré algunas funciones y (aunque no pretendo ganar el torneo) también competirán contra ellas. Abajo les muestro ejemplos de funciones con las propiedades que se piden en esta tarea.

Hay dos formas de evaluación posibles y escogeremos una en clase: (1) La función que obtenga el mayor número de puntos en el torneo recibirá 10 de calificación en esta tarea. Los demás recibirán una calificación proporcional a la cantidad de puntos obtenidos en el torneo por su peor función. (2) Se harán dos torneos. En el primero competirán todas las funciones entre sí. Basados en los resultados de ese torneo, cada uno de ustedes podrá escoger una de sus funciones las cuales competirán nuevamente entre sí. La función que obtenga el mayor número de puntos en el segundo torneo recibirá 10 de calificación en esta tarea. Los demás recibirán una calificación proporcional a la cantidad de puntos obtenidos en el segundo torneo.

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