sábado, 27 de mayo de 2006

A programar se ha dicho

Hoy fue un dia de hueva con muchos que he tenido ultimamente, iba a ir a correr al parque pero mi amigo Jorge salió con que estaba muy "festejado" y no se iba a levantar temprano y por eso ya no fuimos. El juego de Metroid rondaba en mi cabeza, desde que empezé a trabajar no he vuelto a tocarlo, y ya me falta poco para terminarlo, espero un dia de estos pueda hacerlo, si no es que me gana la flojera. Recordé que Angel me comentó que hoy habia competición en TopCoder un sitio donde hacen concursos de programación en linea, algunas veces patrocinados por compañias como AMD e Intel, el concurso de hoy era a las 11:00 am y el registro empezaba a las 9:00 am, eran las 9:17 aun tenia tiempo y me registré, en sus multiples salas puede uno practicar con problemas de competiciones pasadas, el formato es el siguiente, te registras en la hora indicada y cuando empieza el concurso puedes seleccionar resolver 3 problemas, cuyos puntajes son de 250, 500 y 1000 puntos, hay 2 divisiones, la 1 y la 2 y como soy newbie en este sitio pues estoy en la 2, esta interesante porque se abre en un applet de Java o en una ventana de Java WebStart, seria algo asi como un Webservice en .NET y te muestra el planteamiento del problema, para resolverlo tienes que crear una clase pública que implemente un método también público y te dan los argumentos que debe tener y el tipo de dato que debe devolver, dan a escoger entre cuatro lenguajes para codificar, estos son: Java, C#, C++ y VB, yo elijo C# porque quiero aprender de lleno el lenguaje.

Bueno se abre el problema de 250 puntos, me pide calcular el número de combinaciones posibles que puede tener las dimensiones de una manta (largo y ancho) dado su área, la entrada del método debe ser un valor int (entero) y debe devolver también otro int; o sea si de entrada le doy 4, pues hay 2 combinaciones válidas, las dimensiones serian de 4x1 y 2x2, entonces debe devolver 2. Al principio no le agarraba la onda porque tenia que hacer un cálculo de numeros pares pero en seguida me dió la idea y lo hice, lo guardo, lo compilo... "compilation was succed", hasta aqui todo bien y el botón "test" me permite probar el programita, meto los valores de ejemplo y en uno me da un valor erróneo, checo el código y lo replanteo, el código que le injerté da la solución y no hay pedos; lo envío y me dice que recibo 124.5 puntos por mi clase, que satisfacción, mis primeros puntos. Me quedan más de 40 minutos para resolver los otros 2 problemas.

Abro el de 500 puntos y es un poco complicado, tardé un poco mas en entenderle, hablaba acerca del promedio móvil, asi que googleo un poco y por fin le entiendo al parecer, empiezo a codificar, esta vez casi no utilicé mi hoja de papel y mi lápiz para escribir psudocódigo como acostumbro a hacer. El método debe recibir como argumentos un valor de tipo int k y un array de double (valores numéricos reales con doble precisión) llamado data, el caso es que dado un vector almacenado en data debia dividir cada item del array entre el número k y a la siguiente iteración hacer lo mismo pero el valor del item sumado al anterior, luego de todos los cocientes debia obtener el mayor y el menor y la diferencia entre ambos es el valor que debia devolver mi método, lo hice rápido y estaba contento, aun me faltaban 20 minutos para probarlo, pero quiero guardar el código y tarda esa madre, lo cancelo y le doy de nuevo, ahora quiero compilarlo y me hace lo mismo, ahi perdí un poco de tiempo que podia servirme para probar la clase, debido a los errores en la compilación hago ajustes en el código y sintácticamente esta bien, lo compilo y manda un warning indicando que una de las variables no se utiliza, o sea que sobra dentro de la clase, como madres va a sobrar si realmente lo utilizo dentro del método, es mas hago operaciones con él; bueno, inicializo dicha variable y al momento de guardarlo no lo hace, maldición, me hace perder tiempo, por fin lo guarda y lo compilo, "compilation was succed" vuelve a mostrarme y entonces lo pruebo con uno de los ejemplos y mierda el compilador de C# que usan me lanzó una excepción diciendome que el tamaño del array que utilizo esta fuera de rango, y me dice en cual linea se encuentra, voy a dicha linea y me encuentro con que no hay ningun array declarado alli, de hecho en esa linea hago una simple inicialización de variables, me encabrona, f***ing compilador de mierda, y se acaba el tiempo, y por desgracia no mando el código a evaluación, pasa la fase de "challenge" donde los usuarios pueden probar que el código de otro concursante esta mal y asi ganar 50 puntos extras, afortunadamente a mi código de la manta no le hacen eso, termina la fase y pasamos a la final donde termina el concurso, se acaba el tiempo de la fase y me lanza una ventana con las puntuaciones obtenidas, busco mi "handle" y veo que en total points tiene un 0, que pasó aqui, donde estan mis 124.5 puntos que honradamente gané, más me encabronó y ya opté por cerrar la sesión y esperar el próximo concurso que será el dia 31 de este mes para hacer mi revancha ...

Horas después al checar el código de 500 puntos me doy cuenta que lo habia planteado mal, omití cierta operación, y que bueno que no lo mandé ya que debido a las nuevas reglas si el código esta mal te quitan puntos de tu score, asi que me salvé. Pienso que para ser mi segunda competición no esta mal, me entretuvo y esta muy interesante, puedo aprender mas.

0 comentarios:


Creative Commons License
Bitácora de Alex by José Alejandro Manuel Garcia is licensed under a Creative Commons Reconocimiento-No comercial-Compartir bajo la misma licencia 2.5 México License.