sábado, 27 de noviembre de 2010

Concurso de programación FISI 2010

Ayer fue el concurso de programación por el aniversario de la facultad. Este año participaron muchos equipos. Figuraban inscritos 13 equipos en la pagina web del concurso, aunque no me pareció ver tantos en el laboratorio.

A diferencia de anteriores oportunidades esta vez vi mayor organización, por lo menos en lo que respecta al desarrollo del concurso en sí.

Este año no quise perder la oportunidad de concursar y participe junto a dos amigos de mi base: Javier (misterio) y David (collique).

La competencia estuvo de película. Ni bien recibimos el pdf con los 5 problemas, leí el primero y comencé a programarlo. Mientras tanto misterio y collique leían los demás problemas y bosquejaban sus soluciones. Yo demoré en resolver mi problema a pesar de que estaba fácil. Creo que me cogieron los nervios y no pensaba bien. Pero con unas acertadas observaciones de collique, enviamos nuestra primer solución y nos saltó un alentador mensaje de ¡Correcto!

El siguiente en entrar a codificar fue collique que ya tenia una solución al cuarto problema. Yo pase a leer el quinto y a resolverlo en papel. Misterio ya tenia la solución del segundo y estaba trabajando con el tercero. Cuando misterio terminó con el tercero me ayudó a resolver el quinto y ultimo. Mientras tanto collique aún seguía codificando, estaba teniendo problemas.

Collique debía corregir algunos detalles así que guardo su avance y le cedió el turno a misterio que empezó a codificar el segundo problema en C++. Yo seguía afinando detalles del ultimo.

Unos cuantos minutos más tarde, misterio ya tenia terminado su código. Luego de algunas pruebas y observaciones, enviamos nuestra segunda solución y obtuvimos otro ¡Correcto!

Collique entro a terminar su problema, hizo unas correcciones y descargamos los casos de prueba pero el programa no los resolvió correctamente y esta vez nos ganamos una penalización.

Ya que solo nos faltaba codificar, ahora todos estábamos frente a la computadora tratando de encontrarle el error al cuarto problema. Pero se nos resistía y nos estábamos atrasando.

Dejamos nuevamente el problema D, y misterio entro a codificar el C en C++, vaya hombre... que de haberlo hecho en Java quizá nos hubiéramos demorado menos xD A mi también me gusta C++ pero cuando toca Java, toca xD

Por motivos que no podíamos determinar, el código de misterio no estaba funcionando bien. Le dimos muchas vueltas y no encontrábamos el error. Mientras tanto collique seguía pensando como arreglar el cuarto problema.

Ya había pasado un buen tiempo y seguíamos estancados. Solo habíamos entregado 2 problemas y con eso no alcanzaba para figurar entre los tres primeros. Otros equipos ya habían resuelto tres problemas y seguramente se iban por el cuarto. Empecé a creer que no ganaríamos.

Pero todo dio un giro repentinamente. Collique ya tenia la solución definitiva al cuarto problema y entro a la maquina a parchear su código. Misterio y yo repasamos los detalles del tercer problema para encontrar el error.

De pronto ya teníamos resueltos el C y el D y los enviamos casi seguidos obteniendo dos nuevos mensajes de ¡Correcto!

Hasta ese momento nos colocábamos en segundo lugar. Las esperanzas volvían. Y aunque ya teníamos resuelto el quinto problema en papel, había que codificar todo desde cero y quizá también parchear algunos errores.

Quedaban 50 minutos.

Esta vez entre a codificar yo. Trate de escribir lo mas rápido que podía. Este problema haría la diferencia y ya nos llevaban ventaja. Todos estábamos frente a la pantalla. Misterio me dictaba linea a linea lo que había escrito en el papel y así avanzábamos mas rápido. Pero de pronto misterio pregunto ¿Que va en este bucle? ¿Por que esta vacío? ¡Joder! ¡Me había dejado parte del código en mente! xD Menos mal era poco y si me acordaba :)

Ni bien terminamos de codificar, comenzamos el testeo. Tuvimos una serie de problemas por demás jodidos. Felizmente las ideas llovían, sobre todo de collique que se conocía algunas clases mágicas para dar formato a números reales, sin eso difícilmente habríamos terminado a tiempo.

Ya solo quedaban 6 minutos.

No quedaba mucho tiempo. Dejamos la consola lista y descargamos el ultimo caso de prueba. Ya no había tiempo para parchear ni arreglar nada. Si el programa estaba mal deberíamos resignarnos al fracaso.

Procesamos el archivo de entrada, hubo silencio. Un error en tiempo de ejecución en estos momentos habría sido fulminante. No paso nada, solo silencio. El archivo de salida se había creado correctamente. Le echamos un vistazo de rutina a la salida para detectar algo sospechoso como lineas en blanco o salidas extrañas. No vimos nada raro.

Un mudo temor se apoderaba de nosotros. Todo iba bien ¡Que extraño! Sentíamos la necesidad de corregir algo más antes de enviar la solución y no sabíamos qué.

Pero no, no había tiempo para más. Contuve la respiración, adjunte los archivos y le di a enviar. ¡Joder! ¡Correcto! Exhalé. ¡Muchachos, alisten sus cosas nos vamos! Y empezamos a guardar los libros y cuadernos en nuestras mochilas.

Me acerque a preguntar si nos podíamos retirar. Me dijeron que ya solo faltaban dos minutos y que íbamos en primer lugar xD Esperamos.

Al terminar el concurso, aun seguíamos primeros en la tabla. Vimos que solo un equipo más termino los 5 problemas. Yo no entendía bien los tiempos pero collique dijo que le ganamos al segundo puesto por una diferencia de tan solo 2 segundos :|


¿Que pudimos haber hecho en 2 segundos? ¿corregir algo más? ¿pensarlo dos veces? Para mí puede considerarse como un empate.

No quisiera terminar este post sin agradecer a los organizadores y felicitar a todos los que participaron en el concurso. Lo importante no es ganar, lo importante es divertirse y seguro que todos se han divertido tanto como yo.

Un saludo.

Actualización:

Dejo un link donde pueden descargar los problemas del concurso y el código de nuestras soluciones:

http://www.mediafire.com/?oy444aq1g7h2gh4

4 comentarios:

  1. Gracias por dejar los problemas!!

    ResponderEliminar
  2. ¿Existiría alguna posibilidad de que los casos de prueba, aun estén disponibles? es que me parecieron interesante los problemas, pero me gustaría confrontar los casos de prueba originales con los códigos que he hecho para los mismos :S...

    Igualmente un excelente blog.. (Y)

    ResponderEliminar
  3. Hola Cristian, no tengo los casos de prueba... ha pasado mucho tiempo desde entonces.

    Gracias por visitar el blog :)

    Un saludo.

    ResponderEliminar