Lilypie Primer PicLilypie Primer Ticker

viernes, 16 de noviembre de 2007

Crónicas del Google CodeJam (Beta)

Ayer tuve la oportunidad de participar (con muy poco éxito O0o.:| ) en la primera prueba abierta al público del concurso de programación Google CodeJam, como les comenté aqui.

Les comento como funciona, haré una comparación con TopCoder, ya que es una plataforma de concursos bastante popular (en la que participo a veces), y era donde se llevaba a cabo el CodeJam los pasados años.

En pocas palabras: La mecánica del nuevo CodeJam es TOTALMENTE diferente a la de TopCoder, las principales diferencias son:

  1. TopCoder está basado en un Applet de Java que debe ser instalado en nuestro equipo. CodeJam está basado totalmente en el navegador.
  2. TopCoder pone estrictos límites en cuanto a los lenguajes de programación que se pueden usar (Normalmente C++, C#, VB.NET y Java. También se admitía Python únicamente para los CodeJams). El nuevo CodeJam no pone restricción alguna. Los participantes pueden usar el lenguaje que prefieran, desde assembler hasta SQL :) ya les explicaré como esto es posible.
  3. En TopCoder y en otros sitios de concursos como el de la UVA, se debe enviar el código fuente. En el nuevo CodeJam NO se envia ningún código. De ahi que es posible usar cualquier lenguaje de programación.
  4. En TopCoder el tiempo empieza a correr cuando el participante abre un problema para verlo. En CodeJam el tiempo empieza a correr a partir de la hora fijada para el inicio del concurso.
  5. En TopCoder se tiene la opción de ver el código de otros participantes y eventualmente desafiar aquellos que parezcan incorrectos, ganando (o perdiendo) puntos por ello. En CodeJam esto no es posible, ya que, como ya dije, no se envía ningún código.


Ahora les cuento como funciona este nuevo CodeJam:


Solamente se necesita un navegador web, no applets, addins, ActiveX, ni nada. Solo el navegador. Se ingresa al sitio del concurso a la hora fijada (ayer fue a las 6.00PM PST, 10 de la noche en mi país (-4.00 UTC)) e inmediatamente se pueden ver los problemas. Ayer fueron 4 problemas de algoritmos de diferentes niveles de dificultad, y obviamente de diferentes puntajes. El tiempo de la competencia fue de 2 horas. (Para entonces ya tenia mucho sueño :O)

El tiempo empieza a correr a partir de la hora de inicio del concurso, y pueden visualizarse todos los problemas al mismo tiempo. A mi parecer esto beneficia a quienes participan en grupo, perjudicando a los participantes individuales. Mientas mas grande el grupo, mas ventajas. En TopCoder los participante los individuales tenemos un poco más de oportunidad.

Ahora si, vamos al corazón del asunto: Una vez visto y analizado el problema, tenemos la opción de resolverlo en cualquier lenguaje de programación, usando cualquier herramienta de desarrollo. No existe ninguna restricción.

Básicamente nuestro programa deberá leer un archivo de texto, realizar algun proceso, y generar un archivo de salida.

Les comento un problema del concurso de ayer a manera de ejemplo: Se trataba sobre sistemas de numeración, y básicamente se pedía: Dado un número N expresado en Base-X convertirlo a Base-Y. Las bases podían contener números, letras, símbolos, etc.

Entonces nuestro programa debía leer un archivo parecido a este:

100
9 0123456789 oF8
Foo oF8 0123456789
13 0123456789abcdef 01
CODE O!CDE? A?JM!.

........

La primera línea nos indica el número de entradas que tiene el archivo. 100, en este caso. Las lineas sucesivas son de la forma:

[N] [Base-X] [Base-Y]

Entonces nuestro programa deberá recorrer todas las entradas del archivo, convertir N expresado en BaseX a BaseY, e ir generando un archivo de salida parecido a este:

Case #1: Foo
Case #2: 9
Case #3: 10011
Case #4: JAM!
Case #5: I%`jEEa
Case #6: *LAs969

........

Una vez que hemos leído, analizado codificado y probado nuestro programa, deberemos bajar el archivo de entrada. A partir de ese momento tenemos un corto tiempo para enviar el archivo de salida.

Existen dos tipo de archivos de entrada para cada problema:

1. Archivos de entrada Pequeños

Típicamente 100 entradas.

Tenemos 4 minutos para enviar la solución.

Somos informados inmediatamente si nuestra solución fue considerada correcta o no.

Normalmente tiene un puntaje menor que los archivos de entrada grandes.

2. Archivos de entrada Grandes

Contienen 1000, 10000 o más entradas

Tenemos 8 minutos para enviar la solución

Solo se evalúa nuestra solución al final del concurso.

Normalmente tienen un puntaje mayor que los archivos de entrada pequeños.

Si nuestra solución no fue correcta, tenemos la opción de bajar otro archivo de entrada y enviar la nueva solución. Si esto ocurre somos penalizados con 240 segundos. El tiempo es importante en caso empate.

Existe un foro dedicado al concurso aqui

Así es entonces como funciona el nuevo CodeJam de Google. habrá que esperar las versiones definitivas para seguir participando.

3 comentarios:

Anónimo dijo...

Hola Marcos, te saluda Eliseo Ocampos desde Paraguay, es una pena que me haya enterado recién dos días después de haber terminado la competencia de que habilitaban el CodeJam, estuve un poco atareado en estos días.. :p

Quería preguntarte, cuándo es la proxima compentencia..? hay algun calendario..?

Saludos!
P.D.: Mi TC Handler es "roskoff".

J. Marcos Troncoso dijo...

Hola Eliseo, que pena q no hayas podido estar, los participantes eramos un poco más de 150, siendo que el límite que puso Google era de 500 participantes.

Respecto a tu pregunta, pues no tengo mayores novedades. Imagino que anunciarán algo en el foro o en la página del CodeJam que (por ahora) es www.google.com/codejambeta.

En todo caso por ahora las competencias son solamente pruebas para divertirse un poco. Imagino que cuando se lancen los CodeJams oficiales harán mucho más ruido y de alguna manera nos enteraremos.

Si llego a saber algo más, lo publicaré inmediatamente.

Saludos desde Bolivia.

Eliseo Ocampos dijo...

Gracias Marcos! Estaré atento a tu blog y a lo que pase en la red!
Saludos.
Eliseo.