Google Code Jam 2013

Este año he vuelto a participar en el Google Code Jam y ha sido genial! Desconozco el número de participantes de este año, pero el año anterior fue de unos 35.000 programadores de todo el mundo.

La competición ha consistido en resolver 4 problemas, que comento brevemente sin entrar en detalle de las soluciones (ya que el concurso aún no se encuentra cerrado)

Con las dificultades propias de los problemas planteados en un idioma distinto al tuyo y las horas (con el cambio horario, el concurso comenzo a la 1 de la madrugada de hoy sábado en España),  he conseguido, a falta de las últimas correcciones,  quedar en la posición 1300, con 135 puntos y pasando a la siguente ronda (son necesarios 35 puntos para pasar).

 

google code jam 2013

Problem A. Tic-Tac-Toe-Tomek:

El tipico juego de “las 3 en raya”, en este caso, 4 en raya donde podíamos hacer una combinación ganadora con 4 piezas iguales o 3 piezas y un comodín en formato vertical, horizontal y diagonal y determinar si la victoria es para: jugador ‘X’, jugador ‘O’, quedan “en tablas” o es un juego incompleto.

Sencillo, lo resolví usando Python.

Problem B. Lawnmower:

Dado un jardín con césped con una medida determinada, deseamos cortar el césped en filas 1 × 1 metro a cierta altura. Para ello debemos configurar  la cortadora de césped (a cierta medida) antes de entrar en el jardín y empezar a cortar. Después de ajustar la configuración lo cortará desde cualquier dirección perpendicular al borde del césped por el que entró, hasta que salga por el otro lado, usándola tantas veces como quieras pero sin cambiar su configuración dentro del jardín.

Este programa me resultó bastante complicado de interpretar y entender, porque realmente no concretaban demasiado. Lo resolví finalmente usando Java.

Problem C. Fair and Square:

Dado un rango de enteros, debemos encontrar el número “ideal”  para nosotros, que es el que sea un palíndromo y cuadrado de un palíndromo al mismo tiempo. Finalmente indicar la cantidad de números “ideales” dentro de ese rango. Resolver la primera parte fue sencillo pero en el caso de entradas grandes de números (de 50 cifras y más) y de muchos casos de prueba resultaba muy lento.

Fue apasionante optimizar y optimizar los algoritmos hasta dar con una solución más rápida y eficaz. Lo hice en Python.

Problem D. Treasure:

Por último, el “cofre del tesoro”. Tenemos unos cofres dados y cada cofre puede estar vacío o contener llaves en su interior para abrir otros cofres. Los cofres se abren con un tipo de llave concreto cada uno y debemos encontrar el modo con el que podamos abrir más número de cofres e indicar la ruta que hemos seguido para hacerlo. Obviamente la más óptima en igualdad de número de cofres abiertos.

La resolución inicial era sencilla, pero la falta de casos de prueba y ejemplos, hacía realmente complicado saber algunos detalles que eran muy importantes para la correcta resolución del ejercicio (marcar la ruta exacta). Lo resolví usando también Python.

Ya estoy impaciente por conocer la puntuación final tras las correcciones y porque llegue la siguiente fase, el día 12 de abril, esta vez con un horario aún peor, ya que comienza a las 3 de la madrugada (hora española) y solo dispondré de 2 horas y media para terminarla.


Google+