Tarea 7 de Diseño de Algoritmos

Trimestre 2012 Invierno
Entrega: 23 de marzo de 2012 a las 22:00.

Uno de los juegos infantiles más populares 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.

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.

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);
}